Bon,
J'ai travaillé dans ce sens, et le code est beaucoup plus clair
J'ai aussi retravaillé toutes mes fonctions, une par une, pour vérifier qu'elles tournaient bien, j'ai eu quelques surprises et j'ai corrigé
Il me reste la dernière (Jouer).
Je verrais ça demain !
j'ai toute la page 2 tu topic qui ne s'affiche pas :/
je suis curieux de voir ce que t'as fait :(
edit: j'ai pu la lire c'est bon :)
mon petit conseil pour la fonction qui affiche toutes les cases libres
void afficheCase(int x, int y)
{
// oublie pas de mettre des délimiteurs
(if x < 0 || x > maxX (ici 10) || y < 0 || y > maxY (ici 10))
return;
if(JEU[x][y] == 'M') // case minée
return; // on ne fait rien
int n = compterMinesAutour(x, y); // on compte les mines autour de la case souhaitée
if(n == 0) // pas de mines on l'affiche
{
JEU[x][y] = '0'; // j'affiche 0 dans la case
// puis récursivité !
afficheCase(x-1, y-1); // case au dessus à gauche
afficheCase(x-1,y); // case à gauche
afficheCase(x-1, y+1); // case en dessous à gauche
afficheCase(x, y+1); // case en dessous
afficheCase(x+1, y+1); // case en dessous à droite
afficheCase(x+1, y); // case à droite
afficheCase(x+1, y-1); // case au dessus à droite
}
else // mines autour, on l'affiche
{
// le code que tu as à recopier, sprintf toussa
}
}
à adapter p-e selon ton code :)
et pour les codes ASCII, c'est inutile il suffit de faire monchar = '0'; pour qu'il vaille 0 et ne pas se soucier du code ASCII associé (qui peut changer entre les plateformes/os/...)
__________________________
Spirit - modérateur casu ^-^'
il vaut mieux mettre les testes d'existence des cases dans la fonction CompterMineAutour() et avant la récursivité car là sinon il bloque tout dès qu'il est à un bord au lieu d'ignorer le/les côtés problématiques uniquement.
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
d'où il bloque ?
la fonction teste si la case que l'on demande existe, sinon elle s'arrête
elle ne fait rien d'autre, puis elle se propage aux 8 côtés
je n'ai pas parlé et écrit compterMinesAutour, il l'a déjà faîte et elle marche sûrement, oui il faut aussi y faire des tests d'existence de chaque case, mais ça n'intervient en aucun cas dans cette fonction de devoilerCase qui y fait uniquement appel
tu peux très bien être placé sur un rebord pour le premier appel, ça changera à peu près strictement rien, pas plus que si tu choisis de partir du milieu du plateau de jeu
bien sûr tu ne peux pas partir d'une case non existante, sinon là ça bloque... mais autoriser le joueur à jouer hors plateau est juste... impensable.
__________________________
Spirit - modérateur casu ^-^'