pendu_Kevin
No notes
Syntax:
C
#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; } }