Comment cacher les valeurs d'un tableau 2d [Résolu]

lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 18 févr. 2008 à 02:17 - Dernière réponse : lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention
- 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
Afficher la suite 

12 réponses

Répondre au sujet
cs_jfrancois 482 Messages postés vendredi 26 août 2005Date d'inscription 5 décembre 2009 Dernière intervention - 18 févr. 2008 à 17:19
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jfrancois
lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 23 févr. 2008 à 03:49
+3
Utile
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;
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lil_adriano
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 18 févr. 2008 à 02:28
0
Utile
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++ (@++)<!--
Commenter la réponse de SAKingdom
lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 18 févr. 2008 à 02:37
0
Utile
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.
Commenter la réponse de lil_adriano
lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 18 févr. 2008 à 03:40
0
Utile
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
Commenter la réponse de lil_adriano
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 18 févr. 2008 à 04:03
0
Utile
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++ (@++)<!--
Commenter la réponse de SAKingdom
lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 18 févr. 2008 à 04:30
0
Utile
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
Commenter la réponse de lil_adriano
cs_jfrancois 482 Messages postés vendredi 26 août 2005Date d'inscription 5 décembre 2009 Dernière intervention - 18 févr. 2008 à 13:53
0
Utile
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
Commenter la réponse de cs_jfrancois
lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 18 févr. 2008 à 14:20
0
Utile
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
Commenter la réponse de lil_adriano
cs_jfrancois 482 Messages postés vendredi 26 août 2005Date d'inscription 5 décembre 2009 Dernière intervention - 18 févr. 2008 à 14:38
0
Utile
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
Commenter la réponse de cs_jfrancois
lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 18 févr. 2008 à 16:14
0
Utile
ok jfrancois mais comment je fais pour afficher la valeur de la case sans reveler les autres?
Commenter la réponse de lil_adriano
lil_adriano 42 Messages postés vendredi 26 janvier 2007Date d'inscription 16 juin 2008 Dernière intervention - 18 févr. 2008 à 17:27
0
Utile
merci beaucoup pour ton  aide je vais bien analyser pour mieux comprendre.
Commenter la réponse de lil_adriano

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.