############# MAIN.C ##############include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include "fonctions.h"#include "dico.h"int main(void){ long i = 0, nombreEssais = 10, longueur = 0; int modeJeu = 0, continuerPartie = 1; char motMystere[100] = {0}, lettreEntree = 0; char* motActuel = NULL; while (continuerPartie == 1) // Tant que l'utilisateur désire jouer { nombreEssais = 10; printf("\n=== Le jeu du pendu ===\n\nModes de jeu\n1. Un joueur\n2. Deux joueurs\n"); do { printf("Choisissez le mode de jeu : "); scanf("%d%*[^\n]", &modeJeu); getchar(); } while (modeJeu != 1 && modeJeu != 2); if (modeJeu == 1) { genererMotMystere(motMystere); motActuel = genererMotActuel(motMystere, strlen(motMystere)); while (nombreEssais != 0 && nombreEssais != 20) { while (compareChaine(motMystere, motActuel) != 0 && nombreEssais != 0) { printf("\nMot mystere : %s\nProposez une lettre : ", motActuel); lettreEntree = lireCaractere(); if (rechercheCaractere(motMystere, lettreEntree) != NULL) { printf("\nLa lettre %c est comprise dans le mot mystere, bien joue.\n", lettreEntree); afficherMotActuel(motMystere, motActuel, lettreEntree); } else if (rechercheCaractere(motMystere, lettreEntree) == NULL) { nombreEssais--; afficherBonhomme(nombreEssais); printf("\nLa lettre %c n'est pas dans le mot mystere, dommage. /!\\\n", lettreEntree); printf("Il vous reste %ld essais avant une mort certaine.\n", nombreEssais); } } if (compareChaine(motMystere, motActuel) == 0) { nombreEssais = 20; printf("\n%s\nBravo vous avez trouve le mot mystere !\n", motActuel); do { printf("\nVoulez vous rejouer une partie ?\n0 pour quitter et 1 pour rejouer : "); scanf("%d%*[^\n]", &continuerPartie); getchar(); } while (continuerPartie != 0 && continuerPartie != 1); } } if (nombreEssais == 0) { afficherBonhomme(nombreEssais); printf("\nVous etes mort !\nLe mot mystere etait : %s\n", motMystere); do { printf("\nVoulez vous rejouer une partie ?\n0 pour quitter et 1 pour rejouer : "); scanf("%d%*[^\n]", &continuerPartie); getchar(); } while (continuerPartie != 0 && continuerPartie != 1); } } else if (modeJeu == 2) { printf("\nVeuillez entrer un mot que votre adversaire devra deviner.\n"); fgets(motMystere, 100, stdin); longueur = strlen(motMystere); for(i = 0; i < longueur; i++) motMystere[i] = toupper(motMystere[i]); motMystere[strlen(motMystere)-1] = '\0'; printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); motActuel = genererMotActuel(motMystere, strlen(motMystere)); while (nombreEssais != 0 && nombreEssais != 20) { while (compareChaine(motMystere, motActuel) != 0 && nombreEssais != 0) { printf("\nMot mystere : %s\nProposez une lettre : ", motActuel); lettreEntree = lireCaractere(); if (rechercheCaractere(motMystere, lettreEntree) != NULL) { printf("\nLa lettre %c est comprise dans le mot mystere, bien joue.\n", lettreEntree); afficherMotActuel(motMystere, motActuel, lettreEntree); } else if (rechercheCaractere(motMystere, lettreEntree) == NULL) { nombreEssais--; afficherBonhomme(nombreEssais); printf("\nLa lettre %c n'est pas dans le mot mystere, dommage. /!\\\n", lettreEntree); printf("Il vous reste %ld essais avant une mort certaine.\n", nombreEssais); } } if (compareChaine(motMystere, motActuel) == 0) { nombreEssais = 20; printf("\n%s\nBravo vous avez trouve le mot mystere !\n", motActuel); do { printf("\nVoulez vous rejouer une partie ?\n0 pour quitter et 1 pour rejouer : "); scanf("%d%*[^\n]", &continuerPartie); getchar(); } while (continuerPartie != 0 && continuerPartie != 1); } } if (nombreEssais == 0) { afficherBonhomme(nombreEssais); printf("\nVous etes mort !nLe mot mystere etait : %s\n", motMystere); do { printf("\nVoulez vous rejouer une partie ?\n0 pour quitter et 1 pour rejouer : "); scanf("%d%*[^\n]", &continuerPartie); getchar(); } while (continuerPartie != 0 && continuerPartie != 1); } } free(motActuel); } return 0;}############# FONCTIONS.C ##############include <stdio.h>#include <stdlib.h>#include <ctype.h>#include "fonctions.h"char* genererMotActuel(char* motMystere, long longueur){ char* motActuel = NULL; long i = 0; motActuel = malloc(sizeof(motMystere)); // motActuel doit avoir la meme longueur que motMystere if (motActuel == NULL) // On vérifie si l'allocation a marché ou pas { exit(0); // On arrête tout } while (i != longueur) { motActuel[i] = '*'; i++; } return motActuel;}int compareChaine(char *chaine1, char *chaine2){ long i = 0; for (i = 0; chaine1[i] == chaine2[i]; i++) { if (chaine1[i] == 0) { return 0; } } return chaine1[i] - chaine2[i];}char lireCaractere(void){ 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'à l'\n (pour les effacer) while (getchar() != '\n') ; return caractere; // On retourne le premier caractère qu'on a lu}char* rechercheCaractere(char* chaine, long caractereVoulu){ long i = 0; for (i = 0; chaine[i] != caractereVoulu; i++) { if (chaine[i] == 0) { return NULL; } } return &chaine[i];}void afficherMotActuel(char* motMystere, char* motActuel, char lettreEntree){ char caractereActuel = 1; long i = 0; for (i = 0; caractereActuel != 0; i++) { caractereActuel = motMystere[i]; if (caractereActuel == lettreEntree) { motActuel[i] = motMystere[i]; caractereActuel = motMystere[i]; } } return;}void afficherBonhomme(long nombreEssais){ switch (nombreEssais) { case 9: printf("\n\n__________\n\n"); break; case 8: printf("\n\n |\n |\n |\n |\n |\n |\n__________\n\n"); break; case 7: printf("\n\n |/\n |\n |\n |\n |\n |\n__________\n\n"); break; case 6: printf("\n\n _________\n |/\n |\n |\n |\n |\n |\n__________\n\n"); break; case 5: printf("\n\n _________\n |/ |\n |\n |\n |\n |\n |\n__________\n\n"); break; case 4: printf("\n\n _________\n |/ |\n | 0\n |\n |\n |\n |\n__________\n\n"); break; case 3: printf("\n\n _________\n |/ |\n | 0\n | \\|/\n |\n |\n |\n__________\n\n"); break; case 2: printf("\n\n _________\n |/ |\n | 0\n | \\|/\n | |\n |\n |\n__________\n\n"); break; case 1: printf("\n\n _________\n |/ |\n | 0\n | \\|/\n | |\n | / \n |\n__________\n\n"); break; case 0: printf("\n\n _________\n |/ |\n | 0\n | \\|/\n | |\n | / \\ \n |\n__________\n\n"); break; } return;}