Java ArrayList Comparison- TicTacToe

时间:2010-10-27 16:06:57

标签: java arraylist

我正在尝试制作一个非常简单的Tic-Tac-Toe游戏。我在0-8 ArrayList(基本上是3x3平方)中存储了“X”和“O”的值。我可以针对获胜情况的每个实例执行以下操作:

if ((newBoard().get(0)).equals("X") &&
    (newBoard().get(1)).equals("X") && 
    (newBoard().get(2)).equals("X")){
System.out.println("Player-X has won!");
return true;

然而,这将需要TON代码!我想创建新的ArrayLists,其中包含“X”赢得(3-in-roe)然后复制和粘贴的情况,将“X”替换为“O”,然后将这些与当前用户的ArrayList板进行比较是'与...互动'这一切都很好,但我不知道如何比较它们。我查看了API,但是我找不到任何可以做我想要的东西,这是与ArrayLists比较,但仅针对指定的索引。

任何与使这种情况变得更小,代码方面有关的事情都将受到高度赞赏。谢谢!

5 个答案:

答案 0 :(得分:7)

嗯,一个选择是不要考虑所有获胜的主板,而是所有获胜的位置。例如:

private static final int[][] LINES_OF_THREE = {
  { 0, 1, 2 }, // Horizontals
  { 3, 4, 5 },
  { 6, 7, 8 },
  { 0, 3, 6 }, // Verticals
  { 1, 4, 7 },
  { 2, 5, 8 },
  { 0, 4, 8 }, // Diagonals
  { 6, 4, 2 }
};

然后像:

for (int[] line : LINES_OF_THREE) {
  boolean won = true;
  for (int place : line) {
    // player = "O" or "X"
    if (!newBoard.get(place).equals(player)) { 
      won = false;
      break;
    }
  }
  if (won) {
    // Yippee!
  }
}

答案 1 :(得分:1)

关键不是行,列和diaganols等于X和O,而是它们都是相等的,无论它们是X还是O,所以代替你的行使用:

if ((newBoard().get(0)).equals(newBoard().get(1)) && newBoard().get(1).equals(newBoard().get(2))){
    System.out.println("Player-" + newBoard().get(0)  +" has won!");
return true;

这意味着同样的事情,但适用于X 和O 。下一步是创建一个只比较三个位置索引的函数:

private boolean checkForWin(int x, int y, int z){
     return newBoard().get(x).equals(newBoard().get(y)) && newBoard().get(y).equals(newBoard().get(z)); 
}

然后,您可以继续传递该功能所有可能的获胜位置索引。

答案 2 :(得分:1)

Sun发布了一款TicTacToe应用程序,它使用按位运算来存储游戏状态并计算计算胜利。

http://java.sun.com/products/jfc/tsc/articles/tictactoe/src/TicTacToe.java

每个玩家都有自己的棋盘状态,并且使用按位操作,游戏会告诉哪些空格是免费的。

就像Jon的回答一样,胜利条件与一系列胜利位置相对应。只需要一个for循环,而不是两个。

如果您有时间对此进行审核,这对TicTacToe来说是一个很棒的解决方案

答案 3 :(得分:0)

查看此代码高尔夫以查看各种算法以检查是否以及哪个玩家有一个TicTacToe游戏:

Code Golf: Tic Tac Toe

答案 4 :(得分:0)

在tic tac toe中只有3个真正的获胜条件。行,列和对角线

这里有一个正方形数组[3,3](根据需要进行调整),然后使用迭代遍历列和行。然后你只需要两个对角线进行检查。

我发现这是最简单的方法。

boolean HasWon(PLAYER p)
{
    for (int i = 0; i < 3; i++)
    {
        // Columns
        if (board[i, 0] == p)
            if (board[i,1] == p && board[i,2] == p)
                return true;
        // Rows
        if (board[0, i] == p)
            if (board[1, i] == p && board[2, i] == p)
                return true;
    }
    //Check diagonals
    if (board[0,0] == p && board[1,1] == p && board[2,2] == p) return true;
    if (board[2,0] == p && board[1,1] == p && board[0,2] == p) return true;
    return false;
}