J'écris un jeu de dragueur de mines. Voici le code pour 3 méthodes dans dragueur de mines. La première méthode consiste à vérifier tous les espaces autour du bouton et à compter le nombre de bombes qui l'entourent. La méthode suivante doit être appelée récursivement, afin que si l'utilisateur appuie sur un bouton avec 0 boutons autour de lui, il ouvrira tous les carrés qui indiquent également 0 carrés autour de lui. La troisième méthode consiste à vérifier que le contrôle sera lié. L'appel récursif d'espace vide m'obtient une erreur de stackoverflow, qu'est-ce que je fais mal?récursive stackoverflow minesweeper C#
Merci!
private int GameLogicChecker(int x, int y)
{
int count = 0;
if (_grid[x, y] != -1)
{
if (x + 1 < SizeX)
{ //Right
if (_grid[x + 1, y] == -1)
count++;
}
if (x - 1 > 0)
{ //Left
if (_grid[x - 1, y] == -1)
count++;
}
if (y + 1 < SizeY)
{ //Upper
if (_grid[x, y + 1] == -1)
count++;
}
if (y - 1 > 0)
{ //Lower
if (_grid[x, y - 1] == -1)
count++;
}
if (x + 1 < SizeX && y + 1 < SizeY)
{ //Right-Upper
if (_grid[x + 1, y + 1] == -1)
count++;
}
if (x + 1 < SizeX && y - 1 > 0)
{ //Right-Lower
if (_grid[x + 1, y - 1] == -1)
count++;
}
if (x - 1 > 0 && y + 1 < SizeY)
{ //Left-Upper
if (_grid[x - 1, y + 1] == -1)
count++;
}
if (x - 1 > 0 && y - 1 > 0)
{ //Left-Lower
if (_grid[x - 1, y - 1] == -1)
count++;
}
}
return count;
}
void OpenEmptySpace(int x, int y)
{
for (var k = -1; k <= 1; k++)
{
for (var l = -1; l <= 1; l++)
{
if (CheckBounds(x + k, y + l) && GameLogicChecker(x + k, y + l) == 0)
{
_buttons[x + k, y + l].Text = "0";
OpenEmptySpace(x + k, y + l);
}
}
}
}
private bool CheckBounds(int x, int y)
{
return x >= 0 && x < SizeX && y >= 0 && y < SizeY;
}
Avez-vous essayé de parcourir votre code pour observer son comportement et ses valeurs transitoires? –
Lorsque k vaut 0 et que l vaut 0 et si la case if est true, vous appelez OpenEmtpySpace à nouveau avec les valeurs initiales x et y et vous créez une boucle sans fin. –
En effet, 'OpenEmptySpace' est codé pour ne jamais mettre fin à la récursivité ... Pas vraiment sûr pourquoi vous attendez autrement. –