我正在嘗試在Java中重新創建棋盤遊戲「go」。我目前正在研究捕捉系統。基本上,一旦一塊石頭四面都被敵人的石頭包圍(對角線不計算在內),你就會移除那塊石頭。就像下面的截圖一樣。在Go棋盤遊戲中捕獲棋子
或者,如果同樣的石頭多個連接,你必須圍繞所有打開的側面。就像下面的截圖一樣。
在這兩種情況下,黑寶石應在此時被刪除。這個鏈接更詳細地解釋了捕捉石塊的規則。 societies.cam。 AC。 uk /cugos/go/rules_03.html
我被告知最好使用遞歸來做到這一點。在對遞歸進行一些研究之後,我設法編寫了一些代碼。但它不起作用。它似乎只是在遊戲的第二步中發現敵人的石頭。每次在我的鼠標放置一塊石頭時,我都會打電話給我的方法。
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是我的行,此舉是我的變量保持輪到誰(1 =黑,2 =白色)板是我保存的位置的二維陣列棋盤上的所有石塊。
你的問題是什麼? –
@代碼大師我需要幫助確定我的代碼中的問題。正如我上面所說的,它不能正常工作。 – user2457344
歡迎來到堆棧溢出!要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後,如果有必要,你應該構建一個[最小測試用例](http://sscce.org)。) –