diff --git a/getfuncs.c b/getfuncs.c new file mode 100644 index 0000000..44392cc --- /dev/null +++ b/getfuncs.c @@ -0,0 +1,80 @@ +#include +#include +#include + +/* + +*/ +int getFileLength(){ + /*variables*/ + FILE* stream; + int file_length = 0; + char* line = NULL; + size_t length = 0; + ssize_t read; + + /*prog*/ + stream = fopen("wordbank.txt", "r"); + if (stream == NULL){ + return EXIT_FAILURE; + } + + while((read = getline(&line, &length, stream)) != -1){ + file_length++; + } + + fclose(stream); + return file_length-1; +} + +/* + +*/ +int fetchWord(char* fullword, int file_length){ + /*variables*/ + FILE* stream; + int random = (rand() * time(NULL)) % (file_length); + char read[8]; + unsigned int counter = 0; + int char_size = (int) sizeof(char); + int line=0; + int offset=0; + + /*prog*/ + printf("%d\n", random); + stream = fopen("wordbank.txt", "r"); + if (stream == NULL){ + return -1; + } + + while((!feof(stream))&&(offset!=random)){ + fread(read, sizeof(char), 1, stream); + if(*read=='\n'){ + offset++; + } + } + + *read=' '; + + while(*read!='\n'){ + fread(read, sizeof(char), 1, stream); + fullword[counter] = *read; + counter++; + } + + fclose(stream); + return 0; +} + + +int main(void){ + int flength; + char fullWord[128]; + + flength = getFileLength(); + if(fetchWord(fullWord, flength)!=-1){ + printf("%s", fullWord); + } + + return EXIT_SUCCESS; +} \ No newline at end of file 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 0000000..03a8b9c Binary files /dev/null and b/src/pendu differ diff --git a/src_karamosr/karamosr.c b/src_karamosr/karamosr.c new file mode 100644 index 0000000..78e6954 --- /dev/null +++ b/src_karamosr/karamosr.c @@ -0,0 +1,103 @@ +#include +#include +#include + +#define LIFES 8 // Nombre de vies au debut du jeu + +// Fonction pour lire une lettre proposee par le joueur +char choose_letter() { + char letter; + printf("Entrez une lettre : "); + scanf(" %c", &letter); // Le " " avant %c evite de lire un retour chariot + printf("Vous avez choisi la lettre '%c'\n", letter); + return letter; +} + +// Fonction pour calculer la taille d'une chaine (similaire a strlen) +int word_size(const char *fullWord) { + int size = 0; + while (fullWord[size] != '\0') { + size++; + } + return size; +} + +// Verifie combien de fois la lettre apparait dans fullWord +int letter_occurrence(char letter, const char *fullWord) { + int wordsize = wor_size(fullWord); + int letterOccurrence = 0; + + for (int i = 0; i < wordsize; i++) { + if (fullWord[i] == letter) { // == pour comparer + letterOccurrence++; + } + } + + if (letterOccurrence == 0) { + printf("La lettre '%c' n'apparait pas dans le mot.\n", letter); + } + + return letterOccurrence; +} + +// Remplace les '_' par la lettre trouvee dans partialWord +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; + } + } +} + +// Verifie si le joueur a gagne (si partialWord == fullWord) +int has_won(const char *fullWord, const char *partialWord) { + return strcmp(fullWord, partialWord) == 0; // 1 si egal, 0 sinon +} + + + +int main() { + char fullWord[] = "ordinateur"; // Le mot a deviner + int size = word_size(fullWord); + char partialWord[size + 1]; // +1 pour le '\0' + + // Initialiser partialWord avec des '_' + for (int i = 0; i < size; i++) { + partialWord[i] = '_'; + } + partialWord[size] = '\0'; + + int lifes = LIFES; + int won = 0; + + printf("Bienvenue au jeu du pendu !\n"); + printf("Le mot a deviner contient %d lettres.\n", size); + + while (lifes > 0 && !won) { + printf("\nMot actuel : %s\n", partialWord); + printf("Vies restantes : %d\n", 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("\n Felicitations ! Vous avez trouve le mot : %s\n", fullWord); + } else { + printf("\n Vous avez perdu ! Le mot etait : %s\n", fullWord); + } + + return 0; +} diff --git a/wordbank.txt b/wordbank.txt new file mode 100644 index 0000000..135d681 --- /dev/null +++ b/wordbank.txt @@ -0,0 +1,7 @@ +anticonstitutionnellement +éclésiastique +abandonner +seringue +vocifération +éponyme +