pendu_Kevin

by Pendu on December 30th, 2009
No notes
Syntax: C
Show lines - Hide lines - Show in textbox - Download
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
//Liste des procédure présente dans le programme
void menu ();
void regle ();
void jeu_pendu ();
void initialisation(char mot_aleatoir[20], int *nbre_aleatoir, char carac_cache[20]);
void potence(int *tentative);
void recup_lettre(char *lettre, char lettre_proposee[26],char carac_cache[20], int *nbre);
void correspondance(char lettre, char mot_aleatoir[20], char carac_cache[20],int *tentative);
void resultat_fin(char mot_aleatoir[20],int *tentative,char carac_cache[20]);
 
int main ()
{
printf("-----------------------------------------\n");
printf("Programme realise par : Mailleux Kevin\n");
printf("Section : Informatique et systeme Groupe : Groupe 2\n");
printf("Annee academique : 2009 - 2010\n");
printf("Nom de l'enseignant : Mr. Dbt\n");
printf("Projet : Jeu du Pendu\n");
printf("-----------------------------------------\n\n\n");
 
  menu();   //reçoit la procedure menu
 
  char choix; //choix mis en caractère ---> pas d'erreur
 
  do
    {
      printf ("\nque voulez-vous faire ? ");
      scanf("%c",&choix);
      fflush(stdin);
 
      switch (choix)
        {
        case '1' :
          jeu_pendu (); //reçoit la procédure jeu du pendu
          break;
 
        case '2' :
          regle(); //reçoit la procédure règles
          break;
 
        case '3' :
          return 0; //quitter_jeu();
          break;
 
        default :
        printf("valeur incorrecte\n\n");
        getchar();
        break;
        }
    system ("cls");   //permet d'effacer l'entrée erronée tout en gardant le menu affiché
    menu();
 
    }
  while (choix!='1' || choix!='2' || choix!='3'); //si le joueur ne rentre pas un nombre compris en 1 et 3, le programme redemandera de rentrer un choix
 
return 0;
}
 
//-------------------------------------------------------------------------------
 
void menu () // procedure qui affiche le menu du jeu
{
  printf ("======== MENU ========\n");
  printf ("(1) : Jouer\n");
  printf ("(2) : regles du jeu\n");
  printf ("(3) : Quitter\n");
  printf ("=======================\n\n");
}
 
//-------------------------------------------------------------------------------
void regle () // procédure qui affichera les règles du jeu
{
  system("cls"); // permet d'afficher à l'écran que les règles
  printf ("\n\nLe jeu du pendu consiste a retrouver un mot choisi au hasard.\n");
  printf ("Pour ce faire, l'utilisateur tape des lettres et doit retrouver\nle mot en un minimun d'essai. Quand le joueur a comptabilise\n7 essaies, le jeu est perdu");
  getchar ();
 
  system("cls"); // permet de réafficher que le menu à l'écran
  menu ();
}
 
//-------------------------------------------------------------------------------
void jeu_pendu () // procédure qui récupère tout ce qui correspond au jeu du pendu
{
  int nbre_lettre,i;
  char mot_aleatoir [20];
  char carac_cache[20];
  char lettre;
  char lettre_proposee[26]={0};
  int tentative=0;
  int nbre=0;
  int win=1;
 
  initialisation (mot_aleatoir, &nbre_lettre, carac_cache); //reçoit la procédure initialisation
  do //permet d'afficher et de pouvoir réentré une lettre jusqu'à ce que le jeu sois fini
    {
      system("cls"); //permet d'afficher que le jeu sans le menu
      potence(&tentative);//reçoit la procédure qui affiche la potence
 
      win = strcmp(mot_aleatoir,carac_cache); //parcour les tableaux de caractères pour vérifié la correspondance
 
      printf ("%s\n", carac_cache); //reçoit le tableau de "*"
 
      printf ("Lettres deja proposee : %s\n", lettre_proposee); //reçoit le tableau de lettres rentrée par l'utilisateur et l'affiche
      recup_lettre (&lettre,lettre_proposee,carac_cache,&nbre); //reçoit la procédure de récupération de la lettre
 
      printf ("%c\n",lettre); //reçoit la lettre entrée par le joueur et l'affiche à l'écran
 
      tentative++; //comptabilise le nombre de lettre entrée par le joueur
      correspondance (lettre, mot_aleatoir,carac_cache,&tentative); //reçoit la procédure qui vérifie la correspondance entre la lettre entrée et le mot choisi
    }
  while ((win != 0) && (tentative<7)); //détermine la fin de la boucle. le joueur à droit à 7 erreurs
 
  correspondance (lettre, mot_aleatoir,carac_cache,&tentative); //carac_cache=tableau d'"*" ..... reçoit la procédure qui vérifie la correspondance entre la lettre entrée et le mot choisi
  resultat_fin(mot_aleatoir,&tentative,carac_cache); //reçoit la procédure qui vérifie si le joueur à gagner ou pas
}
 
//-------------------------------------------------------------------------------
void initialisation(char mot_aleatoir[20], int *nbre_aleatoir, char carac_cache[20]) // procédure qui sélectionnera au hasard un mot dans une liste et qui déterminera le nombre "*" à mettre
{
  int mot_choisi;
  char mot_cache[20][20];
  int nbre_lettre,i;
 
  srand (time(NULL));    // commande qui permet à l'ordinateur de choisir aléatoirement un mot de la liste ci-dessous
  mot_choisi=rand()%20;
 
//Liste des mots du jeu
  strcpy (mot_cache [0],"LOINTAIN");
  strcpy (mot_cache [1],"ORDINATEUR");
  strcpy (mot_cache [2],"GRAINE");
  strcpy (mot_cache [3],"FLECHE");
  strcpy (mot_cache [4],"DRAGON");
  strcpy (mot_cache [5],"CONDITION");
  strcpy (mot_cache [6],"FIBRE");
  strcpy (mot_cache [7],"MOQUERIE");
  strcpy (mot_cache [8],"CLOCHE");
  strcpy (mot_cache [9],"OEIL");
  strcpy (mot_cache [10],"VACHE");
  strcpy (mot_cache [11],"MOUTON");
  strcpy (mot_cache [12],"CADRE");
  strcpy (mot_cache [13],"RALEUR");
  strcpy (mot_cache [14],"FAIBLE");
  strcpy (mot_cache [15],"ARGENT");
  strcpy (mot_cache [16],"TRAVAIL");
  strcpy (mot_cache [17],"TRAIN");
  strcpy (mot_cache [18],"LIRE");
  strcpy (mot_cache [19],"BOWLING");
 
//permet de faire correspondre le mot choisi avec le mot caché
  strcpy (mot_aleatoir, mot_cache[mot_choisi]);
  strcpy (carac_cache, mot_cache[mot_choisi]);
 
  nbre_lettre=strlen (carac_cache);
 
  for (i=0; i<nbre_lettre; i++)
    {
      carac_cache[i]='*';
    }
}
 
//-------------------------------------------------------------------------------
void recup_lettre (char *lettre, char lettre_proposee[26],char carac_cache[20], int *nbre) // procedure qui récupère une lettre et qui la remet en majuscule si nécessaire
{
  int erreur=0;
  int nbre_lettre,i;
  nbre_lettre=strlen (carac_cache); //défini la longueur du tableau d'"*"
 
  do
    {
      printf ("\n\nchoississer une lettre : ");
      scanf ("%c", lettre); //récupère la lettre
      fflush(stdin);
 
      *lettre=toupper(*lettre); //met la lettre en majuscule si nécessaire
 
      erreur=0;
 
      for (i=0; i<nbre_lettre; i++)
        {
          if (lettre_proposee[i]==*lettre)
            {
 
              printf ("\alettre deja rentree");
 
              erreur=1;
            }
        }
    }
  while (erreur==1);
 
  lettre_proposee[*nbre]=*lettre; //compteur qui parcour le tableau de lettre proposée et qui vérifie les lettres entrées
  (*nbre)++;
  lettre_proposee[*nbre]=0;// caractère d'échappement du tableau
}
 
//-------------------------------------------------------------------------------
void correspondance (char lettre, char mot_aleatoir[20],char carac_cache[20], int *tentative) //procedure qui vérifira si la lettre entrée par le joueur correspond à une lettre précente dans le mot choisi
{
  int i;
  int nbre_lettre;
  int j=0;
 
  nbre_lettre=strlen (carac_cache);
 
  for (i=0; i<nbre_lettre; i++)  //boucle qui parcour le mot choisi et remplace la lettre qui correspond
    {
      if (mot_aleatoir[i]==lettre) //si la lettre fait partie du mot choisi
        {
          carac_cache[i]=lettre; //remplace la lettre dans le tableau d'"*"
 
          j++; //vérifie si la lettre est pls fois dans le mot, le programme ne retire pas pls fois l'erreur
          if (j==1)
            {
              (*tentative)--; //retire une tentatvie quand la lettre est bonne
            }
        }
    }
}
 
//-------------------------------------------------------------------------------
void resultat_fin(char mot_aleatoir[20],int *tentative,char carac_cache[20])
{
  int testgagne = 1;
 
  testgagne = strcmp(mot_aleatoir,carac_cache); //parcour les tableaux pour vérifier la correspondance
 
  if (testgagne == 0) //on controle si la variable gagner vaut 0 (signe que le joueur a trouver le bon mot et on affiche un message le félicitant)
    {
      printf("Vous avez gagne, le mot a decouvrir etait bien %s", mot_aleatoir);
      getchar();
    }
  else if (*tentative == 7) // si le joueur a pas gagner, on controle le nombre de coup jouer(via tentative), si celui ci vaut 7, on affiche un message prévenant l'utilisateur de sa défaite
    {
      printf("Vous avez perdu, le mot a decouvrir etait %s", mot_aleatoir);
      getchar();
    }
}
 
//-------------------------------------------------------------------------------
void potence(int *tentative) //procédure qui affichera la potence
{
  int i;
 
  switch (*tentative) //suivant la valeur des tentatives, affichera la potence
    {
 
    case 0:
      printf ("\n---------------");
      printf ("\n|       |       ");
      for (i=0; i<4; i++)
        {
          printf ("\n|");
        }
      printf ("\n////////////////////\n\n");
 
      break;
 
    case 1 :
      printf ("\n---------------");
      printf ("\n|       |       ");
      printf ("\n|       @       ");
      for (i=0; i<3; i++)
        {
          printf ("\n|");
        }
      printf ("\n////////////////////\n\n");
 
      break;
 
    case 2 :
      printf ("\n---------------");
      printf ("\n|       |       ");
      printf ("\n|       @       ");
      printf ("\n|       |       ");
      for (i=0; i<2; i++)
        {
          printf ("\n|");
        }
      printf ("\n////////////////////\n\n");
 
      break;
 
    case 3 :
      printf ("\n---------------");
      printf ("\n|       |       ");
      printf ("\n|       @       ");
      printf ("\n|      /|       ");
      for (i=0; i<2; i++)
        {
          printf ("\n|");
        }
      printf ("\n////////////////////\n\n");
 
      break;
 
    case 4 :
      printf ("\n---------------");
      printf ("\n|       |       ");
      printf ("\n|       @       ");
      printf ("\n|      /|\\");
      for (i=0; i<2; i++)
        {
          printf ("\n|");
        }
      printf ("\n////////////////////\n\n");
 
      break;
 
    case 5 :
      printf ("\n---------------");
      printf ("\n|       |       ");
      printf ("\n|       @       ");
      printf ("\n|      /|\\");
      printf ("\n|      /        ");
      printf ("\n|               ");
 
      printf ("\n////////////////////\n\n");
 
      break;
 
    case 6 :
      printf ("\n---------------");
      printf ("\n|       |       ");
      printf ("\n|       @       ");
      printf ("\n|      /|\\");
      printf ("\n|      / \\");
      printf ("\n|               ");
 
      printf ("\n////////////////////\n\n");
 
      break;
    }
}
 

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS