Jogo da velha: começar nova partida

3 respostas
dfarias

Olá.
Eu quero q o programa nao termine depois de uma vitoria ou empate.

/*
        Jogo da velha

       Componentes:
       Daniel Farias
       Quelvin Morgado

     
     */

    package jogodavelha2;
    import javax.swing.*;// trabalha com janelas
    import java.awt.*;
    import java.awt.event.*;

    /*'o java.awt.event.*' é usado para colocar eventos, por exemplo em
     botões, em fields, ou capturar cliques do mouse. Logo usa-se o pacote event,e
     pausar mais de uma classe desse pacote, se for por exemplo usar
     so uma, usa-se somente o nome da classe colocando no lugar do *.
     */

    /*import java.awt.*; = Contém todas as classes para criação de interfaces do
     usuario, pintura, graficos e imagens.
     */


//JFrame é uma classe do pacote swing que representa uma janela
  
    public class JogoVelha2 extends JFrame implements ActionListener {
/*A interface de ouvinte recebeeventos de ação. A classe que está interessada no
 processamento de um evento de ação implementa essa interface, e o objeto criado
 com essa classe é registrada com um componente, utilizando o método do
 componente addActionListener. Quando o evento de ação ocorre,que o método
 actionPerformed 's é invocado.
 */

 


           JButton bot1,bot2,bot3,bot4,bot5,bot6,bot7,bot8,bot9;
           int velha[][] = new int[3][3];//vetor multidi, para campos do jogo 3x3
           int i, j, jogada = 1, int_lapis, flag = 0, val1, val2, val3;
           String jogador1, jogador2, lapis;

           //flag -> Reconhece ganhador
            public JogoVelha2() {
            //classe é usada para a interface
                    jogador1 = JOptionPane.showInputDialog("Digite o nome do 1º jogador");
                    jogador2 = JOptionPane.showInputDialog("Digite o nome do 2º jogador");

                    for(i=0;i<3;i++){
                            for(j=0;j<3;j++){
                                    velha[i][j] = 0;
                            }
                    }
                    /*for acima cria os campos do layout
                     *
                     */

                    
                    setLayout(new GridLayout(3,3,5,5));/* define espaçamento e
                     alinhamento dos campos para prenchimento das jogadas do layout
                    */

                    //botões
                    add(bot1 = new JButton(" "));
                    add(bot2 = new JButton(" "));
                    add(bot3 = new JButton(" "));
                    add(bot4 = new JButton(" "));
                    add(bot5 = new JButton(" "));
                    add(bot6 = new JButton(" "));
                    add(bot7 = new JButton(" "));
                    add(bot8 = new JButton(" "));
                    add(bot9 = new JButton(" "));


                    //aplica uma ação sobre os botões
                    bot1.addActionListener(this);
                    bot2.addActionListener(this);
                    bot3.addActionListener(this);
                    bot4.addActionListener(this);
                    bot5.addActionListener(this);
                    bot6.addActionListener(this);
                    bot7.addActionListener(this);
                    bot8.addActionListener(this);
                    bot9.addActionListener(this);
                   
                    setTitle("Jogo da velha ");//título da janela
                    setSize(210,150);//alterar o tamanho janela
                    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/* para que a
                    aplicação seja finalizada quando o usuario clicar no X da 
                    janela, caso contrário depois de fechar a janela o 
                    aplicativo continua rodando..*/


                                }
            
            

            public void actionPerformed(ActionEvent e) {
            //efetua ação sobre os botões
                    if (jogada % 2 != 0){
                            lapis	   =  "X";
                            int_lapis   = 1;
                    } else {
                            lapis =  "O";
                            int_lapis   = 2;
                    }
    /* lapis pode ser O ou X, sendo marcada em qualquer um dos nove campos do
     * vetor multidimensional "velha".
     */
                    jogada += 1;//pra q isso?

                    
                    if (e.getSource() == bot1) {
                            bot1.setText(lapis);//  1.marca X ou O sobre o botão
                            bot1.setEnabled(false);//2.desativa o botão para a marcação
                            velha[0][0] = int_lapis;
                    } else if (e.getSource() == bot2) {
                            bot2.setText(lapis);
                            bot2.setEnabled(false);
                            velha[0][1] = int_lapis;
                    } else if (e.getSource() == bot3) {
                            bot3.setText(lapis);
                            bot3.setEnabled(false);
                            velha[0][2] = int_lapis;
                    } else if (e.getSource() == bot4) {
                            bot4.setText(lapis);
                            bot4.setEnabled(false);
                            velha[1][0] = int_lapis;
                    } else if (e.getSource() == bot5) {
                            bot5.setText(lapis);
                            bot5.setEnabled(false);
                            velha[1][1] = int_lapis;
                    } else if (e.getSource() == bot6) {
                            bot6.setText(lapis);
                            bot6.setEnabled(false);
                            velha[1][2] = int_lapis;
                    } else if (e.getSource() == bot7) {
                            bot7.setText(lapis);
                            bot7.setEnabled(false);
                            velha[2][0] = int_lapis;
                    } else if (e.getSource() == bot8) {
                            bot8.setText(lapis);
                            bot8.setEnabled(false);
                            velha[2][1] = int_lapis;
                    } else if (e.getSource() == bot9) {
                            bot9.setText(lapis);
                            bot9.setEnabled(false);
                            velha[2][2] = int_lapis;
                    }

                    //Os fors abaixo são todas as possibilidades de jogadas;

                    //kd o for das jogadas horizontais?
                    for (i=0;i<3;i++){

                            val1 = velha[0][i];
                            val2 = velha[1][i];
                            val3 = velha[2][i];


                         //possibilidades para jogadas na vertical

                            if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                                    flag = 1;//determina vencedor 1
                            }

                            if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                                    flag = 2;//determina vencedor 2
                            }
                                    }

                    for (i=0;i<3;i++){
                                  //[linha][coluna]
                            val1 = velha[i][0];
                            val2 = velha[i][1];
                            val3 = velha[i][2];

                        //possibilades para jogadas na  horizontal


                         
                            if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                                    flag = 1;
                            }

                            if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                                    flag = 2;
                            }
                                    }

                            val1   = velha[0][0];
                            val2   = velha[1][1];
                            val3   = velha[2][2];

                 
                            /* ?|    |             ?=X ou O
                            *   | ?  |
                            *   |    |?

                            *Jogadas diagonal principal (esquerda para direita)
                            */


                    if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                            flag = 1;
                                                                      }

                    if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                            flag = 2;
                                                                      }

                    val1   = velha[0][2];
                    val2   = velha[1][1];
                    val3   = velha[2][0];

                    /*   |    |?            ?=X ou O
                     *   |  ? |
                     *  ?|    | 
                // possibilidade para a diagonal secundária (esquerda para a direita)
                     */

                    if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
                            flag = 1;//determina vencedor 1
                                                                      }

                    if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
                            flag = 2;//determina vencedor 2
                                                                      }

                    if (flag !=0) {
                            if(flag == 1){
                                    JOptionPane.showMessageDialog(this, jogador1
                                            + " ganhou!","Vencedor",JOptionPane.INFORMATION_MESSAGE);
                            } else if (flag == 2){
                                    JOptionPane.showMessageDialog(this, jogador2
                                            + " ganhou!","Vencedor",JOptionPane.INFORMATION_MESSAGE);
                            }
                           System.exit(0);//finaliza o programa
                           /*Pra que usa-lo? Nesse caso, se nao for usado, mesmo
                           depois da vitoria do jogador 1ou2 o aplicativo
                           continuaria funcionando. Ou seja mesmo depois de um
                           vencedor daria empate */
                                      }

                    if (jogada > 9){//se jogada for maior que nove, houve empate
                    JOptionPane.showMessageDialog(null,"Deu velha!","Empate",
                    JOptionPane.WARNING_MESSAGE);/*WARNING_MESSAGE, refere-se
                                                  * ao tipo de mensagem, logo o
                                                  * icone da janela será diferente
                                                  */
                            System.exit(0);//fecha o aplicativo.

                    }

                                    }

            public static void main ( String args[]) {
                
                 java.awt.EventQueue.invokeLater(new Runnable() {
                 public void run() {
                 new JogoVelha2().setVisible(true);
                               }
                                                                });

                                                    }
   }

3 Respostas

R

rapaz… do jeito que vc fez seu joguinho, a melhor solução seria colocar um while dentro do seu actionPerformed

o melhor seria separar neh… tirar tudo isso do action e colocar num método a parte… mas se nao quer alterar muito seu código, é só colocar um while antes mesmo do seu comentario "//efetua ação sobre os botões "

boolean jogoAtivo = true;

while ( jogoAtivo ) {
// seu codigo todo.. ideal seria chamar métodos para cada situação..
// assim, se o jogo acaba, ao invés de usar System.exit(0) no método, vc da um return e o método te joga pra ca
// dae vc pode exibir uma mensagem do tipo "jogar novamente?" que colocaria o jogoAtivo como false se a pessoa não quiser mais jogar
}
System.exit(0);
ViniGodoy

Tire dali o System.exit(0).
No lugar, vc pode mostrar um texto com um JOptionPane e zerar tudo para começar de novo.

Colocar o while dentro do ActionPerformed vai fazer seu jogo parar de ser desenhado.

dfarias

obrigado@!

Criado 20 de julho de 2011
Ultima resposta 21 de jul. de 2011
Respostas 3
Participantes 3