TicTacToe不改变转弯

时间:2017-08-09 14:14:17

标签: java

我的TicTacToe不会改变转弯。当我按下一个单元格时,它只标记了 标记为'x'的单元格。换句话说,它只加载'x'图片,而不加载另一个'0'图片。游戏识别出有人赢了但是没有在获胜回合中画出最后一个标记。提前谢谢。

public class Frame extends JFrame{


private Cell cell[][] = new Cell[3][3];
private JPanel panel = new JPanel(new GridLayout(3, 3, 0, 0));

Frame(){
    setSize(300, 300);
    setName("TicTacToe");
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    for(int i=0;i<3;i++){
        for(int j=0; j<3; j++){
            panel.add(cell[i][j] = new Cell());
        }
    }
        add(panel);
    }
public boolean CheckWin(char token){
    for(int i=0; i<3; i++){
        for(int j=0;j<3;j++){
            if(cell[i][0].getToken() == token &&
                    cell[i][1].getToken() == token
                    && cell[i][2].getToken() == token){
                return true;
            }
            if(cell[0][j].getToken() == token &&
                    cell[1][j].getToken() == token
                    && cell[2][j].getToken() == token){
                return true;
            }   
            }
        }
    if(cell[0][0].getToken() == token &&
            cell[1][1].getToken() == token && 
            cell[2][2].getToken() == token){
    return true;
    }
    return false;
}
public boolean IsFull(){
    for(int i=0; i<3; i++){
        for(int j=0;j<3;j++){
            if(cell[i][j].getToken() == ' '){
                return false;
            }
        }
}
    return true;

}


public class Cell extends JPanel{

private char whoseTurn = 'x';
private char token = ' ';


Cell(){
    setBorder(new LineBorder(Color.red, 1));
    addMouseListener(new MyMouseListener());
}
public char getToken() {
    return token;
}

public void setToken(char token) {
    this.token = token;
    MakePictures();

}
public void MakePictures(){
    if(getToken() == 'x'){  
        ImageIcon image = new ImageIcon(getClass().getResource("/Pictures/x.png"));
        JLabel label = new JLabel(image);
        pack();
        add(label);
        setVisible(true);
    }
    else if(getToken() == '0'){
        ImageIcon image = new ImageIcon(getClass().getResource("/Pictures/0.png"));
        JLabel label = new JLabel(image);
        add(label);
        pack();
        setVisible(true);
    }
    }


    public class MyMouseListener extends MouseAdapter{


        public void mouseClicked(MouseEvent e){
            if(token == ' ' && whoseTurn != ' ')
                setToken(whoseTurn);

            if(CheckWin(token)){
                whoseTurn = ' ';
                System.out.println("Voitit");

            }
                else if(IsFull()){
                    System.out.println("Tasapeli");
                    whoseTurn = ' ';
                }
                else{
                    whoseTurn = (whoseTurn == 'x') ? '0' : 'x';
                    System.out.println(whoseTurn);

            }
        }
    }
}
}

这是主要课程。

public class TicTacToe {

public static void main(String[] args) {
    Frame frame = new Frame();
}

}

1 个答案:

答案 0 :(得分:0)

此声明错误

private char whoseTurn = 'x';

必须在 Cell 类之外。如果没有,则每个单元格的转动设置为&#39; x&#39;,因此转弯永远不会改变。

应该是:

public class Frame extends JFrame {

    private char whoseTurn = 'x';

干杯。