这是我的第一个 JavaFX 项目。
我使用 JavaFx 创建了一个 Tic Tac Toe 游戏。该游戏适用于玩家对玩家模式,非常完美,但我使用的代码太长。
以下是一些明显重复的内容,但它们完全不同:
这是我的按钮一的代码,我必须为另外八个按钮重复该代码:
one.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
System.out.println(1);
System.out.println("my state is " + state[0]);
if (state[0] == 0){
state[0] = 1 ;
for (int a: state ) {
System.out.print(a);}
if(i%2==0){
one.setText("X"); i+= 1;
System.out.println(i+"recorded");
turn.setText("O turn");
result[0] = 'x';
win() ;
}
else{
one.setText("O"); i+= 1 ;
System.out.println(i+"recorded");
turn.setText("X turn");
result[0] = 'o';
win() ;
}
}
}
});
屏幕截图:
是否可以选择避免为另外 8 个按钮重复代码?
您可以在屏幕截图中看到也有重复的 for 循环。
这是我的第一个 GUI 项目,但我不打算继续当初学者。
编辑
After I don't see any for-loop in the code. Perhaps you meant if-statements? – NiVeR
是的,我的意思是 if 语句。
最佳答案
尝试这样做:
void makeMove(Button button, JLabel turn, int cell){
System.out.println(cell);
System.out.println("my state is " + state[cell-1]);
if (state[cell-1] == 0){
state[cell-1] = 1 ;
for (int a: state ) {
System.out.print(a);}
if(i%2==0){
button.setText("X"); i+= 1;
System.out.println(i+"recorded");
turn.setText("O turn");
result[cell-1] = 'x';
win() ;
}
else{
button.setText("O"); i+= 1 ;
System.out.println(i+"recorded");
turn.setText("X turn");
result[cell-1] = 'o';
win() ;
}
}
}
one.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
makeMove(one,turn,1);
}
);
并对其他按钮重复此操作,将 1 更改为 2...9
该代码实际上仍然可以改进,但是,既然您说过您正在开始,那么这是开始考虑模块化代码的好方法。
我不确定 turn
是什么,所以我在 makeMove
的定义中将其设为一个标签,将其更改为实际情况。
关于java - 如何通过避免重复来缩短 Tic Tac Toe 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56698389/