我正在尝试用 Java 重新创建棋盘游戏“go”。我目前正在研究捕获系统。基本上,一旦一块石头在所有四个侧面都被敌方石头包围(对角线不算在内),您就可以移除该石头。就像在下面的屏幕截图中一样。
或者,如果连接了多个相同的石头,则必须围绕所有开放的边。就像在下面的屏幕截图中一样。
在这两种情况下,此时都应移除黑色石头。这个链接解释了更多关于捕获石头的规则。社会.cam。交流。英国 /cugos/go/rules_03.html
有人告诉我最好使用递归来做到这一点。在对递归进行了一些研究之后,我设法编写了一些代码。但它不起作用。它似乎只在游戏的第二步检测到敌人的石头。每次将一块石头放在我的 mouseReleased 中时,我都会调用我的方法。
public static boolean checkCapture(int x, int y)
{
{
if ((board[x][y + 1] != move) && (board[x][y + 1] != 0)) //bellow
{
System.out.println("enemy is bellow");
if (checkCapture(x, y + 1))
board[x][y] = 0;
} else if (board[x][y + 1] == 0)
{
return false;
}
if ((board[x][y - 1] != move) && (board[x][y - 1] != 0)) //above
{
System.out.println("enemy is above");
if (checkCapture(x, y - 1))
board[x][y] = 0;
} else if (board[x][y - 1] == 0)
{
return false;
}
if ((board[x + 1][y] != move) && (board[x + 1][y] != 0)) // right
{
System.out.println("enemy is right");
if (checkCapture(x + 1, y))
board[x][y] = 0;
} else if (board[x + 1][y] == 0)
{
return false;
}
if ((board[x - 1][y] != move) && (board[x - 1][y] != 0)) //left
{
System.out.println("enemy is left");
if (checkCapture(x - 1, y))
board[x][y] = 0;
} else if (board[x - 1][y] == 0)
{
return false;
}
}
return true;
}
我的 int x 是我的列,我的 int y 是我的行,move 是我的变量,轮到谁了(1 = black,2 = white) board 是我的二维数组,它保存了棋盘上所有棋子的位置。