You are not logged in.
Bonsoir,
Pas moyen de sortir de ce bug !
Quand il n'y a pas de mines autour, j'ai des '0' à l'infini !
Le souci est sans doute dans la fonction 'Jouer'
Pouvez vous m'aider ? Je déprime là
#include <stdio.h> #include <stdlib.h> #include <time.h> char JEU[10][10];//grille de jeu int i,j;//i les lignes, j les colonnes char MINES[10][10];//la grille avec les mines int N;//Nombre de mines autour int NbMines;//le nombre de mines choisi par le joueur int choix;//le choix effectué par le joueur pour découvrir ou placer un drapeau ////////////////////////////// // FONCTION INITIALISATION /// ////////////////////////////// void Init() { for(i=0;i<10;i++) { for(j=0;j<10;j++) { JEU[i][j]='-';//' 'implique case cachée MINES[i][j]='0'; } } } /////////////////////////////// // FONCTION PLACER LES MINES // /////////////////////////////// void PlaceMines() { int CompteMines;//compteur de mines for (CompteMines=0;CompteMines<NbMines;CompteMines++) { i=rand()%10;//on choisit la ligne de manière aléatoire j=rand()%10;//on choisit la colonne de manière aléatoire if(MINES[i][j]=='0')//On vérifie que la case est libre { MINES[i][j]='M';//on place un M pour indiquer qu'il y a une mine } else { NbMines++;//Sinon, il y a déjà un M et il faut faire un tour de plus } } } //////////////////////////////////////// // FONCTION AFFICHER LA GRILLE DE JEU // //////////////////////////////////////// void AfficheJeu() { printf("\n\n"); printf(" | 1 2 3 4 5 6 7 8 9 10\n"); printf("___|______________________________\n"); for(i=0;i<10;i++) { if(i<9) printf(" %d | ",i+1); else printf("%d | ",i+1); for(j=0;j<10;j++) { printf("%c ",JEU[i][j]); } printf("\n"); } } ///////////////////////////////////////////// // FONCTION CALCULER LE NB DE MINES AUTOUR // ///////////////////////////////////////////// int NbMinesAutour() { N=0; if(MINES[i][j]=='M') { printf("Vous avez perdu !!!\n\n"); printf(" | 1 2 3 4 5 6 7 8 9 10\n"); printf("___|______________________________\n"); for(i=0;i<10;i++) { if(i<9) printf(" %d | ",i+1); else printf("%d | ",i+1); for(j=0;j<10;j++) printf("%c ",MINES[i][j]); printf("\n"); } } else { if (i==0) { if (j==0) { if(MINES[i][j+1]=='M') N++; if(MINES[i+1][j]=='M') N++; if(MINES[i+1][j+1]=='M') N++; } else { if(j==10) { if(MINES[i][j-1]=='M') N++; if(MINES[i+1][j-1]=='M') N++; if(MINES[i+1][j]='M') N++; } else { if(MINES[i][j-1]=='M') N++; if(MINES[i][j+1]=='M') N++; if(MINES[i+1][j-1]=='M') N++; if(MINES[i+1][j]=='M') N++; if(MINES[i+1][j+1]=='M') N++; } } } else { if (i==10) { if (j==0) { if(MINES[i-1][j]=='M') N++; if(MINES[i-1][j+1]=='M') N++; if(MINES[i][j+1]=='M') N++; } else { if(j==10) { if(MINES[i-1][j-1]=='M') N++; if(MINES[i-1][j]=='M') N++; if(MINES[i][j-1]=='M') N++; } else { if(MINES[i-1][j-1]=='M') N++; if(MINES[i-1][j]=='M') N++; if(MINES[i-1][j+1]=='M') N++; if(MINES[i][j-1]=='M') N++; if(MINES[i][j+1]=='M') N++; } } } else { if(MINES[i-1][j-1]=='M') N++; if(MINES[i-1][j]=='M') N++; if(MINES[i-1][j+1]=='M') N++; if(MINES[i][j-1]=='M') N++; if(MINES[i][j+1]=='M') N++; if(MINES[i+1][j-1]=='M') N++; if(MINES[i+1][j]=='M') N++; if(MINES[i+1][j+1]=='M') N++; } } return(N); } } ////////////////////////////////////////////////////////// // FONCTION JOUER dévoiler une case ou placer un drapeau// ////////////////////////////////////////////////////////// void Jouer() { char NbMinesTxt[2]; // nombre de mines aux alentours switch (choix) { case 1 : NbMinesAutour(); if (N!=0)//Il y a des mines autour { printf("%d\n\n",N); sprintf(NbMinesTxt,"%d",N); JEU[i][j]=NbMinesTxt[0]; } else//Il n'y a pas de mines autour { JEU[i][j]='0'; for(i=i-1;i<i+2;i++) { for(j=j-1;j<j+2;j++) NbMinesAutour(); } } break; case 2 : JEU[i][j]='D'; break; } } /////////////////////////////////////////////////////////////// // FONCTION CHOISIR On demande au joueur de choisir une case // /////////////////////////////////////////////////////////////// void Choisir() { printf("\n\nVeuillez entrer la case choisie (numero de ligne [espace] numero de colonne):\t"); scanf("%d %d",&i,&j); printf("Vous avez choisi la case (%d,%d).\ Que voulez-vous faire ?\n",i,j); i=i-1; j=j-1; printf("\t1. Decouvrir une case\n"); printf("\t2. Placer un drapeau"); do { printf("\t\tVotre choix : "); scanf("%d",&choix); } while (choix<0 || choix>2); } //////////////////////////////////////////////////////////////////////////////// int main() { int c;//compteur srand(time(NULL)); //Afficher le début du jeu printf(" ________________________________\n"); printf("| |\n"); printf("| Jeu du demineur |\n"); printf("|________________________________|\n\n"); Init(); do { printf("\nCombien de mines voulez-vous ?\n\n"); scanf("%d",&NbMines); } while(NbMines>=30); printf("D'accord, vous avez choisi de jouer avec %d mines\n\n",NbMines); PlaceMines(); printf("Voici la grille des mines pour controle:\n"); for(i=0;i<10;i++) { printf("\t\t\t"); for(j=0;j<10;j++) { printf("%c ",MINES[i][j]); } printf("\n"); } printf("\n\nVoici votre grille : A vous de jouer !\n\n"); AfficheJeu(); for(c=0;c<(100-NbMines);c++) { Choisir(); Jouer(); AfficheJeu(); } printf("\n\n\t\tBravo vous avez gagné !"); system("pause"); return 0; }
Offline
Salut,
Est-ce que tu connais code::blocks ( http://www.codeblocks.org/downloads/5 ). Il permet de débuger les programmes en fixant des points d'arrêt. C'est très pratique.
Meilleures salutations.
Offline
Salut,
J'ai parcouru en vitesse.. y a deux trois choses qui sont un peu limite mais passons..
void Jouer() <snip> for(i=i-1;i<i+2;i++) { for(j=j-1;j<j+2;j++)
Je te laisse méditer sur tes boucles FOR.. surtout sur la condition pour les quitter..
Offline
Et oui, erreur de jeunesse
J'ai pas mal corrigé et simplifier
C'est pas encore au point mais ça va venir
Je le sens
Offline