Communauté Informatique NDFR.net : [Help] Programmer un démineur en C - Programmation (C/C++, Delphi, VB, etc.)
Reply
Programmer un démineur en C
Thread Tools Display Modes
  #1  
Old 09-06-2009, 00:52
midnightweb midnightweb is offline
Membre junior
 
Join Date: 09-06-2009
Posts: 1
Malheureux Programmer un démineur en C

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.
Mais là ça buggue, j'ai des '0' à l'infini !
Le souci est sans doute dans la fonction 'Jouer'
Pouvez vous m'aider ? Je déprime là

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
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;
}
Reply With Quote
  #2  
Old 07-09-2016, 16:04
Barobvien Barobvien is offline
Membre junior
 
Join Date: 31-08-2016
Posts: 4
Pourquoi ne pas en récupérer directement un qui est en open source ?

créer son site internet - www.creerunsiteinternet.fr - rédaction contenu web

Last edited by Barobvien; 21-09-2016 at 17:50.
Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

All times are GMT +2. The time now is 07:27.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.