我的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();
}
}
答案 0 :(得分:0)
此声明错误
private char whoseTurn = 'x';
必须在 Cell 类之外。如果没有,则每个单元格的转动设置为&#39; x&#39;,因此转弯永远不会改变。
应该是:
public class Frame extends JFrame {
private char whoseTurn = 'x';
干杯。