作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个井字游戏,除了检查(水平/垂直和对角线)之外,一切似乎都有效。我正在使用数组 (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/
我是一名优秀的程序员,十分优秀!