我正在尝试制作一个非常简单的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比较,但仅针对指定的索引。
任何与使这种情况变得更小,代码方面有关的事情都将受到高度赞赏。谢谢!
答案 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游戏:
答案 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;
}