gpt4 book ai didi

java - 井字棋水平/垂直和对角线检查不起作用 - java

转载 作者:行者123 更新时间:2023-12-01 18:37:00 25 4
gpt4 key购买 nike

我正在编写一个井字游戏,除了检查(水平/垂直和对角线)之外,一切似乎都有效。我正在使用数组 (int [3][3]) 来制作板。

这些是我的支票:

private boolean wonStraightLines( int player)
{
boolean answer = false;

if (
((board[0][0] & board[0][1] & board[0][2]) == (player * 3)) ||
((board[1][0] & board[1][1] & board[1][2]) == (player * 3)) ||
((board[2][0] & board[2][1] & board[2][2]) == (player * 3)) ||
((board[0][0] & board[1][0] & board[2][0]) == (player * 3)) ||
((board[0][1] & board[1][1] & board[2][1]) == (player * 3)) ||
((board[0][2] & board[1][2] & board[2][2]) == (player * 3))
)
{
answer = true;
}
else {
answer = false;
}
return answer;
}

对于对角线:

private boolean wonDiagonal( int player)
{
boolean answer = false;

if (
((board[0][0] & board[1][1] & board[2][2]) == (player * 3)) || ((board[0][2] & board[1][1] & board[2][0]) == (player * 3))
)
{
answer = true;
}
else {
answer = false;
}
return answer;
}

当我运行程序时,每当 X 或 O 从任何方向得到 3 时,游戏都会继续运行,而不是抛出“你赢了”的消息。任何帮助,将不胜感激。不确定是否需要代码的任何其他部分。

编辑:我还尝试在板数组值之间使用 + 而不是 & ,但效果不佳。

最佳答案

我假设每个元素的状态有 3 个唯一值,例如:

board[row][col] = 0 // no entry
board[row][col] = 1 // player 1
board[row][col] = 2 // player 2

如果不聪明,对 player 的水平检查(使用行主结构)将如下所示:

(board[0][0] == player && board[0][1] == player && board[0][2] == player)

并对每一行重复。

垂直方向类似,每列重复:

(board[0][0] == player && board[1][0] == player && board[2][0] == player)

还有一条对角线:

(board[0][0] == player && board[1][1] == player && board[2][2] == player)

如果您决定使用算术运算,那么您必须更改“玩家”值以避免重叠,如玩家 1 == 1 和玩家 2 == 4,例如:

board[row][col] = 0 // no entry
board[row][col] = 1 // player 1
board[row][col] = 4 // player 2

然后你可以对水平行执行类似的操作:

((board[0][0] + board[0][1] + board[0][2]) == (player * 3))

注意,在 Java 8 及更高版本中添加 int 数组(在您的情况下为行或列)可能会稍微简洁一些:

// sum the first row
(IntStream.of(board[0]).sum() == (player * 3))

现在,如果您确实想使用按位“与”运算,那么这是您的检查,假设初始元素值 (0,1,2) 如顶部所述:

// check if the player's "bit" is set in all elements of first row.
(board[0][0] & board[0][1] & board[0][2]) == player

关于java - 井字棋水平/垂直和对角线检查不起作用 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com