julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007
-
3 août 2007 à 00:45
julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007
-
3 août 2007 à 20:51
Bonjour,
je suis entrain de reproduire un demineur. Je crée dynamiquement un tableau tridimensionnel ; tridimensionnel car ce tableau contient 2 "grilles" de demineur - de 2 dimensions chacune. L'une des grilles contient l'emplacement des bombes, et l'autre est celle que le joueur voit (le nombre de bombes entourant telle case, si cette case est une bombe, si elle est vide, si le joueur n'a pas encore cliqué dessus...).
J'en suis à l'algorithme de clique sur une case. Je vérifie d'abord si la case est une bombe, puis si le joueur a déjà cliqué sur la case, auxquels cas je retourne la fonction. Ensuite je vérifie combien de bombes sont situés autour de la case, et je change l'état de cette case en fonction du nombre trouvé.
S'il n'y a aucune bombe aux alentours, je simule des cliques sur toutes les cases aux alentours par récursivité (comme cela se passe dans le vrai demineur, enfaite). C'est là que ca coince à l'éxécution, j'obtiens un message d'erreur et le programme plante. Je ne pense pas que ce soit du à une surcharge de la pile.
Voici le code de la fonction qui simule un clique sur une case (x;y) :
bool Deminor_ClickleftGrid(int ***grid, int gx, int gy, int x, int y)
{
//Vérifie qu'on a pas cliqué en dehors de la grille
if(x>gx || y>gy || x<0 || y<0) return false;
//Verifie qu'on a pas cliqué sur une bombe
if(Deminor_IsBomb(grid, gx, gy, x, y))
{
grid[1][x][y]=DEMPLAYER_BOMBON;
return false;
}
//Vérifie qu'on a pas déjà cliqué sur cette case
if(grid[1][x][y] != DEMPLAYER_UNKNOWN) return false;
/**** Calcule le nombre de mines aux alentours ****/
int bombArround = DEMPLAYER_0;
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 3 août 2007 à 13:10
Salut,
Si tu mets :
if(bombArround == DEMPLAYER_0) /*\ BUG LA \*/
{ ...}
En commentaire, ça plante pas ?
Tu as bien un message d'erreur, non ? Peux-tu le donner ?
Eventuellement, montre nous comment tu alloues ce que tu passe comme argument grid, mais j'imagine que tu l'initialise donc le problème se manifesterais avant...
julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007 3 août 2007 à 14:05
juju12> oui les deux define ont des valeurs différentes
rt15> en effet si je mets tout ce passage en commentaire le programme ne plante plus. Comme erreur lors de l'exécution j'ai un message du "visual studio just-in-time debugger", qui me dit que "an unhandled win32 exception occurred in Demineur-console.exe [3608]" (c'est bien un message d'erreur qui apparait lors de l'execution hein, pas de prob à la compilation).
Voilà comment j'initialise ma grille :
int ***grid;
grid = new int**[2];
grid[0] = new int*[x];
grid[1] = new int*[x];
for(int i=0; i<x; i++)
{
grid[0][i] = new int[y];
grid[1][i] = new int[y];
}
Je ne sais d'ailleurs pas si la méthode est la bonne, j'ai galéré pour arriver à ca ; mais visiblement ca marche puisque je peux afficher la grille (j'ai créé une fonction printGrid() qui fonctionne).
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 3 août 2007 à 20:45
Erf...
Je recommence.
Ta fonction Deminor_IsBomb doit être protégée de la même manière.
Ton IDE as pas de débugueur permettant de voir le contenu des variables ?