저는 지뢰 찾기 게임을 만들려고했습니다. 지정된 좌표에서 폭탄에 인접한 셀이 발견 될 때까지 인접한 셀을 재귀 적으로 표시합니다. 나는 주어진 좌표 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++;
}
}
}
각 셀은 1 광산이 인접 발견 될 때마다 증가 도착 mineCount
필드를 갖는 구조체이다. 내 재귀 논리가 어디로 갈지 알아 내려는 데 어려움을 겪고 있습니다. 나는 다음과 같은 일을 시도했다 :
// North
if (y > 0) {
if (board[x][y - 1].hasMine) {
board[x][y].mineCount++;
} else {
minecount(x, y-1);
}
}
각 위치에 대해서는 아무 소용이 없지만. 모든 포인터는 감사하겠습니다.
시도한 재귀의 동작은 무엇이며 무엇이 잘못 되었습니까? – Tyler
관련 없음 : 많은 노력을 덜고 시작시 한 번씩 각 그리드 좌표의 최소값을 계산하십시오. 이 논리를 극적으로 축소시켜 버그/솔루션을 쉽게 찾을 수 있도록해야합니다. – user4581301