#include #include #include #include #include "dico.h" int gagne(int lettreTrouvee[], long tailleMot); int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]); char lireCaractere(); int main(int argc, char* argv[]) { char enregistre = 0; char joueur2 [15]= {0};//nom du joueur2 char votre_choix = 0; int reponse_partie = 1,parite_gagne2 = 0,partie_perdu2 = 0,parite_gagne3 = 0,partie_perdu3 = 0,total_partieJ1 = 0,total_partieJ2 = 0;// refaire une partie et stat du joueur1 et 2 en mode multi à jouer,a chaque tour de boucle total partie prend 1 char lettre = 0; // Stocke la lettre proposée par l'utilisateur (retour du scanf) char motSecret[100] = {0}; // Ce sera le mot à trouver int *lettreTrouvee = NULL; // Un tableau de booléens. Chaque case correspond à une lettre du mot secret. 0 = lettre non trouvée, 1 = lettre trouvée char coupsRestants = 10; // Compteur de coups restants (0 = mort) long i = 0; // Une petite variable pour parcourir les tableaux long tailleMot = 0; int paire_impaire = 0; //soit paire et joueur 1 à jouer soit impaire et joueur 2 à jouer,a chaque tour de boucle total partie prend 1 à jouer double pourcentage_de_reussite = 0,pourcentage_de_reussiteJ1 = 0,pourcentage_de_reussiteJ2 = 0; stat_joueur stat= {0}; printf ("\n ****Bienvenu dans le jeu du pendu****\n" "\n __________\n" " |/ |\n" " | @\n" " | -|-\n" " | / \\\ " "\n |\n\n" " Les regles du jeu a suivre : \n" " 1) Entre que des lettres MAJUSCULE\n" " 2) Pas d'accent\n" " 3) Trouve le mot mystere en moins de 10 coups \n" " 4) Rentre les lettres une par une \n" " meme si vous avez trouve le mot mystere \n\n" " Entre le nom du joueur 1 ? "); scanf("%s",stat.joueur1); printf( "\n\n Beinvenu(e) %s, bonnee partie\n\n",stat.joueur1); system("PAUSE"); while (getchar() != '\n') ; printf( "\n\n ===MENU===\n\n" " 1= Jouer en solo\n" " 2= Jouer en multi\n" " 3= Quitte le jeu\n\n" " Votre choix ? "); scanf("%d",&votre_choix); switch(votre_choix) { case 1 : recup_stat(&stat);//on va cherche les donne si deja jouer break; case 2 : paire_impaire++; printf("\n Entre le nom du joueur 2 ? "); scanf("%s",joueur2); printf(" Beinvenu(e) %s, bonnee partie"); break; case 3 : printf("\n Au revoir a bientot\n"); return 0; break; default: printf(" Au revoir\n"); return 0; break; } while (reponse_partie==1) //boucle jouer une nouvelle partie { if(paire_impaire>=1) { paire_impaire %= 2; if (paire_impaire>=1) { printf("\n\n A %s de jouer\n",stat.joueur1); total_partieJ1++; } else { printf("\n\n A %s de jouer\n",joueur2); paire_impaire = 2; total_partieJ2++; } } while (getchar() != '\n') ; coupsRestants = 10; if (!piocherMot(motSecret)) exit(0); tailleMot = strlen(motSecret); lettreTrouvee = malloc(tailleMot * sizeof(int)); // On alloue dynamiquement le tableau lettreTrouvee (dont on ne connaissait pas la taille au départ) if (lettreTrouvee == NULL) exit(0); for (i = 0 ; i < tailleMot ; i++) lettreTrouvee[i] = 0; /* On continue à jouer tant qu'il reste au moins un coup à jouer ou qu'on n'a pas gagné */ while (coupsRestants > 0 && !gagne(lettreTrouvee, tailleMot)) { printf("\n\n Il vous reste %ld coups a jouer", coupsRestants); printf("\n Quel est le mot secret ? "); /* On affiche le mot secret en masquant les lettres non trouvées Exemple : *A**ON */ for (i = 0 ; i < tailleMot ; i++) { if (lettreTrouvee[i]) // Si on a trouvé la lettre n° i printf("%c", motSecret[i]); // On l'affiche else printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées } printf("\n Proposez une lettre : "); lettre = lireCaractere(); // Si ce n'était PAS la bonne lettre if (!rechercheLettre(lettre, motSecret, lettreTrouvee)) { coupsRestants--; // On enlève un coup au joueur switch (coupsRestants) { case 9 : printf( "\n |\n" " |\n" " |\n" " |\n" " |\n"); break; case 8 : printf( " __________\n" " |\n" " |\n" " |\n" " |\n" " |\n"); break; case 7 : printf( " __________\n" " |/\n" " |\n" " |\n" " |\n" " |\n"); break; case 6 : printf( " __________\n" " |/ |\n" " |\n" " |\n" " |\n" " |\n"); break; case 5 : printf( " __________\n" " |/ |\n" " | @\n" " |\n" " |\n" " |\n"); break; case 4 : printf( " __________\n" " |/ |\n" " | @\n" " | |\n" " |\n" " |\n"); break; case 3 : printf( " __________\n" " |/ |\n" " | @\n" " | -|\n" " |\n" " |\n"); break; case 2 : printf( " __________\n" " |/ |\n" " | @\n" " | -|-\n" " |\n" " |\n"); break; case 1 : printf( " __________\n" " |/ |\n" " | @\n" " | -|-\n" " | /\n" " |\n"); break; } } } if (gagne(lettreTrouvee, tailleMot)) { if(paire_impaire==0) { stat.parties++; stat.victoires++; pourcentage_de_reussite=(stat.victoires*100)/stat.parties; printf("\n\n Gagne %s ! Le mot secret etait bien : %s\n\n",stat.joueur1,motSecret); printf("\n\n Vous avez gagne %d partie et perdu %d partie sur %d partie\n",stat.victoires,stat.defaites,stat.parties); printf(" pourcentage de reussite %f",pourcentage_de_reussite); } else { paire_impaire %=2; if(paire_impaire) { printf("\n\n Gagne %s ! Le mot secret etait bien : %s",stat.joueur1,motSecret); paire_impaire++; parite_gagne2++; pourcentage_de_reussiteJ1=(parite_gagne2*100)/total_partieJ1; } else { printf("\n\n Gagne %s ! Le mot secret etait bien : %s",joueur2,motSecret); paire_impaire++; parite_gagne3++; pourcentage_de_reussiteJ2=(parite_gagne3*100)/total_partieJ2; } printf( "\n\n %s vous avez gagne %d partie et perdu %d partie sur %d partie\n",stat.joueur1,parite_gagne2,partie_perdu2,total_partieJ1); printf(" pourcentage de reussite %f\n",pourcentage_de_reussiteJ1); printf( " %s vous avez gagne %d partie et perdu %d partie sur %d partie\n",joueur2,parite_gagne3,partie_perdu3,total_partieJ2); printf(" pourcentage de reussite %f",pourcentage_de_reussiteJ2); } } else { if(paire_impaire==0) { stat.defaites++; stat.parties++; pourcentage_de_reussite=(stat.victoires*100)/stat.parties; printf( "\n\n Perdu ! Le mot secret etait : %s", motSecret); printf( "\n __________\n" " |/ |\n" " | @\n" " | -|-\n" " | / \\\ " "\n |\n"); printf("\n\n Vous avez gagne %d partie et perdu %d partie sur %d partie\n",stat.victoires,stat.defaites,stat.parties); printf(" pourcentage de reussite %f",pourcentage_de_reussite); } else { paire_impaire %=2; if(paire_impaire) { partie_perdu2++; printf( "\n\n Perdu ! Le mot secret etait : %s", motSecret); printf( "\n __________\n" " |/ |\n" " | @\n" " | -|-\n" " | / \\\ " "\n |\n"); paire_impaire++; pourcentage_de_reussiteJ1=(parite_gagne2*100)/total_partieJ1; } else { partie_perdu3++; printf( "\n\n Perdu ! Le mot secret etait : %s", motSecret); printf( "\n __________\n" " |/ |\n" " | @\n" " | -|-\n" " | / \\\ " "\n |\n"); paire_impaire++; pourcentage_de_reussiteJ2=(parite_gagne3*100)/total_partieJ2; } printf( "\n\n %s vous avez gagne %d partie et perdu %d partie sur %d partie\n",stat.joueur1,parite_gagne2,partie_perdu2,total_partieJ1); printf( " pourcentage de reussite %f\n",pourcentage_de_reussiteJ1); printf( " %s vous avez gagne %d partie et perdu %d partie sur %d partie\n",joueur2,parite_gagne3,partie_perdu3,total_partieJ2); printf( " pourcentage de reussite %f",pourcentage_de_reussiteJ2); } } free(lettreTrouvee); // On libère la mémoire allouée manuellement (par malloc) printf( "\n\n Voulez vous recommence une pertie\n\n" " Oui=1\n" " Non=2\n\n" " Votre choix "); scanf("%d",&reponse_partie); } printf( "\n\n Voulez vous enregistre votre socre\n\n" " Oui=1\n" " Non=2\n\n" " Votre choix "); scanf("%d",&enregistre); switch (enregistre) { case 1 : enregistre_stat(stat); break; } return 0; } char lireCaractere() { char caractere = 0; caractere = getchar(); // On lit le premier caractère caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà // On lit les autres caractères mémorisés un à un jusqu'au \n while (getchar() != '\n') ; return caractere; // On retourne le premier caractère qu'on a lu } int gagne(int lettreTrouvee[], long tailleMot) { long i = 0; int joueurGagne = 1; for (i = 0 ; i < tailleMot ; i++) { if (lettreTrouvee[i] == 0) joueurGagne = 0; } return joueurGagne; } int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]) { long i = 0; int bonneLettre = 0; // On parcourt motSecret pour vérifier si la lettre proposée y est for (i = 0 ; motSecret[i] != '\0' ; i++) { if (lettre == motSecret[i]) // Si la lettre y est { bonneLettre = 1; // On mémorise que c'était une bonne lettre lettreTrouvee[i] = 1; // On met à 1 la case du tableau de booléens correspondant à la lettre actuelle } } return bonneLettre; }