Problemas com Logica

4 respostas
kmunga

Bom, estou fazendo um jogo da velha, inicialmente só pode ser jogado por 2 players(futuramente pretendo implementar uma AI pro computador). Nesta primeira etapa ele só faz testes na linha e coluna, horizontal e verticalmente.
Porem apesar de todos os testes, não estou conseguindo encontrar o erro, os ifs eram para checar se as linhas estão preenchidas com o mesmo caracter e devolver ao usuario uma mensagem de parabens.

Segue o codigo

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

public class JogoVelha extends JFrame {

    private JButton btProximo,btNovo;
    private JCheckBox ln1Col1,ln1Col2,ln1Col3,ln2Col1,ln2Col2,ln2Col3,ln3Col1,ln3Col2,ln3Col3;
    private String jogada;
    private String [ ] [ ] tabuleiro;
    private JLabel lbAnuncio;
    private static JogoVelha frame;
    private Boolean turno=true,vencedor;
    private int i,j;

    public JogoVelha (){
        inicializarComponentes();
        definirEventos();
        tabuleiro=new String[3] [3];
    }

    private void inicializarComponentes(){
        System.out.println(turno);
        jogada="Vez do jogador X";
        //turno=true jogador X, turno = false jogador O
        setLayout(null);
        setBounds(0,0,250,200);
        setTitle("Jogo da Velha do Zamba");
        ln1Col1=new JCheckBox();
        ln1Col2=new JCheckBox();        
        ln1Col3=new JCheckBox();
        ln2Col1=new JCheckBox();
        ln2Col2=new JCheckBox();
        ln2Col3=new JCheckBox();
        ln3Col1=new JCheckBox();
        ln3Col2=new JCheckBox();
        ln3Col3=new JCheckBox();
        ln1Col1.setBounds(70,30,50,20);
        ln1Col2.setBounds(120,30,50,20);
        ln1Col3.setBounds(170,30,50,20);
        ln2Col1.setBounds(70,50,50,20);
        ln2Col2.setBounds(120,50,50,20);
        ln2Col3.setBounds(170,50,50,20);
        ln3Col1.setBounds(70,70,50,20);
        ln3Col2.setBounds(120,70,50,20);
        ln3Col3.setBounds(170,70,50,20);
        btProximo=new JButton("Proximo jogador");
        btProximo.setBounds(20,100,100,30);
        btNovo=new JButton("Novo jogo");
        btNovo.setBounds(130,100,100,30);
        lbAnuncio=new JLabel();
        lbAnuncio.setText(jogada);
        lbAnuncio.setBounds(20,150,200,30);
        add(ln1Col1);
        add(ln1Col2);
        add(ln1Col3);
        add(ln2Col1);
        add(ln2Col2);
        add(ln2Col3);
        add(ln3Col1);
        add(ln3Col2);
        add(ln3Col3);
        add(btProximo);
        add(btNovo);
        add(lbAnuncio);
    }

    private void definirEventos(){
        ln1Col1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                System.out.println(turno);
                if(turno){
                     tabuleiro[0][0]="X";
                     ln1Col1.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[0][0]="O";
                     ln1Col1.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln1Col1.setState(false);

            }
        });
        ln1Col2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(turno){
                     tabuleiro[0][1]="X";
                     ln1Col2.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[0][1]="O";
                     ln1Col2.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln1Col2.setState(false);
            }
        });
        ln1Col3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(turno){
                     tabuleiro[0][2]="X";
                     ln1Col3.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[0][2]="O";
                     ln1Col3.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln1Col3.setState(false);

            }
        });
        ln2Col1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(turno){
                     tabuleiro[1][0]="X";
                     ln2Col1.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[1][0]="O";
                     ln2Col1.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln2Col1.setState(false);

            }
        });
        ln2Col2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(turno){
                     tabuleiro[1][1]="X";
                     ln2Col2.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[1][1]="O";
                     ln2Col2.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln2Col2.setState(false);

            }
        });
        ln2Col3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(turno){
                     tabuleiro[1][2]="X";
                     ln2Col3.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[1][2]="O";
                     ln2Col3.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln2Col3.setState(false);

            }
        });

        ln3Col1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(turno){
                     tabuleiro[2][0]="X";
                     ln3Col1.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[2][0]="O";
                     ln3Col1.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln3Col1.setState(false);

            }
        });
        ln3Col2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                if(turno){
                     tabuleiro[2][1]="X";
                     ln3Col2.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[2][1]="O";
                     ln3Col2.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln3Col2.setState(false);

            }
        });
        ln3Col3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){

                if(turno){
                     tabuleiro[2][2]="X";
                     System.out.println("testando");
                     ln3Col3.setLabel("X");
                     turno=false;
                     lbAnuncio.setText("Vez do jogador O");
                     venceu();
                } else {
                     tabuleiro[2][2]="O";
                     ln3Col3.setLabel("O");
                     turno=true;
                     lbAnuncio.setText("Vez do jogador X");
                     venceu();
                  }
                //ln3Col3.setState(false);

            }
        });

    }

    private void venceu(){
        vencedor=false;
        //verifica se a vencedor na linha
        for(i=0;i<3;i++){
            for(j=0;j<2;j++){
                System.out.println("linha "+i+" coluna "+j+":  "+tabuleiro[i][j]+" coluna a frente"+tabuleiro[i][j+1]);
                //verifica se todos os caracteres sao iguais na linha
                if(tabuleiro[i][j].equals(tabuleiro[i][j+1])||!tabuleiro[i][j].equals(null)||!tabuleiro[i][j+1].equals(null)){
                    vencedor=true; 
                }
                else{
                    vencedor=false;
                }
            }
        }
        System.out.println("");
        System.out.println("");
        //verifica se a vencedor na coluna
        if(!vencedor){
            for(i=0;i<3;i++){
                for(j=0;j<2;j++){
                System.out.println("linha "+i+" coluna "+j+":  "+tabuleiro[j][i]+" coluna a frente"+tabuleiro[j+1][i]);
                    //verifica se todos os caracteres sao iguais na coluna
                    if(tabuleiro[j][i].equals(tabuleiro[j+1][i])||!tabuleiro[j][i].equals(null)||!tabuleiro[j+1][i].equals(null)){
                        vencedor=true; 
                    }
                    else{
                        vencedor=false;  
                    }
                }
            } 
        }
        if(vencedor){
            lbAnuncio.setText("Parabens");
        }

    }

   public static void main(String [] args){
    SwingUtilities.invokeLater(new Runnable(){
      public void run(){
        frame=new JogoVelha();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension tela=Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation((tela.width-frame.getSize().height)/2,(tela.height-frame.getSize().height)/2);
        frame.setVisible(true);
      }
    });
  }
}

4 Respostas

Filipe_A

Bom dia kmunga,

private Boolean turno=true,vencedor;

O código acima está correto? Não seria:

private Boolean turno = new Boolean(true)
//ou
private boolean turno = true;

O que é este vencedor aí?

[]s

ViniGodoy

Melhor que isso:

private Boolean turno = new Boolean(true);

Seria isso:

private Boolean turno = Boolean.TRUE;

Mas ainda acho que no caso dele, o ideal é ficar no tipo primitivo mesmo.

O jeito que ele fez não dá problemas, mas é deselegante por fazer uso de AutoBoxing num ponto onde não faz muito sentido usa-lo. E por mostrar claramente que ele confunde o tipo Boolean com o tipo primitivo boolean.

kmunga

Filipe A.:
Bom dia kmunga,

private Boolean turno=true,vencedor;

O código acima está correto? Não seria:

private Boolean turno = new Boolean(true)
//ou
private boolean turno = true;

O que é este vencedor aí?

[]s

Vencedor é uma variavel tipo boolean que faz a checagem se tem um vencedor ou não ( veja a função venceu()). False para não, true para que existe um vencedor.

Irei tentar modificar a forma de declarar a variável, alias, a variável turno esta funcionando bem, porem o erro acontece na função venceu() pelo que eu pude observar.

Espero que tenha sido isso :smiley:

Filipe_A

ViniGodoy:
Melhor que isso:

Seria isso:

private Boolean turno = Boolean.TRUE;

Não sabia da existência deste atributo estático… :wink:

Criado 21 de janeiro de 2013
Ultima resposta 21 de jan. de 2013
Respostas 4
Participantes 3