gpt4 book ai didi

java - 棋盘游戏夺取棋子

转载 作者:行者123 更新时间:2023-12-01 11:35:44 25 4
gpt4 key购买 nike

我正在创建一个棋盘游戏,其中有两个不同颜色的棋子,黑色和红色。

如果玩家用自己的棋子水平或垂直地包围对手的棋子,这些棋子就会被移除。以下是一些图片来证明这一点:

我的棋盘是一个简单的二维整数数组,其值为 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/

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