J'ai essayé de faire un jeu de dragueur de mines où les coordonnées données pour une cellule révèlent récursivement les cellules adjacentes jusqu'à ce qu'une cellule adjacente à une bombe soit trouvée. J'ai une méthode qui donne des coordonnées x et y calcule le nombre de mines qui l'entourent.Cartographie récursive de mines sur un plateau de dragueur de mines
// 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++;
}
}
}
Chaque cellule est une structure qui a un champ mineCount
qui obtient incrémenté de 1 à chaque fois une mine se trouve à côté de lui. J'ai de la difficulté à trouver où irait ma logique de récurrence. J'ai essayé de faire quelque chose comme:
// North
if (y > 0) {
if (board[x][y - 1].hasMine) {
board[x][y].mineCount++;
} else {
minecount(x, y-1);
}
}
pour chaque position mais en vain. Tout pointeur serait apprécié.
Quel était le comportement de la récursion que vous avez essayé et qu'est-ce qui n'allait pas? – Tyler
Non lié: épargnez-vous beaucoup d'efforts et calculez le minecompte pour chaque coordonnée de la grille une fois au début. Cela devrait vous permettre d'abattre cette logique de façon spectaculaire et de faciliter la détection de votre bug/solution. – user4581301