如何在tictactoe游戏中缩短我的if语句以检查行等?

时间:2015-04-21 21:41:36

标签: java arrays eclipse if-statement

我想连续检查我的行以及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;

但这并没有做任何事情。任何帮助表示赞赏。

3 个答案:

答案 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;
   }
}

这源于我对类似问题的回答:here。另请查看此答案here

答案 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++;
}