0
我一直在嘗試做一個掃雷遊戲,給出單元格的座標,它會遞歸地揭示相鄰的單元格,直到找到與炸彈相鄰的單元格。我有一個方法,給定座標x和y計算它周圍有多少個地雷。在掃雷板上遞歸映射地雷
// Counts how many mines are adjacent to a given coordinate cell if any
void board::mineCount(int x, int y) {
// North
if (y > 0) {
if (board[x][y - 1].hasMine) {
board[x][y].mineCount++;
}
}
// South
if (y < dimensions[1] - 1) {
if (board[x][y + 1].hasMine) {
board[x][y].mineCount++;
}
}
// East
if (x < dimensions[0] - 1) {
if (board[x + 1][y].hasMine) {
board[x][y].mineCount++;
}
}
// West
if (x > 0) {
if (board[x - 1][y].hasMine) {
board[x][y].mineCount++;
}
}
// North East
if (x < dimensions[0] - 1 && y > 0) {
if (board[x + 1][y - 1].hasMine) {
board[x][y].mineCount++;
}
}
// North West
if (x > 0 && y > 0) {
if (board[x - 1][y - 1].hasMine) {
board[x][y].mineCount++;
}
}
// South East
if (x < dimensions[0] - 1 && y < dimensions[1] - 1) {
if (board[x + 1][y + 1].hasMine) {
board[x][y].mineCount++;
}
}
// South West
if (x > 0 && y < dimensions[1] - 1) {
if (board[x - 1][y + 1].hasMine) {
board[x][y].mineCount++;
}
}
}
每個小區是具有mineCount
字段得到由1地雷被發現鄰近它每次遞增一個結構。我無法弄清楚我的遞歸邏輯會去哪裏。我試着做類似:
// North
if (y > 0) {
if (board[x][y - 1].hasMine) {
board[x][y].mineCount++;
} else {
minecount(x, y-1);
}
}
對於每個位置,但無濟於事。任何指針將不勝感激。
你試過的遞歸行爲是什麼?它有什麼問題? – Tyler
不相關:節省自己很多努力,並在開始時計算每個網格座標的礦場數。它應該讓你大幅削減這個邏輯,並使你更容易發現你的bug /解決方案。 – user4581301