我尝试制作双人Tic-Tac-Toe应用,并且需要在相同的按钮(b[][])
上发生两件不同的事情,或者将文字""
转为"O"
或"X"
,取决于轮到谁了。
在这里,我有一个默认为1的旗帜,这应该标志着它的玩家1(O' s)转向。运行该程序,它总是玩家2(X' s)无论如何转。
我对onClickListener
的工作方式感到有些困惑。我可以看到,可能会立即调用条件flag == 1
,立即将标志设置为0?对我来说,它仍然没有意义,它首先没有完成将按钮文本设置为"O"
的过程。怎么了?我该如何解决这个问题?
class MyClickListener implements View.OnClickListener {
int x;
int y;
public MyClickListener(int x, int y) {
this.x = x;
this.y = y;
}
public void onClick(View view) {
int flag = 1;
if (b[x][y].isEnabled()) {
b[x][y].setEnabled(false);
}
if(flag == 1) {
b[x][y].setText("O");
c[x][y] = 0;
textView.setText("player 1's turn");
checkBoard();
flag = 0;
}
if(flag == 0){
b[x][y].setText("X");
c[x][y] = 1;
textView.setText("player 2's turn");
checkBoard();
flag = 1;
}
}
}
答案 0 :(得分:0)
替换
if(flag == 0)
带
else if(flag == 0)
这将使它在将flag设置为0后跳过第二个if语句。
class MyClickListener implements View.OnClickListener {
int x;
int y;
int flag;
public MyClickListener(int x, int y) {
this.x = x;
this.y = y;
flag = 1;
}
public void onClick(View view) {
if (b[x][y].isEnabled()) {
b[x][y].setEnabled(false);
if(flag == 1) {
b[x][y].setText("O");
c[x][y] = 0;
textView.setText("player 1's turn");
checkBoard();
flag = 0;
}
else if(flag == 0){
b[x][y].setText("X");
c[x][y] = 1;
textView.setText("player 2's turn");
checkBoard();
flag = 1;
}
}
}
}