midnightweb Profil : Jeune recrue | Bonjour,
Je dois programmer un démineur en C sans bibliothèque graphique.
Jusque là ça marche mais je bloque sur la fonction de dévoilement des cases vides.
Lorsqu'on choisit une case, s'il y a des mines autour, le programme affiche le nombre de mines
S'il y a une mines le programme affiche perdu
Mais q'il n'y a ni mines ni mines autour, il affiche seulement "0". Ce qui ne fait pas avancer le jeu.
Je voudrais que dans ce cas, le jeu dévoile les cases vides autour, et en frontière, le nb de mines.
Merci à ceux qui pourront me donner des mines
(J'ai essayer de boucler mais le programme tourne sans fin)
Code :
- #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
- ////////////////////////////////////////
- // FONCTION AFFICHER LA GRILLE DE JEU //
- ////////////////////////////////////////
- void AfficheJeu()
- {
- 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);
- }
-
- }
- int main()
- {
- int NbMines;//le nombre de mines choisi par le joueur
- char NbMinesTxt[2]; // nombre de mines aux alentours
- int CompteMines;//compteur de mines
- int choix;//le choix effectué par le joueur pour découvrir ou placer un drapeau
- int c;//le compteur de la boucle
- srand(time(NULL));
-
- //Afficher le début du jeu
- printf(" ________________________________\n" );
- printf("| |\n" );
- printf("| Jeu du demineur |\n" );
- printf("|________________________________|\n\n" );
-
- //initialisation des deux grilles
- for(i=0;i<10;i++)
- {
- for(j=0;j<10;j++)
- {
- JEU[i][j]=' ';//' 'implique case cachée
- MINES[i][j]='0';
- }
- }
-
- //demander à l'utilisateur de choisir un nombre de mines
- 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);
-
- //////////////////////////////
- // Initialisation des 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
- }
- }
-
- //Pour vérifier on affiche la grille des mines
- printf("Voici la grille des mines :\n" );
- for(i=0;i<10;i++)
- {
- for(j=0;j<10;j++)
- {
- printf("%c ",MINES[i][j]);
- }
- printf("\n" );
- }
- ////////////////////////////
- // Démarrage de la partie //
- ////////////////////////////
-
- //On affiche le jeu au joueur
- printf("\n\nVoici votre grille : A vous de jouer !\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++)
- {
- JEU[i][j]='-';//'-'implique case cachée
- printf("%c ",JEU[i][j]);
- }
- printf("\n" );
- }
-
- //On demande au joueur de choisir une case
- //la case est définie par sa ligne i et sa colonne j
- for(c=0;c<(100-NbMines);c++)
- {
- 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;
-
- // Demander au joueur ce qu'il veut faire
- printf("\t1. Decouvrir une case\n" );
- printf("\t2. Placer un drapeau" );
- do
- {
- printf("\t\tVotre choix : " );
- scanf("%d",&choix);
- }
- while (choix<0 || choix>2);
-
- // Choix : dévoiler une case ou placer un drapeau
- switch (choix)
- {
- case 1 : //fonction devoile mines autour
- 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';
- printf("%c",JEU[i][j]);
- }
- break;
- case 2 : JEU[i][j]='D';
- break;
- }
-
- //AFFICHER LA GRILLE
- AfficheJeu();
-
- }
- printf("\n\n\t\tBravo vous avez gagné !" );
-
- system("pause" );
- return 0;
- }
|
---------------
"Le travail, c'est le refuge des gens qui n'ont rien de mieux à faire." Oscar Wilde
|