java - 棋盘游戏夺取棋子

标签 java chess

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

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

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

相关文章:

java - Eclipse 的 blackberry java 插件的编译问题

performance - 静止搜索性能

C++,用一个字节存储两个变量

java - <Java> 国际象棋棋子移动问题

c++ - Sprite 纹理不从图像中划分碎片 C++

java - Java 中的 Paypal 集成

java - 从 Android 通过套接字发送缓冲数据

java - 并行对两个数组的每个元素求和

java - 如何只用一个循环和一个内循环打印给定的图案?而不是使用 4 个循环

java - 如何在java中使用opencsv有效地将行添加到现有的csv文件?