作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个棋盘游戏,其中有两个不同颜色的棋子,黑色和红色。
如果玩家用自己的棋子水平或垂直地包围对手的棋子,这些棋子就会被移除。以下是一些图片来证明这一点:
我的棋盘是一个简单的二维整数数组,其值为 0、1 或 2,具体取决于空间是空的、有红色棋子还是黑色棋子。
这是我到目前为止提出的代码,但是我遇到了越界错误的问题,而且它也没有考虑捕获多个片段。
static final int EMPTY = 0, BLACK = 1, RED = 2, ROW = 9, COLUMN = 9;
board = new int[ROW][COLUMN];
public void captureRedPieces() {
for(int i = 0; i < ROW; i++) {
for(int j = 0; j < COLUMN; j++) {
if(i <= ROW - 2) {
if(board[i][j] == 1 && board[i + 1][j] == 2 && board[i + 2][j] == 1) {
board[i + 1][j] = EMPTY;
}
}
if(i <= COLUMN - 2) {
if(board[i][j] == 1 && board[i][j + 1] == 2 && board[i][j + 2] == 1) {
board[i][j + 1] = EMPTY;
}
}
}
}
}
有人可以帮我想出更好的捕获碎片的解决方案吗?
最佳答案
您正在测试是否 i <= ROW - 2
,但是您正在使用 i+2
作为您检查的索引。这意味着如果 i
是 7,等于 ROW - 2
并通过您的 if
测试,然后i+2
将是9
,这是越界的,因为数组只从 0 到 8。
所以您应该将其更正为 i < ROW - 2
而不是<=
.
此外,您还有以下代码:
if(i <= COLUMN - 2) {
if(board[i][j] == 1 && board[i][j + 1] == 2 && board[i][j + 2] == 1) {
board[i][j + 1] = EMPTY;
}
}
这应该是 j
的条件,不在i
上- 它必须以我告诉你的相同方式修复i
-<
而不是<=
.
注意:由于您的规则规定“包围”状态只有在周围的颜色移动后才是吃子,也许您应该改变您的方法:您应该只检查黑棋的位置一个 Action ,以与周围的位置相匹配。当然,你还是要确保自己没有越界。您当前的方法可能会标记自上次移动以来“被包围”的位置,根据规则,这是错误的。
所以你的方法应该像这样声明:
public void captureRedPieces(int blackMoveRow, int blackMoveCol )
关于java - 棋盘游戏夺取棋子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011414/
我是一名优秀的程序员,十分优秀!