/** * @file pendu.c * @author KSCHdsc x ADFRN (Follow me: github.com/KSCHdsc) * @brief * @version 1.1.2 * @date 2022-10-11 * * @copyright Copyright (c) 2022 * * CE TRAVAIL A ETE FORK DEPUIS TP_PENDU SUR GITHUB / AVEC L'AIDE DE LA DOC "Langage C" et Stakoverflow * * * plus jamais je referais de C sache le Hervé */ //déclaration des librairies #include #include #include #include #include //Faire appel au fichier "./pendu.h" pour la déclaration de "lecturedecarac" #include "pendu.h" int main() { //Simple ajout un peu useless pour le style (Quentin a encore frappé) :) system("cls"); system("title Pendu Game V1.1.2"); system("mode con cols=110 lines=30"); system("color a"); printf("\t\t ________________________________________________\n"); printf("\t\t / \\ \n"); printf("\t\t | _________________________________________ |\n"); printf("\t\t | | | |\n"); printf("\t\t | | C:\\> _ Jeu du pendu | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | By | |\n"); printf("\t\t | | Quentin | Adrien | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | | |\n"); printf("\t\t | | | |\n"); printf("\t\t | |_________________________________________| |\n"); printf("\t\t | |\n"); printf("\t\t \\_________________________________________________/\n"); printf("\t\t \\___________________________________/\n"); printf("\t\t ___________________________________________\n"); printf("\t\t _-' .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. --- `-_\n"); printf("\t\t _-'.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--. .-.-.`-_\n"); printf("\t\t _-'.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_\n"); printf("\t\t _-'.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-_\n"); printf("\t\t _-'.-.-.-.-.-. .---.-. .-------------------------. .-.---. .---.-.-.-.`-_\n"); printf("\t\t:-------------------------------------------------------------------------:\n"); printf("\t\t`---._.-------------------------------------------------------------._.---'\n"); //on declare nos variables pour les utiliser plus bas dans le code char mot_hide[100] = ""; char cached[1] = "-"; int compteur_Tableau = 0; int i = 0; int u = 0; int replaygame = 1; int bonne_lettre = 0; int fin_de_partie = 0; char relancer_partie[1] = "1"; while (relancer_partie[0] != '0') { replaygame = 0; relancer_partie[0] = '0'; int coups_restant = 8; int comparaison = 0; fin_de_partie = 0; // on definit le mot aleatoire : int nombre_ligne = 0; char mot_secret[100] = ""; FILE * fichier = NULL; fichier = fopen("dico_des_mots", "r"); // on determine le nombre de lignes if (fichier != NULL) { char c[100] = ""; while (fgets(c, 100, fichier) != NULL) { nombre_ligne++; } //rewind(fichier); fclose(fichier); } else { printf("erreur sur l'ouverture du fichier\n"); } // on tire au hasard entre 1 et le nombre de ligne: int MIN = 1; int MAX = nombre_ligne; int i = 0; int ligne_a_tirer = 0; srand(time(NULL)); ligne_a_tirer = (rand() % (MAX - MIN + 1)) + MIN; // on recupere le mot à la ligne tirée au hasard: fichier = fopen("dico_des_mots", "r"); if (fichier != NULL) { for (i = 0; i < ligne_a_tirer; i++) { (fgets(mot_secret, 1000, fichier)); } // si il y a un \n a la fin de la ligne on le remplace par \0 char * p; if ((p = strchr(mot_secret, '\n')) != NULL) * p = '\0'; fclose(fichier); } else { printf("erreur 2 le fichier ne s'ouvre pas\n"); } // on mesure la longueur du mot secret : int longueur = strlen(mot_secret); // on cache le mot ici for (i = 0; i < longueur; i++) { mot_hide[i] = * cached; } // on commence la boucle pour jouer // printf("test avant le while( partie finie == 0)"); char str[100]; sleep(2); system("title Game Started"); system("cls"); system("color b"); printf("Entre ton pseudo: "); scanf("%s", str); system("cls"); printf("\nBienvenue Joueur: %s", str); sleep(2); system("color 0f"); system("cls"); //j'ai fais ça parce que jsuis abonné a mazdak et que jsavais pas pk ça beugé printf("\t Si vous trouvez un beug dans notre jeu veuillez le priciser sur l'issue github renseigne :)\n\t\t\tTaper sur \"enter\" pour commencer a jouer\n\n"); printf("\n\n\t\tGithub Issue ===> https://github.com/KSCHdsc/pendu-en-c/issues/new\n"); char inutilebutwork = lecturedecarac(); system("cls"); //Fonction boucle principale, si le joueur n'a pas encore fini de jouer alors elle sera lue while (fin_de_partie == 0) { //affichage coups restant et le mot decouvert petit a petit printf("\nVous avez %d coups a jouer !\nQuel est le mot secret ? : %s \nProposez une lettre : ", coups_restant, mot_hide); char ma_lettre = lecturedecarac(); bonne_lettre = 0; for (i = 0; i < longueur; i++) { if (mot_secret[i] == ma_lettre) { // le joueur decouvre une lettre ! mot_hide[i] = ma_lettre; //affichage de la lettre decouverte bonne_lettre = 1; } } if (isalpha(ma_lettre)) { // Tableau des lettres essayé le max du tableau est à 26 car c'est le nombre de lettres qu'il y a dans l'alphabet. char tabLettre[26]; int essaye = 0; for (int b = 0; b < compteur_Tableau; b++) { if (ma_lettre == tabLettre[b]) { essaye = 1; break; } } if (essaye == 1) { printf("\nVous avez deja tente cette lettre"); } else { // On met les nouvelles lettres dans le tableau. tabLettre[compteur_Tableau] = ma_lettre; compteur_Tableau++; if (bonne_lettre == 0) { system("cls"); //on retire -1 coup ! coups_restant--; switch (coups_restant) { // le joueur perd un coup on affiche le pendu petit a petit case 7: printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; case 6: printf("\t\t\t\t _|_ \n"); printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; case 5: printf("\t\t\t\t |\n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t _|_ \n"); printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; case 4: printf("\t\t\t\t ____ \n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t |\n"); printf("\t\t\t\t _|_ \n"); printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; case 3: printf("\t\t\t\t ____ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t | \n"); printf("\t\t\t\t | \n"); printf("\t\t\t\t | \n"); printf("\t\t\t\t | \n"); printf("\t\t\t\t _|_ \n"); printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; case 2: printf("\t\t\t\t ____ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t | o \n"); printf("\t\t\t\t | /|\\ \n"); printf("\t\t\t\t | \n"); printf("\t\t\t\t | \n"); printf("\t\t\t\t _|_ \n"); printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; case 1: printf("\t\t\t\t ____ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t | o \n"); printf("\t\t\t\t | /|\\ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t | \n"); printf("\t\t\t\t _|_ \n"); printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; //le joueur perd on ne clear donc pas la console et on affiche le pendu total case 0: printf("\t\t\t\t ____ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t | o \n"); printf("\t\t\t\t | /|\\ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t | / \\ \n"); printf("\t\t\t\t _|_ \n"); printf("\t\t\t\t | |______ \n"); printf("\t\t\t\t | | \n"); printf("\t\t\t\t |__________|\n"); break; default: break; } } } } if (!isalpha(ma_lettre)) { system("cls"); printf("Ho Ho Ho! Bad idea man!!!"); } // Si le mot est découvert, alors c'est gagné int comparaison = strcmp(mot_secret, mot_hide); if (comparaison == 0) { // on demande pour relancer une partie ou non printf("\n\nGAGNE ! le mot etait bien : %s\nVoulez vous relancer une partie ?\n OUI = 1 | NON = 0 ", mot_secret); char vide[1] = ""; // pour reinitialiser mot_devoilé a ""; for (i = 0; i < longueur; i++) { mot_hide[i] = * vide; } relancer_partie[0] = lecturedecarac(); //le joueur ne veut pas rejouer on sort donc du programme! if ( * relancer_partie == '0') { printf("A bientot !\n"); } fin_de_partie = 1; } // S'il ne reste plus de coup à jouer, alors c'est perdu if (coups_restant <= 0) { printf("\n\nDesole vous avez perdu\nLe Mot cache etait: %s\nVoulez vous rejouer une partie ? \nOUI = 1 | NON = 0 ", mot_secret); // REJOUER ? char vide[1] = ""; // pour reinitialiser mot_devoilé a ""; for (i = 0; i < longueur; i++) { mot_hide[i] = * vide; } relancer_partie[0] = lecturedecarac(); if ( * relancer_partie == '0') { printf("A bientot !\n"); } fin_de_partie = 1; } } } return 0; } char lecturedecarac() { 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 (pour les effacer) e while (getchar() != '\n'); return caractere; // On retourne le premier caractère qu'on a lu }