GARANTIR DESCONTO

Fórum jogo da forca via cliente/servidor #477590

29/04/2014

0

1º O jogo da forca: ambiente gráfico em que o jogador A digita a palavra que no caso tem um tamanho máximo de 12 caracteres para ser descoberta. O jogador B tem 7 tentativas. Perdendo ou ganhando o jogador B digita a palavra a ser descoberta para o jogador A:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Forca1 extends JFrame{
    String Lista[] = {" " ,"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", 
            "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
            "U", "V", "W", "X", "Y", "Z"};
    private JToolBar Barra_Ferramenta = new JToolBar();
    private JLabel MSN = new JLabel(" Escolha uma Letra: ");
    private JButton Novo_Jogo = new JButton("Novo Jogo");
    private JComboBox Opcao = new JComboBox(Lista);
    private JLabel Ultima_Letra_Escolhida = new JLabel(" Utima Letra Escolhida: ");
    private JTextField Text_Letra = new JTextField();
    private JButton Palavra = new JButton("Ja sei a palavra certa!");

    private GridLayout Layout = new GridLayout(2,1);
    private JPanel Geral = new JPanel();
    private JPanel Panel_de_Controle = new JPanel();
    private JLabel Letra[] = new JLabel[12];
    private Enforcado Panel_da_Animacao = new Enforcado();
    private JLabel Barra_de_Status = new JLabel("  Numero de Letra(s) errada(s): 0");

    public Forca1(){
        super("Jogo da Forca");

        // Adicionando os componentes a Barra de Ferramenta
        Barra_Ferramenta.add(Novo_Jogo);
        Barra_Ferramenta.add(MSN);
        Barra_Ferramenta.add(Opcao);
        Barra_Ferramenta.add(Ultima_Letra_Escolhida);
        Barra_Ferramenta.add(Text_Letra);
        Barra_Ferramenta.add(Palavra);
        add(Barra_Ferramenta, BorderLayout.NORTH);
        // Configurações Iniciais
        for (int i=0; i<12; ++i){
            Letra[i] = new JLabel("__");
            Panel_de_Controle.add(Letra[i]);
            Letra[i].setFont(new Font("Serif" , Font.BOLD, 48));  
            Letra[i].setVisible(false);
        }


        Geral.setLayout(Layout);
        Geral.add(Panel_de_Controle);
        Geral.add(Panel_da_Animacao);
        add(Geral);

        Barra_de_Status.setFont(new Font("Serif", Font.BOLD, 14));
        Barra_de_Status.setHorizontalAlignment(SwingConstants.LEFT);
        add(Barra_de_Status, BorderLayout.SOUTH);


            Opcao.setEnabled(false);
            Text_Letra.setEnabled(false);
            Palavra.setEnabled(false);


        Eventos_JogoDaForca Eventos = new Eventos_JogoDaForca();
        Novo_Jogo.addActionListener(Eventos);
        Palavra.addActionListener(Eventos);
        Opcao.addItemListener(Eventos);

 }   
private class Eventos_JogoDaForca implements ActionListener, ItemListener{

        private String Palavra_Misteriosa, Palavra_Certa;
        int Tamanho_da_Palavra_Misteriosa, Letras_Encontradas, Numeros_de_Erros, Campos_Nao_Preenchidos;
        int Exibir_Messagem=0;

        public void actionPerformed (ActionEvent event){

            // Inicializando um novo Jogo
            if (event.getSource() == Novo_Jogo){

                Exibir_Messagem=0;
                Numeros_de_Erros = 0;

                Habilitando_Desabilitando_Componentes(false);

                for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i)
                    Letra[i].setVisible(false);

                Palavra_Misteriosa = JOptionPane.showInputDialog(Forca1.this, "Qual nome deve ser advinhado?");

                if(Palavra_Misteriosa != null){

                    if ((Palavra_Misteriosa.length() > 12) || (Palavra_Misteriosa.length() <= 0)) 
                        JOptionPane.showMessageDialog(
                                Forca1.this, "A palavra escolhida deverá ter no mímimo 1 e no máximo 12 caracteres!", 
                            "Menssagem", JOptionPane.PLAIN_MESSAGE);
                    else{

                        Habilitando_Desabilitando_Componentes(true);
                        Tamanho_da_Palavra_Misteriosa = Palavra_Misteriosa.length();

                        for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i){
                            Letra[i].setVisible(true);
                            Letra[i].setText("__");
                        }
                    }
                }
            }
            // Caso já se saiba a palavra a ser adivinhada
            if (event.getSource() == Palavra){

                Palavra_Certa = JOptionPane.showInputDialog(Forca1.this, "Qual é a palavra?");

                if (Palavra_Certa != null){
                    Exibir_Messagem=1;
                    // Caso a palavra digitada estiver correta...
                    if ((Palavra_Misteriosa.toUpperCase()).equals(Palavra_Certa.toUpperCase())){

                        // ... será atualizado o campo de exibição (palavra certa irá ser mostrada na tela)
                        for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i)
                            Letra[i].setText("" + Palavra_Misteriosa.toUpperCase().charAt(i));

                        Vencir();

                    } else Perdir();

                    Habilitando_Desabilitando_Componentes(false);
                }
            }
        }

        public void itemStateChanged(ItemEvent event){
            if(event.getStateChange() == ItemEvent.SELECTED){

                // Exibindo a última letra selecionada
                Text_Letra.setText("" + Opcao.getSelectedItem());


                Letras_Encontradas = 0;
                // Verificando se a letra selecionada é existente na palavra misteriosa
                for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i){
                    if (Text_Letra.getText().charAt(0) == Palavra_Misteriosa.toUpperCase().charAt(i)){
                       Letra[i].setText("" + Text_Letra.getText().charAt(0));
                       Letras_Encontradas++;
                    }
                } 


                Campos_Nao_Preenchidos = 0;
                for (int i=0; i<Tamanho_da_Palavra_Misteriosa; ++i)
                    if (Letra[i].getText() != "__") Campos_Nao_Preenchidos++;

                if ((Campos_Nao_Preenchidos == Tamanho_da_Palavra_Misteriosa) && (Exibir_Messagem==0)){

                        Habilitando_Desabilitando_Componentes(false);
                        Exibir_Messagem = 1;
                        Vencir();

                } else{

                    /* Caso a letra selecionada pelo Jogador não faça parte da 
                    palavra misteriosa será contabilizado erro*/
                    if ((Letras_Encontradas == 0) && (Exibir_Messagem==0)){

                        Numeros_de_Erros++; // Incrementando variável
                        // Desenhando animação
                        Panel_da_Animacao.setErro(Numeros_de_Erros);
                        // Atualizando o número de erros
                        Barra_de_Status.setText(" Numero de Letra(s) errada(s): " + Numeros_de_Erros);

                        if (Numeros_de_Erros == 7){
                            Habilitando_Desabilitando_Componentes(false);
                            Perdir();
                        }
                    }
                }
            }
        }


        public void Habilitando_Desabilitando_Componentes(boolean parametro){
            /* Quando parâmetro for verdadeiro os componetes abaixo 
            estaram ativados, ao contrário desativados*/
            Opcao.setEnabled(parametro);
            Text_Letra.setEnabled(parametro);
            Palavra.setEnabled(parametro);
        }

        public void Vencir(){      
            JOptionPane.showMessageDialog(Forca1.this, "Parabéns!!!");  
            Atualizar();
        }


        public void Perdir(){
            JOptionPane.showMessageDialog(Forca1.this, "Você falhou! \n Tente Novamete!");
            Atualizar();
        }

        public void Atualizar(){
            Panel_da_Animacao.setErro(7);
            Text_Letra.setText("");
            Opcao.setSelectedIndex(0);
            Barra_de_Status.setText(" Numero de Letra(s) errada(s): 0");
        }
 }








  class Enforcado extends JPanel{ 

    private int Erros;

        void setErro(int Numeros_de_Erros) {
            Erros = Numeros_de_Erros;
        }  

        public void paintComponent(Graphics g){
            super.paintComponents(g);

            if (Erros == 1){
                g.fillOval(5,5,205,205);
                repaint();
            }

            if (Erros == 2){
                g.fillOval(5,5,205,205);
                g.setColor(Color.WHITE);
                g.fillOval(55,65,30,30);  
                repaint();
            }

            if (Erros == 3){
                g.setColor(Color.BLACK);
                g.fillOval(5,5,205,205);
                g.setColor(Color.WHITE);
                g.fillOval(55,65,30,30);
                g.fillOval(135,65,30,30);
                repaint();
            }

            if (Erros == 4){
                g.setColor(Color.BLACK);
                g.fillOval(5,5,205,205);
                g.setColor(Color.WHITE);
                g.fillOval(55,65,30,30);
                g.fillOval(135,65,30,30);
                g.fillOval(50,110,120,60); 
                repaint();
            }

            if (Erros == 5){
                g.setColor(Color.BLACK);
                g.fillOval(5,5,205,205);
                g.setColor(Color.WHITE);
                g.fillRect(45,65,30,8);
                g.fillOval(55,65,30,30);
                g.fillOval(135,65,30,30);
                g.fillOval(50,110,120,60);  
                repaint();
            }

            if (Erros == 6){
                g.setColor(Color.BLACK);
                // Desenhando a cabeça
                g.fillOval(5,5,205,205);
                g.setColor(Color.WHITE);
                // Desenhando a primeira sobrancelha
                g.fillRect(45,65,30,8);
                // Desenhando o primeiro olho
                g.fillOval(55,65,30,30);
                // Desenhando a segunda sobrancelha
                g.fillRect(125,65,30,8);
                // Desenhando o segundo olho
                g.fillOval(135,65,30,30);
                // Desenhando a boca
                g.fillOval(50,110,120,60); 
                repaint();
            }

            // Limpa o Panel
            if (Erros == 7){
                g.clearRect(0,0,250,250);
                repaint();
            }
        }
    }  


    /**
     * @param args
     */
    public static void main(String[] args) {
        // Propriedades da Janela
        Forca1 Propriedades = new  Forca1();
        Propriedades.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Propriedades.setSize(800,520);
        Propriedades.setVisible(true);
        Propriedades.setResizable(false);
        Propriedades.setLocationRelativeTo(null);


        // TODO Auto-generated method stub

    }

}


2º Chat: nele eu consigo estabelecer comunicação entre dois computadores:

import java.io.DataInputStream;  
import java.io.DataOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.lang.String;  
import java.net.InetSocketAddress;  
import java.net.ServerSocket;  
import java.net.Socket;  
import java.net.UnknownHostException;  
import java.util.Scanner;  
import javax.swing.JOptionPane;  
  
public class chat1{
    public static void main(String[] args)  
    {  
        String hostt = null;  
        int porrt;  
        String portt = null;  
        String a;  
        Socket socket = new Socket();  
        
      a = JOptionPane.showInputDialog(null,"Iniciar Como Cliente?");  
      if (a.equals("sim"))  
      {  
          hostt = JOptionPane.showInputDialog(null,"Insira o host");  
          portt = JOptionPane.showInputDialog(null,"Insira a porta");  
            
          porrt = Integer.parseInt(portt);  
            
          startClient(hostt,porrt);  
          //non-static method startClient(int) cannot be referenced from a static context            
      }  
        
      else   
      {  
            
          portt = JOptionPane.showInputDialog(null,"Insira a porta");  
          porrt = Integer.parseInt(portt);  
          startServer(porrt);  
          //  
          //non-static method startServer(int) cannot be referenced from a static context  
          //  
      }  
        
        
    }  
  
    private static void  startClient(String host, int port)  
    {  
          
          
        try  
        {  
            Socket socket = new Socket();  
            socket.connect(new InetSocketAddress(host, port));  
            chat(socket);  
        }  
        catch (UnknownHostException e)  
        {  
            System.out.println("Host desconhecido");  
            System.out.println("Host: " + host);  
            System.out.println("Porta: " + port);  
            System.exit(2);  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
            System.exit(1);  
        }  
    }  
  
    private static void startServer(int porta)   
    {  
        try  
        {  
            ServerSocket socket = new ServerSocket(porta);  
            System.out.println("Aguardando conexao...");  
            Socket s = socket.accept();  
              
            chat(s);  
        } catch (IOException e)  
        {  
            System.out.println("Problemas na comunicação: ");  
            e.printStackTrace();  
            System.exit(1);  
        }  
    }  
  
    private static void chat(Socket s) throws IOException  
    {  
        System.out.println("Conectado com " + s.getRemoteSocketAddress());  
        listen(s.getInputStream());  
        talk(s.getOutputStream());  
    }  
  
    /** 
     * @param outputStream 
     */  
    private static void talk(OutputStream outputStream) throws IOException  
    {  
        DataOutputStream output = new DataOutputStream(outputStream);  
        String line = "";  
        while (!line.equals("EXIT"))  
        {  
            Scanner scan = new Scanner(System.in);          
            System.out.print(": ");  
            line = scan.nextLine();  
            output.writeInt(line.length());  
            for (char ch : line.toCharArray())  
                output.writeChar(ch);  
            output.flush();  
        }  
    }  
  
    /** 
     * @param inputStream 
     */  
    private static  void listen(final InputStream inputStream)  
    {          
        new Thread(new Runnable() {  
            DataInputStream ds = new DataInputStream(inputStream);  
            public void run()   
            {                  
                try  
                {  
                    while (true)  
                    {  
                        int size = ds.readInt();  
                        int cont = 0;  
                        char[] chars = new char[size];  
                        while (cont < size)  
                        {  
                            chars[cont] = ds.readChar();  
                            cont = cont + 1;  
                        }  
                          
                        String str = new String(chars);  
                        if (str.equals("EXIT"))  
                        {  
                            System.out.println("Conversa terminada.");  
                            System.exit(0);  
                        }  
                          
                        System.out.println(str);  
                    }  
                } catch (IOException e)  
                {  
                }  
            }  
        }).start();  
    }  
}  


Eu tenho uma dúvida como colocar o jogo para rodar neste chat?
Carlos Leonel

Carlos Leonel

Responder

Posts

29/04/2014

Eduardo Pessoa

esse jogo ta funcionando de boa?
Responder

Gostei + 0

30/04/2014

Carlos Leonel

Sim funciona bem mesmo o meu negocio é colocar dentro deste chat ou criar um socket para fazer a comunicação
Responder

Gostei + 0

30/04/2014

Eduardo Pessoa

Carlos, tava pesquisando aqui, não encontrei nada sobre o assunto, procurei assim "rodando jogo em um chat". e nenhuma solução.
Responder

Gostei + 0

30/04/2014

Carlos Proença

Fala Xara...

seguinte .... n entendi bem sua duvida... se o chat ja funciona... vc pode usar a mesma ideia para fazer seu jogo em rede....

tipo um jogo em cada maquina e as palavras e chances sao passadas de um jogo pro outro... via socket...

creio que é só voce adaptar para conseguir...

qualquer coisa grita ai

att.
Responder

Gostei + 0

01/05/2014

Carlos Leonel

Xara, beleza!
Obrigado, por ter postado. Mas a minha dúvida é usar este chat para o jogo. Eu já vi sim jogo da forca via socket mas não quero copiar o código de ninguém para usá-lo. Como ainda sou iniciante dá pra fazer isto neste jogo aí? E qual seria o código para isso?
Responder

Gostei + 0

02/05/2014

Carlos Proença

entao... rsrs

tipo.. da sim...

mas vamos te deixar isso de desafio.. hehe

por exemplo... voce consegue ver onde vc define as palavras que serao usadas no jogo?? voce ja testou ele neh? se essa palavra n foce pega de um JOptionPane e viesse de um socket igual tem no chat? e se vc enviasse todas as letras para o jogador B que o jogador A digita para ver se ele ta acertando?

agora sobre o chat.... n seria legal se tivesse um JTextArea onde as strings que vem da conversa do chat focem mostradas na tela?

o codigo em si.. ja esta pronto.. é só voce usar a imaginação rsrs

qualquer duvida só falar

att.
Responder

Gostei + 0

01/06/2014

Gustavo Medeiros

Usei o javac para compilar mas deu erro e tive que compilar com o -Xlint e o bonito me mostrou esse dai

Forca1.java:13: warning: [unchecked] unchecked call to JComboBox(E[]) as a membe
    private JComboBox Opcao = new JComboBox(Lista);
                              ^
  where E is a type-variable:
    E extends Object declared in class JComboBox
1 warning
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar