我想连续检查我的行以及x和#o。
这是我到目前为止所做的:
if (gameboard[0] == 1 && gameboard[1] == 1 && gameboard[2] == 1) {
return winner;
}
这对我来说很好。我想知道的是如何减少代码量而不是加载if语句来检查每一列,特别是如果我决定使网格更大。
我尝试过以下
for (int i = 0; i < 3; i++) {
gameboard[i] = 1;
}
return winner;
但这并没有做任何事情。任何帮助表示赞赏。
答案 0 :(得分:3)
要检查行获胜,例如:
boolean win = true;
for (int col = 0; col < grid.length; col++) {
if (grid[col][j] != turn) {
win = false;
}
}
可以在转弯为刚刚转弯的玩家持有XO枚举的情况下工作,而网格是此枚举的二维数组(或null)。
如,
public void checkForWin(int i, int j) {
boolean win = true;
for (int col = 0; col < grid.length; col++) {
if (grid[col][j] != turn) {
win = false;
}
}
if (!win) {
win = true;
for (int row = 0; row < grid[i].length; row++) {
if (grid[i][row] != turn) {
win = false;
}
}
}
if (!win && i == j) {
win = true;
for (int k = 0; k < grid.length; k++) {
if (grid[k][k] != turn) {
win = false;
}
}
}
if (!win && i + j == 2) {
win = true;
for (int k = 0; k < grid.length; k++) {
if (grid[k][2 - k] != turn) {
win = false;
}
}
}
if (win) {
setGameOver(true);
}
}
我的枚举:
public enum XO {
X("X"), O("O"), BLANK(" ");
private String text;
private XO(String text) {
this.text = text;
}
public String getText() {
return text;
}
}
答案 1 :(得分:3)
你知道吗
for (int i = 0; i<3; i++){
gameboard[i] = 1;
}
return winner;
将gameboard[i]
设为1
而不检查是否gameboard[i] == 1
。但如果你想要,你可以做到
int x = 3, p =0;
for (int i = 0; i < x; i++)
{
if (gameboard[i] == 1)
p++;
}
if (p == x)
return winner;
答案 2 :(得分:0)
..或者你可以做到
int x = 3, p = 0, i = 0;
while (i < x && p != x && p < gameboard.length) {
if (gameboard[i] == 1) p++;
if (p == x) {
System.out.println("eee2");
return winner;
}
i++;
}