Démineur en C [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
19 avril 2009
-
Messages postés
23
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
19 avril 2009
-
Bonjour, j'ai un petit probleme qui me bloque quand je veux faire un démineur en C (pour mon DUT informatique) :

On veut faire un démineur, on ne sais pas en avance où sont placés les bombes dans le tableau.
Si le joueur tombe sur un bombe "POUF! Perdu", sinon le joueur à un numéro qui correspond au nombre de cases adjacentes qui n'ont pas de bombe (contrairement au démineur windows où là, le démineur compte le nombre de case où il y a une bombe dans les cases adjacentes).

Mon probleme vient du faite de calculer ces nombres qui entour les bombes.
Voici ce que je voulais faire au début :

On a un tableau de 5x5 avec des 0 et 1, les 0 correspondent aux endroit sans bombe et les 1 aux endroits avec bombe.

Par exemple
0|0|0|0|1|
0|1|0|1|0|
0|0|0|0|0|
0|0|1|0|0|
0|0|0|0|0|

Pour chaque case, si on a une case 0, on ajoute 1 en haut, haut-gauche,haut-droite,droite, etc...

Ceci devrait marcher parfaitement MAIS par exemple, si on est dans la premiere case, on ne peux pas ajouter 1 en haut, haut-droite, haut-gauche, gauche et bas-gauche.

Si quelqu'un a une solution sachant qu'il ne faut pas un code trop buggé et que c'est sensé etre fait avec une table a deux dimensions.

Merci

4 réponses

Messages postés
212
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
28 mai 2011
2
ben supposons que t'as un tableau
int field[10][10];

pour calculer le nombre de cases qui n'ont pas de bombes (marquées
avec un 0)  autour de la case (X,Y) on peut tout simplement faire

int count_not_bomb= -1; //car la case X,Y est prise en compte
for( i =(X= 0) ? X:X-1; i<(X =9)?X:X+1; i++)


   for(j= (Y=0) ? Y:Y-1; j<(Y =9)?Y:Y+1; j++)


      if( !field[i][j]) count_not_bomb++;


j'ai supposé qu'au prealable on a verifié que la case (X,Y) est bien a 0
<hr size="2" width="100%" />Trafic web gratuit!!!
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
7
Si ça t'interesse j'ai moi aussi fait un démineur je peux te donner la source si ça t'interesse.

sinon moi je tester le nombre de mine et voici les test de chaque case environnente

       
   
if((nX+1)<NB_CASE_L&&(nY-1)>=0&&(ntInit[nX+1][nY-1]!=MINE))

                    ntInit[nX+1][nY-1]++;

           


            if((nX+1)<NB_CASE_L&&(ntInit[nX+1][nY]!=MINE))

                    ntInit[nX+1][nY]++;

           


           
if((nX+1)<NB_CASE_L&&(nY+1)<NB_CASE_H&&(ntInit[nX+1][nY+1]!=MINE))

                    ntInit[nX+1][nY+1]++;

           


           
if((nX-1)>=0&&(nY-1)>=0&&(ntInit[nX-1][nY-1]!=MINE))

                    ntInit[nX-1][nY-1]++;

           


            if((nX-1)>=0&&(ntInit[nX-1][nY]!=MINE))

                    ntInit[nX-1][nY]++;

           


           
if((nX-1)>=0&&(nY+1)<NB_CASE_H&&(ntInit[nX-1][nY+1]!=MINE))

                    ntInit[nX-1][nY+1]++;

           


            if((nY-1)>=0&&(ntInit[nX][nY-1]!=MINE))

                    ntInit[nX][nY-1]++;

           


            if((nY+1)<NB_CASE_H&&(ntInit[nX][nY+1]!=MINE))

                    ntInit[nX][nY+1]++;

On regarde pour chaque case si elle est bien dans le tableau et
que ce n'est pas déja une mine dans ce cas on ajoute un (car il y a une
mine adjaxante en plus). Il suffit que tu fasses l'inverse et de
rajouter le baillayage de toutes les cases (donc deux boucles for avec
pour variable dans mon cas : nX et nY).
--------------------
Quand la merde vaudra de l'or les pauvres naitrons sans trou du cul. Coluche.
Mon projet : Squirrel's Cliff
Messages postés
23
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
19 avril 2009

"Pour chaque case, si on a une case 0, on ajoute 1 en haut, haut-gauche,haut-droite,droite, etc..."

Escusez moi je me suis trompé :

Si on est une case 0, alors on compte le nombre de 0 adjacent et on le met dans la case.

Mais comme tout a l'heure, le meme probleme : On dépasse du talbeau
Messages postés
23
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
19 avril 2009

Merci :)

Perso j'avais trouvé un solution mais il fallait que je teste 9 cas différents