Pendu (+ gestion de fichier)

Contenu du snippet

C'est le jeu du pendu tout bête en langage C. Il gère des fichiers (un pour les mots, un derneir pour les scores). Ces fichiers sont enregistrés sur le disque: c:\pendu\resultat.txt et c:\pendu\pendu.txt.
Une dernière chose, j'ai fais mon progrmamme avec un srand (choisi le mot aléatoirement) et donc si vous voulez rajouter des mot dans le fichier, vérifier le srand...
Voilà j'espère que ça vous aidera...

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
#include <string.h>
FILE*fichier;
FILE*fichier2;

//prototype de la fonction servant à afficher le pendu
void pendu (int *cpt);

//prototype de la fonction potence
void potence(void);

//prototype de la fonction cherche
int cherche(char l, char *tab1,char *tab2, int taille,int *ind);

int main()
  {
  char choix;
  char mot[20];          //Mots du fichier pendu.txt
  char trouver[20];      //Mot à trouver (jeu du pendu) 
  char lettre;           //Lettre à rentrer au clavier pour trouver le mot
  char tableau[20];      //Contient toutes les lettres rentrées au clavier   
  char nom[20];          //Nom de famile du joueur
  char prenom[20];       //Prenom du joueur
  char nomf[20];          //Nom de famile du joueur (dans le fichier)
  char prenomf[20];       //Prenom du joueur (dans le fichier)
  
  int i=0;               //Compte les lignes du fichier
                         //affiche l'emplacement du mot à chercher                          
  int j;                 //Numéro de ligne du mot choisi
  int k;                 //On place les bonne lettre ou on veut sur l'écran
  int l;                 //On place les mauvaise lettre ou on veut sur l'écran
                         //vide tableau[20]
  int compteur;          //Nombre d'essai pour trouver le mot
  int longueur;          //Longueur du mot à trouver
  int indice;            //indice de tableau[20]
  int cpt;               //compteur de la taille du mot
  int cptmot=0;          //compteur de mot
  int cptgood=0;         //compteur de bonnes réponses
  int cptbad=0;          //compteur de mauvaises réponse
  int cptmotf=0;         //
  int cptgoodf=0;        // pareil mais pour le fichier
  int cptbadf=0;         //
  
  flushall();
  printf("\tEntres ton nom: ");
   scanf("%s",nom);
  printf("\tEntres ton prenom: ");
   scanf("%s",prenom);
  
  fichier2=fopen("c:\\pendu\\resultat.txt","r+");
  rewind(fichier2);
  while(!feof(fichier2))
       {
       fscanf(fichier2,"%20s%20s %5d %5d %5d\n",nomf,prenomf,&cptmotf,&cptgoodf,&cptbadf);          
       if(strcmp(nom,nomf)==0 && strcmp(prenom,prenomf)==0)
        {        
        cptmot=cptmotf;
        cptgood=cptgoodf;
        cptbad=cptbadf;        
        break;
        }     
       }  
  
  
  
  if(strcmp(nom,nomf)==0 && strcmp(prenom,prenomf)==0)
   {
   printf("\n\n\nBonjour %s\n\n\n",prenomf);                      	
   }
  else
     {
     fprintf(fichier2,"%-20s%-20s %-5d %-5d %-5d\n",nom,prenom,cptmot,cptgood,cptbad);	
     } 
  fclose(fichier2); 
  do
   {  
   srand(time(NULL));
   printf("\n\tMenu\n\n");
   printf("1...Jouer au pendu\n");
   printf("2.........Resultat\n");
   printf("3..........Quitter\n");
   printf("\n\n\nFaites un choix: ");
    choix=getch();
    printf("%c",choix);
   
   switch(choix)
        {
        case '1': system("cls");       	   
        	  indice=0;
        	  compteur=0;
        	  cpt=0;       	  
        	  
        	 //appel à la fonction potence
        	  potence();
        	  
        	  gotoxy(1,7);
                  printf("Mauvaises lettres: ");
                  
                  for(l=0;l<20;l++)
                    {
                    tableau[l]=1;                    
                    }
                  
        	 //Le mot est choisi dans le fichier pendu.txt
        	  j=rand()%175;
                                    
        	  fichier=fopen("c:\\pendu\\pendu.txt","r");
                  while(!feof(fichier) && i!=j)
                      {
                      fscanf(fichier,"%s\n",mot);
                      i++;                    	
                      }                  
                  fclose(fichier);
                  
                  strcpy(trouver,mot);                  
                  longueur=strlen(trouver);
                  
                  cptmot++;
                                            
                  gotoxy(10,15);
                  for(i=0;i<longueur;i++)
                    {
                    printf(".");	
                    }
                 
                  gotoxy(10,15);
                  printf("%c",trouver[0]);
                  tableau[0]=trouver[0];
                  indice++;  
                                 
                  for(k=0;k<longueur;k++)
                    {
                    if(trouver[k]==trouver[0])
                     {
                     gotoxy(10+k,15);
                     printf("%c",trouver[k]);                     
                     cpt++;
                     }
                    }               
                                  
                 //on cherche le mot qui à été choisi
                  l=0;
                  i=0;                  
                  do
                   {
                   gotoxy(1,1);
                   printf("\n\nEntrez une lettre au clavier (minuscule): ");
                    lettre=getch();                   
                    printf("%c",lettre);              
                                                       
                   switch(cherche(lettre,tableau,trouver,longueur,&indice))
                        {
                        case 0: printf("\n\nLa lettre n'est pas dans le mot!!!                           \n\n");                    
                                compteur++;                    
                                gotoxy(20+l,7);                    
                                printf("%c",lettre);
                                l++;
                           break;	                        
                        case 1: printf("\n\nLa lettre est deja tapee!!!                                  \n\n");                    
                                compteur++;
                                gotoxy(20+l,7);
                                printf("%c",lettre);
                                l++;	
                           break;                           
                        case 2: printf("\n\nLa lettre est correcte                                       \n\n");
                    
                                for(k=0;k<longueur;k++)
                                  {
                                  if(trouver[k]==lettre)
                                   {
                                   gotoxy(10+k,15);
                                   printf("%c",lettre);
                                   cpt++;
                                   }
                                  }
                           break;
                        }
                  
                  //appel à la fonction pendu
                   pendu(&compteur);
                   
                   if(longueur==cpt && compteur!=7)
                    {
                    gotoxy(53,10);
                    printf("Vous avez gagne");
                    cptgood++;
                    }
                   
                   if(cpt<longueur && compteur==7)
                    {
                    gotoxy(53,10);
                    printf("Vous avez perdu !!!!!\n");	
                    printf("\t\t\t\t\t\tLe mot etait: %s",trouver);
                    cptbad++;
                    }              
                   }
                  while(cpt<longueur && compteur<7);  
                 
                  fichier2=fopen("c:\\pendu\\resultat.txt","r+");                 
                  while(!feof(fichier2))
                      {
                      fscanf(fichier2,"%20s%20s %5d %5d %5d\n",nomf,prenomf,&cptmotf,&cptgoodf,&cptbadf);                          	
                      if(strcmp(nom,nomf)==0 && strcmp(prenom,prenomf)==0)
                       {
                       fseek(fichier2,-60,SEEK_CUR);
                       fprintf(fichier2,"%-20s%-20s %-5d %-5d %-5d\n",nom,prenom,cptmot,cptgood,cptbad);
                       break;
                       }       
                     }                  
                  fclose(fichier2);
                  
                  gotoxy(25,25);
                  system("pause");
                  system("cls");            
           break;
        case '2': fichier2=fopen("c:\\pendu\\resultat.txt","r");
                  while(!feof(fichier2))
                      {
                      fscanf(fichier2,"%20s%20s %5d %5d %5d\n",nomf,prenomf,&cptmotf,&cptgoodf,&cptbadf);                          	
                      printf("\n\n\nNom:    %s",nomf);
                      printf("\nPrenom: %s\n",prenomf);
                      printf("\nNombre de mots tentes:  %d",cptmotf);
                      printf("\nNombre de mots trouves: %d",cptgoodf);
                      printf("\nNombre de mots rates:   %d",cptbadf);  
                      }                  
                  fclose(fichier2);
                  
                  printf("\n\n\n");
                  system("pause");
                  system("cls");
           break;
        case '3': 
           break; 	
        } 
   }
  while(choix!='3');
  
  printf("\n\n\n");
  system("pause");
  }

//fonction cherche
int cherche(char l, char *tab1,char *tab2, int taille, int *ind)
  {  
  int j;
  int booleen=0;
  int lettreok=0;
  
  for(j=0;j<taille;j++)
    {
    if(l==tab1[j]) 	//lettre déjà tapée
     {
     lettreok=1;
     break;	
     }
    }
  
  if(lettreok==1) return 1;
  else 
     {        
     tab1[*ind]=l;
     (*ind)++;        	
     }

  for(j=0;j<taille;j++)
    {
    if(l!=tab2[j]);	        //lettre n'est pas dans le mot
    else 
       {
       booleen=1;
       break;	
       }
    }
  if(booleen==0) return 0;
  else return 2;
  }

//fonction pendu
void pendu (int *cpt)
  {
  switch(*cpt)
       {
       case 1: gotoxy(67,16);
               printf("(0)");
          break;
       case 2: gotoxy(68,17);
               printf("|");
          break;
       case 3: gotoxy(68,18);
               printf("|");
          break;
       case 4: gotoxy(67,17);
               printf("/");
          break;
       case 5: gotoxy(68,17);
               printf("|\\");
          break;
       case 6: gotoxy(67,19);
               printf("/");
          break;
       case 7: gotoxy(68,19);
               printf(" \\");
          break;
       }
  }
   
//fonction potence
void potence(void)
   {
   gotoxy(60,20);
   printf("__|__");
   gotoxy(62,19);
   printf("|");
   gotoxy(62,18);
   printf("|");
   gotoxy(62,17);
   printf("|");
   gotoxy(62,16);
   printf("|");
   gotoxy(62,15);
   printf("|");
   gotoxy(62,14);
   printf("|");
   gotoxy(62,14);
   printf("_______");
   gotoxy(68,15);
   printf("|");
   }

Conclusion :


Je ne pense pas qu'il y ait de bugs (en tout cas pas de trop!!!) mais si il y'en a faites le moi savoir...
amusez-vous bien!!!

A voir également

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.