Javaでボードゲーム「囲碁」を再現しようとしています。私は現在、キャプチャシステムに取り組んでいます。基本的に、石が 4 つの側面すべて (対角線はカウントされません) で敵の石に囲まれたら、その石を取り除きます。下のスクリーンショットのように。
または、複数の同じ石が接続されている場合は、すべての開いた側面を囲む必要があります。下のスクリーンショットのように。
どちらの場合も、この時点で黒い石を取り除く必要があります。このリンクでは、石をキャプチャするルールについて詳しく説明しています。社会.cam。交流。イギリス /cugos/go/rules_03.html
これを行うには再帰を使用するのが最善だと言われました。再帰に関する調査を行った後、コードを書くことができました。しかし、それは機能していません。ゲームの2手目で敵の石を検出するだけのようです。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 = 黒 , 2 = 白) board は、ボード上のすべての石の位置を保持する 2 次元配列です。