我正在编写ticktacktoe游戏,我希望每次点击都有自己的独立响应。但是我的循环弄乱了我的输出。它还在建设中,但我希望看到结果让我进步
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class tictac extends JFrame implements ActionListener{
JButton [][] game = new JButton[3][3];
JLabel head = new JLabel("Tic-Tac-Toe");
Font font = new Font("Time New Roman", Font.ITALIC, 20);
GridLayout grid = new GridLayout(3,3,0,0);
int row,column =0;
FlowLayout flow = new FlowLayout();
tictac(){
super("Tic-Tac-Toe");
//setLayout(flow);
//add(head);
setLayout(grid);
setVisible(true);
setDefaultCloseOperation(1);
setSize(500,500);
for (row =0; row<3;row++ ){
for(column =0; column <3;column++){
game[row][column]= new JButton("");
add(game[row][column]);
game[row][column].addActionListener(this);
}
}
}
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
int count=1;
for (row =0; row<3;row++ ){
for(column =0; column <3;column++){
if ((source == game[row][column]) && (game[row][column].getText()=="") && (count==1) )
game[row][column].setText("X");
if (source == game[row][column] && (count % 2==0))
game[row][column].setText("O");
else if (source == game[row][column] && (count % 2==1))
game[row][column].setText("X");
count++;
}// end of first for
} // end of second for
}
}
public class Tester {
public static void main(String[] args) {
tictac two = new tictac();
}
}
答案 0 :(得分:1)
代码中的一些问题:
==
进行比较。使用equals
方法。
就像那样:String str = "mytext";
if(str.equals("mytext")) // true !
actionPerformed(ActionEvent e)
。这意味着如果在其主体内声明变量,它将在发生新操作时重新初始化该值。看一下变量count
。count
似乎与玩家1和2的转向有关。问题是你在每个循环中为这个变量分配一个新值。要解决您的问题,您应该:
actionPerformed
方法之外声明变量。布尔值是合适的,因为你只有2个玩家,而布尔值是真或假。X
或O
最后有一些改进:
setDefaultCloseOperation(EXIT_ON_CLOSE);
答案 1 :(得分:0)
如果您在评论中说明了所需的行为:
我希望第一次点击给我一个X,然后点击下一步 给O,然后下一个X
...然后您的actionPerformed()
代码就像这样简单:
public void actionPerformed(ActionEvent e){
((JButton) e.getSource()).setText(clickCount++ % 2 == 0 ? "X" : "O");
}
为了工作,当然也要声明新的类字段:
int clickCount = 0;