From 728b6398574a4f7554773c7a3614badc705bf8a5 Mon Sep 17 00:00:00 2001 From: kara-mosr Date: Wed, 8 Oct 2025 16:11:15 +0200 Subject: [PATCH] add src --- src/facile.txt | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ src/functions.c | 49 ++++++++++++++++++++++++ src/functions.h | 12 ++++++ src/getfuncs.c | 44 +++++++++++++++++++++ src/getfuncs.h | 7 ++++ src/main.c | 61 +++++++++++++++++++++++++++++ src/moyen.txt | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ src/pendu | Bin 0 -> 16368 bytes 8 files changed, 373 insertions(+) create mode 100644 src/facile.txt create mode 100644 src/functions.c create mode 100644 src/functions.h create mode 100644 src/getfuncs.c create mode 100644 src/getfuncs.h create mode 100644 src/main.c create mode 100644 src/moyen.txt create mode 100755 src/pendu diff --git a/src/facile.txt b/src/facile.txt new file mode 100644 index 0000000..2673b8b --- /dev/null +++ b/src/facile.txt @@ -0,0 +1,100 @@ +ARBRE +LIVRE +POMME +CHAIR +TABLE +CHIEN +CHAT +VACHE +CHEVAL +PORTE +MUR +TOIT +LUNE +SOLEIL +MARE +NEIGE +GLACE +FLEUR +ROSE +BLEUET +ORANGE +BANANE +TOMATE +CITRON +PAPAYE +RAISIN +MANGUE +CERISE +OLIVE +PIMENT +SUCRE +SEL +POIVRE +MOUTON +COQ +POULE +LAPIN +AIGLE +TIGRE +LION +ZEBRE +SINGE +PANDA +KOALA +RENARD +OURS +CRABE +POISSON +REKIN +DAUPHIN +BALEINE +PLUIE +VENT +FEU +TERRE +NUAGE +ORAGE +PENTE +MER +RIVAGE +RIVIERE +ETANG +PLAINE +COLLINE +VALLEE +ROCHER +SABLE +PRAIRIE +BOIS +FORET +GIVRE +CAVERNE +CERCLE +ANGLE +CARRE +CUBE +SPHERE +POINT +TRAIT +CHEMIN +ROUTE +RUE +VILLE +VILLAGE +PAYS +MONDE +ETOILE +GALAXIE +COSMOS +TEMPLE +CHAPELLE +JARDIN +FLECHE +ECUREUIL +COUSIN +AMIS +ENNEMI +VILAIN +COQUIN +VOYOU \ No newline at end of file diff --git a/src/functions.c b/src/functions.c new file mode 100644 index 0000000..1c018cb --- /dev/null +++ b/src/functions.c @@ -0,0 +1,49 @@ +#include "functions.h" +#include +#include + +char choose_letter() { + char letter; + printf("Entrez une lettre : "); + scanf(" %c", &letter); + printf("Vous avez choisi la lettre '%c'\n", letter); + return letter; +} + +int word_size(const char *fullWord) { + int size = 0; + while (fullWord[size] != '\0') { + size++; + } + return size; +} + +int letter_occurrence(char letter, const char *fullWord) { + int wordsize = word_size(fullWord); + int letterOccurrence = 0; + + for (int i = 0; i < wordsize; i++) { + if (fullWord[i] == letter) { + letterOccurrence++; + } + } + + if (letterOccurrence == 0) { + printf("La lettre '%c' n'apparait pas dans le mot.\n", letter); + } + + return letterOccurrence; +} + +void position_letter(char letter, const char *fullWord, char *partialWord) { + int wordsize = word_size(fullWord); + for (int i = 0; i < wordsize; i++) { + if (fullWord[i] == letter) { + partialWord[i] = letter; + } + } +} + +int has_won(const char *fullWord, const char *partialWord) { + return strcmp(fullWord, partialWord) == 0; +} diff --git a/src/functions.h b/src/functions.h new file mode 100644 index 0000000..7da9d18 --- /dev/null +++ b/src/functions.h @@ -0,0 +1,12 @@ +#ifndef FUNCTIONS_H +#define FUNCTIONS_H + +#define LIFES 8 + +char choose_letter(); +int word_size(const char *fullWord); +int letter_occurrence(char letter, const char *fullWord); +void position_letter(char letter, const char *fullWord, char *partialWord); +int has_won(const char *fullWord, const char *partialWord); + +#endif diff --git a/src/getfuncs.c b/src/getfuncs.c new file mode 100644 index 0000000..988d7c5 --- /dev/null +++ b/src/getfuncs.c @@ -0,0 +1,44 @@ +#include "getfuncs.h" +#include +#include +#include +#include + +int getFileLength(const char *filename) { + FILE* stream = fopen(filename, "r"); + if (!stream) return -1; + + int file_length = 0; + char buffer[128]; + while (fgets(buffer, sizeof(buffer), stream)) { + file_length++; + } + + fclose(stream); + return file_length; +} + +int fetchWord(const char *filename, char *fullWord, int file_length) { + if (file_length <= 0) return -1; + + srand(time(NULL)); + int random_line = rand() % file_length; + + FILE* stream = fopen(filename, "r"); + if (!stream) return -1; + + int current = 0; + while (fgets(fullWord, 128, stream)) { + if (current == random_line) { + // Retirer le '\n' si présent + char *newline = strchr(fullWord, '\n'); + if (newline) *newline = '\0'; + fclose(stream); + return 0; + } + current++; + } + + fclose(stream); + return -1; +} diff --git a/src/getfuncs.h b/src/getfuncs.h new file mode 100644 index 0000000..cd199b9 --- /dev/null +++ b/src/getfuncs.h @@ -0,0 +1,7 @@ +#ifndef GETFUNCS_H +#define GETFUNCS_H + +int getFileLength(const char *filename); +int fetchWord(const char *filename, char *fullWord, int file_length); + +#endif diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..bd5852e --- /dev/null +++ b/src/main.c @@ -0,0 +1,61 @@ +#include +#include +#include "functions.h" +#include "getfuncs.h" + +void play_game(const char *filename) { + char fullWord[128]; + int flength = getFileLength(filename); + if (fetchWord(filename, fullWord, flength) != 0) { + printf("Erreur de lecture du fichier.\n"); + return; + } + + int size = word_size(fullWord); + char partialWord[size + 1]; + for (int i = 0; i < size; i++) partialWord[i] = '_'; + partialWord[size] = '\0'; + + int lifes = LIFES; + int won = 0; + + printf("Le mot a deviner contient %d lettres.\n", size); + + while (lifes > 0 && !won) { + printf("\nMot actuel : %s\nVies restantes : %d\n", partialWord, lifes); + char letter = choose_letter(); + int occurrence = letter_occurrence(letter, fullWord); + + if (occurrence > 0) { + position_letter(letter, fullWord, partialWord); + } else { + lifes--; + } + + if (has_won(fullWord, partialWord)) won = 1; + } + + if (won) printf("\nFelicitations ! Vous avez trouve le mot : %s\n", fullWord); + else printf("\nVous avez perdu ! Le mot etait : %s\n", fullWord); +} + +void play_hard_mode() { + printf("Mode difficile : vous devez deviner deux mots !\n"); + play_game("facile.txt"); + play_game("moyen.txt"); +} + +int main() { + int choice; + printf("Choisissez le mode :\n1 - Facile\n2 - Moyen\n3 - Difficile\n> "); + scanf("%d", &choice); + + switch(choice) { + case 1: play_game("facile.txt"); break; + case 2: play_game("moyen.txt"); break; + case 3: play_hard_mode(); break; + default: printf("Mode invalide.\n"); + } + + return 0; +} diff --git a/src/moyen.txt b/src/moyen.txt new file mode 100644 index 0000000..6794c48 --- /dev/null +++ b/src/moyen.txt @@ -0,0 +1,100 @@ +ORDINATEUR +PROGRAMME +TELEPHONE +CARNETAGE +UNIVERSITE +HABITATION +BIBLIOTHEQUE +MICROPHONE +NAVIGATEUR +CONDUCTEUR +VOYAGEURS +CONSTRUCTEUR +CHOCOLATERIE +APPARTEMENT +RESTAURANT +IMPRIMERIE +MOUSTACHES +CAMPAGNARD +INVENTAIRE +EXPLORATEUR +COMPAGNON +MATHEMATICS +ASTRONAUTE +ARCHITECTE +MECANICIEN +CHIRURGIEN +ELEPHANTES +HOSPITALES +MONTAGNES +DESERTIQUE +HUMANISME +TROUBADOUR +VOYAGEUSES +CROCODILES +DINOSAURES +HERISSONNE +CULTIVATEUR +PLANTATION +CROISSANCE +DECORATION +TRADITION +ORGANISATEUR +DEVELOPPEUR +INFORMATIQUE +AUTOROUTES +CARTOGRAPHIE +GEOGRAPHIE +HISTORIQUE +LUMINOSITE +TRANSPORTEUR +NAVIGATIONS +IMAGINATION +CITADINITE +POPULATION +MARCHANDISE +ECOLOGISTE +BOTANISTES +ZOOLOGIQUE +HARMONIEUX +MEDITATION +RESISTANCE +INSPIRATION +INNOVATION +CONDITION +SUPERVISEUR +SPECTATEURS +ILLUMINATION +PLATEFORME +PERSPECTIVE +CALCULATEUR +OBSERVATEUR +ALGORITHME +EDUCATEURS +SOUVERAINE +PARLEMENTS +MINISTREES +ACROBATIES +MUSICIENNE +DIRECTION +HORIZONTAL +VERTICALES +REVOLUTION +SCIENTIFIQUE +EXPERIENCE +CONNAISSANCE +LABORATOIRE +ELECTRICIEN +MAGNIFIQUE +COLLECTEURS +DETERMINANT +FASCINANTS +HABITUATION +DISPERSION +FRATERNITE +INTEGRITES +RESPONSABLE +DEPLACEMENT +CONCUBINE +EPHEMERE +SALOPARD \ No newline at end of file diff --git a/src/pendu b/src/pendu new file mode 100755 index 0000000000000000000000000000000000000000..03a8b9ccbbbeceb4c66709fcce1c2a1b4b61ff66 GIT binary patch literal 16368 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 literal 0 HcmV?d00001 -- 2.51.0