Comment cacher les valeurs d'un tableau 2d

Résolu
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008 - 18 févr. 2008 à 02:17
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008 - 23 févr. 2008 à 03:49
Salut

j'ai un souci, j'ai crée un tableau 2d
 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

main()

{  

      int i,j,col,h,g,choix,ligne,Nb;

      char serp[5][5]={'x','x','x','x','x'};

      g=0;

      srand(time(NULL));

for(i=0;i<5;i++)

   for(j=0;j<5;j++)

      serp[i][j]='O';    

Nb=0;

do

{

   i=rand()%5;

   j=rand()%5;

   if(serp[i][j]=='O'){      

     serp[i][j]='S';

     Nb++;

  }

}while(Nb<5);

do{

 

   

   

      printf("\n");

      printf("  | A   B   C   D   E \n");

      printf("_______________________\n");

      for(i=0;i<5;i++)

      {

          printf("\n");

          printf("%d |",g);

          g++;

          for(j=0;j<5;j++)

          {

         

              printf(" %c |",serp[i][j]);

             

          }

          }

      g=0;

      printf("\n");

      printf("\n\nquel colonne?\n");

      scanf("%d",&col);

      printf("quel ligne?\n");

      scanf("%d",&ligne);

      //stock la ligne voulue

      i=ligne;

      //stock la colonne voulue

      j=col;

      //a l'aide des deux données on positionne le pion

      serp[i][j]='X';

      ligne = i;

            col= j;

}while(choix<2);

      for(i=0;i<5;i++)

      {

          printf("\n");

          printf("%d |",g);

          g++;

          for(j=0;j<5;j++)

          {

         

              printf(" %c |",serp[i][j]);

          }

      }

      g=0;

      printf("\n");

      system ("pause");

      return0;

}


mais j'aimerai les cacher et révéler le point voulu.

donc je vous demande votre aide?? j'espère avoir été clair dans ma demande.

Merci d'avance

12 réponses

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
18 févr. 2008 à 17:19
Voilà ce que ça pourrait donner :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>



#define TAILLE_MAX      5  // taille du jeu



#define CASE_JEU_VIDE  'O' // case vide
#define CASE_JEU_OK    'S' // case a trouver
#define CASE_NON       '-' // case non encore selectionnee




 



void LigneSeparatrice(void)
{
   int i;



   printf("+---+");
   for (i=0 ; i<TAILLE_MAX ; ++i) printf("---+");
   printf("\n");
}




 



int main(void)
{
   // --- Grille des cases a decouvrir
   bool abJeu[TAILLE_MAX][TAILLE_MAX];



   // --- Grille des cases a montrer
   bool abDecouvert[TAILLE_MAX][TAILLE_MAX];



   int i,j,iColonne,iLigne,iTrouve;



  
   // --- Initialisations
   for (i=0 ; i<TAILLE_MAX ; ++i)
   {
      for (j=0 ; j<TAILLE_MAX ; ++j)
      {
         // --- Toutes les cases sont vides
         abJeu[i][j] = false;



         // --- Toutes les cases sont cachees
         abDecouvert[i][j] = false;
      }
   }





   // --- Remplissage aléatoire du jeu
   srand(time(NULL));
   for (i=0 ; i<TAILLE_MAX ; ++i)
      abJeu[rand() % TAILLE_MAX][rand() % TAILLE_MAX] = true;



  
   // --- Boucle du jeu
   while (true)
   {
      // --- Visu de la grille
      printf("\n");
      LigneSeparatrice();
      printf("|   |");
      for (i=0 ; i<TAILLE_MAX ; ++i) printf(" %d |",i + 1);
      printf("\n");
      LigneSeparatrice();
      iTrouve = 0; // compteur de cases trouvees
      for (i=0 ; i<TAILLE_MAX ; ++i)
      {
         printf("| %d |",i + 1);
         for(j=0 ; j<TAILLE_MAX ; ++j)
         {
            if (abDecouvert[i][j])
            {
               // --- Case a montrer
               printf(" %c |",abJeu[i][j] ? CASE_JEU_OK : CASE_JEU_VIDE);
               if (abJeu[i][j]) ++iTrouve;
            }
            else
            {
               // --- Case a ne pas montrer
               printf(" %c |",CASE_NON);
            }
         }
         printf("\n");
      }
      LigneSeparatrice();
      printf("%d case(s) trouvee(s)\n\n",iTrouve);





      // --- Saisie de la colonne de la case a montrer (ou arret du jeu)
      // --- (boucle tant que la colonne saisie est incorrecte)
      do
      {
         printf("Quelle colonne (1 a %d, 0=arret du jeu) ? ",TAILLE_MAX);
         scanf("%d",&iColonne);
      } while (iColonne < 0  ||  iColonne > TAILLE_MAX);
      if (iColonne == 0) break; // fin du jeu



      // --- Saisie de la ligne de la case a montrer (ou arret du jeu)
      // --- (boucle tant que la ligne saisie est incorrecte)
      do
      {
         printf("Quelle ligne (1 a %d, 0=arret du jeu) ? ",TAILLE_MAX);
         scanf("%d",&iLigne);
      } while (iLigne < 0  ||  iLigne > TAILLE_MAX);
      if (iLigne == 0) break; // fin du jeu



     
      // --- Nouvelle case a montrer
      // --- ("x - 1" pour ramener les indices a zero)
      abDecouvert[iLigne - 1][iColonne - 1] = true;
   }
   printf("\n*** Fin du jeu ***\n");
   system ("pause");
   return 0;
}




+---+---+---+---+---+---+
|   | 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+---+
| 1 | - | - | - | - | - |
| 2 | - | - | - | - | - |
| 3 | - | - | - | - | - |
| 4 | - | - | - | - | - |
| 5 | - | - | - | - | - |
+---+---+---+---+---+---+
0 case(s) trouvee(s)



Quelle colonne (1 a 5, 0=arret du jeu) ? 1
Quelle ligne (1 a 5, 0=arret du jeu) ? 1



+---+---+---+---+---+---+
|   | 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+---+
| 1 | S | - | - | - | - |
| 2 | - | - | - | - | - |
| 3 | - | - | - | - | - |
| 4 | - | - | - | - | - |
| 5 | - | - | - | - | - |
+---+---+---+---+---+---+
1 case(s) trouvee(s)



Quelle colonne (1 a 5, 0=arret du jeu) ? 1
Quelle ligne (1 a 5, 0=arret du jeu) ? 2



+---+---+---+---+---+---+
|   | 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+---+
| 1 | S | - | - | - | - |
| 2 | O | - | - | - | - |
| 3 | - | - | - | - | - |
| 4 | - | - | - | - | - |
| 5 | - | - | - | - | - |
+---+---+---+---+---+---+
1 case(s) trouvee(s)



Quelle colonne (1 a 5, 0=arret du jeu) ? 1
Quelle ligne (1 a 5, 0=arret du jeu) ? 3



+---+---+---+---+---+---+
|   | 1 | 2 | 3 | 4 | 5 |
+---+---+---+---+---+---+
| 1 | S | - | - | - | - |
| 2 | O | - | - | - | - |
| 3 | O | - | - | - | - |
| 4 | - | - | - | - | - |
| 5 | - | - | - | - | - |
+---+---+---+---+---+---+
1 case(s) trouvee(s)



Quelle colonne (1 a 5, 0=arret du jeu) ? 0



*** Fin du jeu ***
Appuyez sur une touche pour continuer...








Jean-François
3
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008
23 févr. 2008 à 03:49
Apres des jours d'acharrement et en m'inspirant des autres j'ai trouve la solution a mon probleme il y a un semaine environ, j'aurai bien pu prendre direct le solution de jfrançois mais etant un futur programmeur je devais la trouvée!!! chose faites donc je la partage avec futur progammeur et confirmé!!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()

      int i,j,col,h,g,choix,ligne,Nb;
      char serp[5][5],tab[5][5],cpt;
      g=0;
      srand(time(NULL));
      for(i=0;i<5;i++)
      {
          for(j=0;j<5;j++)
          {
                 serp[i][j]='°';
          }
      }
        
      Nb=0;
      do
      {
             i=rand()%5;
             j=rand()%5;
             if(serp[i][j]=='°'){     
             serp[i][j]='S';
             Nb++;
             }
      }while(Nb<5);
      for(i=0;i<5;i++)
      {
          for(j=0;j<5;j++)
          {
                 tab[i][j]='°';
          }
      }
      printf("\n");
      printf("  | A   B   C   D   E \n");
      printf("_______________________\n");
      for (i=0;i<5;i++)
      {
          printf("\n");
          printf("%d |",g);
          g++;
          for(j=0;j<5;j++)
          {
        
              printf(" %c |",serp[i][j] );
            
          }
          }
      g=0;
      printf("\n");
      printf("\n\nquel colonne?\n");
      scanf("%d",&col);
      printf("quel ligne?\n");
      scanf("%d",&ligne);
      //stock la ligne voulue
      i=ligne;
      //stock la colonne voulue
      j=col;
      if (tab[i][j]!=serp[i][j])
      {
                      tab[i][j]='S';
                     
                                          
                                           printf("\nVous avez Perdu vous tombez sur un S!!!!\n");
                                           printf("DOMMAGE !!!\n");
                      }
                      else
                      {
                           cpt=48;
                           if (serp[i-1][j-1]=='S'){cpt=cpt+1;}
                           if (serp[i-1][j]=='S'){cpt=cpt+1;}
                           if (serp[i+1][j-1]=='S'){cpt=cpt+1;}
                           if (serp[i][j-1]=='S'){cpt=cpt+1;}
                           if (serp[i][j+1]=='S'){cpt=cpt+1;}
                           if (serp[i-1][j-1]=='S'){cpt=cpt+1;}
                           if (serp[i][j-1]=='S'){cpt=cpt+1;}
                           if (serp[i+1][j+1]=='S'){cpt=cpt+1;}
             
                           //affiche d'un X si les cases concordent
                           tab[i][j]=cpt++;
                     
      }
      printf("\n");
      printf("  | A   B   C   D   E \n");
      printf("_______________________\n");
      for (i=0;i<5;i++)
      {
          printf("\n");
          printf("%d |",g);
          g++;
          for(j=0;j<5;j++)
          {
        
              printf(" %c |",tab[i][j] );
          }
      }
      g=0;
      printf("\n");
      system ("pause");
      return 0;
}
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 févr. 2008 à 02:28
Pas du tout compris.
"révéler le point voulu."
Ça veut dire quoi ?
Afficher seulement une valeur précise (ou différente de) ?
Simple, t'as qu'à tester la valeur:

for(i=0;i<5;i++) {
       printf("\n%d |",g++);

       for(j=0;j<5;j++)
          // Si le caractère diffère de 'O', on affiche

           if(serp[i][j] != 'O') printf(" %c |",serp[i][j]);

}

C++ (@++)<!--
0
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008
18 févr. 2008 à 02:37
Salut desole je me suis mal exprime mais apparement grace a toi j'ai peu etre trouvre la solution en faite je veux bien afficher une valeur precise. c'est que au depart mon tableau est rempli de valeur mais le joueur ne le vois pas c'est avec les combinaison de i et j la valeur s'affiche. et je pense que ca donc j'avais besoin. merci encore je regarde apres je de te dis.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008
18 févr. 2008 à 03:40
resalut j'ai tester avec quelque modification. ca s'affiche mais le probleme est que s'affiche tout le tableau
voici mon code modifier

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()

      int i,j,col,h,g,choix,ligne,Nb;
      char serp[5][5]={'x','x','x','x','x'},tab[5][5];
      g=0;
      srand(time(NULL));
for(i=0;i<5;i++)
   {for(j=0;j<5;j++)
     { serp[i][j]='O'; }}
      for(i=0;i<5;i++){
   for(j=0;j<5;j++)
   {   tab[i][j]='O'; }} 
Nb=0;
do
{
   i=rand()%5;
   j=rand()%5;
   if(serp[i][j]=='O'){     
     serp[i][j]='S';
     Nb++;
  }
}while(Nb<5);
do{

   
    printf("\n");
      printf("  | A   B   C   D   E \n");
      printf("_______________________\n");
      for (i=0;i<5;i++)
      {
          printf("\n");
          printf("%d |",g);
          g++;
          for(j=0;j<5;j++)
          {
         
              printf(" %c |",tab[i][j] );
             
          }
          }
     
      g=0;
      printf("\n");
      printf("\n\nquel colonne?\n");
      scanf("%d",&col);
      printf("quel ligne?\n");
      scanf("%d",&ligne);
      //stock la ligne voulue
      i=ligne;
      //stock la colonne voulue
      j=col;
}while(choix<2);
      for (i=0;i<5;i++)
      {
          printf("\n");
          printf("%d |",g);
          g++;
          for(j=0;j<5;j++)
          {
         
               // Si le caractère diffère de 'O', on affiche
           if(serp[i][j] != 'O' && tab[i][j]=='O')
           {
                printf(" %c |",serp[i][j]);}
           else
                printf(" O |");
          }
      }
      g=0;
    
      printf("\n");
      system ("pause");
      return 0;
}

pouvez vous me dire ou se situe mon erreur! merci
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
18 févr. 2008 à 04:03
Normale.
De 1, j'ignore complètement à quoi sert ton tableau tab.
De 2, toute les cases de tab contienne 'O'
Donc cette partie (en gras)
if(serp[i][j] != 'O' && tab[i][j]=='O' )
sera toujours vrai.
Ensuite:
if(serp[i][j] ! = 'O' && tab[i][j]=='O')
           {
                printf(" %c |",serp[i][j]);}
           else
                printf(" O |");
          }

C'est inutile ce code. Si serp[i][j] égal O, on affiche O.... ça ne mène nul part.

C++ (@++)<!--
0
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008
18 févr. 2008 à 04:30
mon tab sert a affiche un tableau rempli de O pour cacher les valeurs du tableau serp qui contient les valeur que je veux afficher une apres l'autre
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
18 févr. 2008 à 13:53
Bonjour,

1) A quoi servent les saisies de ligne et de colonne ? Les résultats "col" et "ligne" sont stockés dans les variables "i" et "j" qui servent d'indices dans les boucles "for" de la boucle "do" qui recommence au début après ces saisies ! "i" et "j" repartent à zéro et finalement "col" et "ligne" ne servent à rien.

2) D'où vient la valeur dans "choix" ?

3) Quel est le but de ce jeu ???

Jean-François
0
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008
18 févr. 2008 à 14:20
bonjour jfrancois
-la saisie de ligne et colonne permet de place un point dans le tableau a l'aide des indices .
-choix c'est inutile j'ai oublier de le retirer, mais en faite c'est utile pour la creation de mon jeu.mais j'ai donner seulement la partie du code source  dont j'ai besion
- mon jeu c'est un peu comme le demineur il faut trouver des points genere aleatoirement
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
18 févr. 2008 à 14:38
Ok ! mais la saisie de "ligne" et "col" ne sert à rien dans ce code ! ces 2 variables sont transférées dans "i" et "j" qui servent dans la double boucle d'affichage.

do
{
   printf("\n");
   printf("  | A   B   C   D   E \n");
   printf("_______________________\n");
   for (i=0;i<5;i++)
   {
      printf("\n");
      printf("%d |",g);
      g++;
      for(j=0;j<5;j++) printf(" %c |",tab[i][j]);
   }
   g=0; <-- à mettre avant la boucle for (i)
   printf("\n");

   printf("\n\nquelle colonne ? ");
   scanf("%d",&col);
   printf("quelle ligne ? ");
   scanf("%d",&ligne);
   //stock la ligne voulue
   i=ligne; // var "i" qui est écrasée à l'itération suivante de la boucle "do"
   //stock la colonne voulue
   j=col;   // var "j" qui est écrasée à l'itération suivante de la boucle "do"
} while (choix < 2);



Jean-François
0
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008
18 févr. 2008 à 16:14
ok jfrancois mais comment je fais pour afficher la valeur de la case sans reveler les autres?
0
lil_adriano Messages postés 42 Date d'inscription vendredi 26 janvier 2007 Statut Membre Dernière intervention 16 juin 2008
18 févr. 2008 à 17:27
merci beaucoup pour ton  aide je vais bien analyser pour mieux comprendre.
0
Rejoignez-nous