From 0ac6119bb3674289e7b24910466f2121741b4ac8 Mon Sep 17 00:00:00 2001 From: branco-g Date: Fri, 25 Oct 2024 15:39:23 +0200 Subject: [PATCH] main - 50 lignes --- .gitignore | 1 - pendu.c | 136 +++++++++++++++++++++++------------------------------ pendu.exe | Bin 147153 -> 147181 bytes 3 files changed, 59 insertions(+), 78 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index adb36c8..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.exe \ No newline at end of file diff --git a/pendu.c b/pendu.c index 8a6bf59..1fd6a81 100644 --- a/pendu.c +++ b/pendu.c @@ -3,26 +3,18 @@ #include #include +// Define constants for the maximum number of words and tries #define MAX_WORDS 14 #define MAX_TRIES 6 +// Array of words used in the game const char *words[MAX_WORDS] = { - "programmation", - "ordinateur", - "langage", - "jeu", - "algorithmique", - "fontainebleau", - "koala", - "anticonstitutionnellement", - "code", - "canard", - "gyroscope", - "periclitation", - "susurrer", - "eclesiastique" + "programmation", "ordinateur", "langage", "jeu", "algorithmique", + "fontainebleau", "koala", "anticonstitutionnellement", "code", + "canard", "gyroscope", "periclitation", "susurrer", "eclesiastique" }; +// Function to display the hangman figure based on the number of tries void display_hangman(int tries) { switch (tries) { case 0: printf(" ----\n | |\n |\n |\n |\n |\n--------\n"); break; @@ -35,83 +27,53 @@ void display_hangman(int tries) { } } +// Function to randomly choose words and concatenate them to create a puzzle word void choose_words(char *chosen_word, int max_length) { - int total_length = 0; - int used[MAX_WORDS] = {0}; // Array to mark used words - int word_index; - - chosen_word[0] = '\0'; // Initialize empty string + int total_length = 0, used[MAX_WORDS] = {0}, word_index; + chosen_word[0] = '\0'; + // Select words until the maximum word length is reached or exceeded while (total_length < max_length) { word_index = rand() % MAX_WORDS; - - // Ensure we do not exceed max_length or reuse a word if (!used[word_index] && total_length + strlen(words[word_index]) + (total_length > 0 ? 1 : 0) <= max_length) { - // Add a space if this isn't the first word - if (total_length > 0) { - strcat(chosen_word, " "); - total_length++; // Account for the space - } - - strcat(chosen_word, words[word_index]); // Add the word to the chosen word + if (total_length > 0) { strcat(chosen_word, " "); total_length++; } + strcat(chosen_word, words[word_index]); total_length += strlen(words[word_index]); - used[word_index] = 1; // Mark the word as used - - // If we're already at the exact length, break - if (total_length == max_length) { - break; - } + used[word_index] = 1; + if (total_length == max_length) break; } - // Break if no more suitable words can be found + // Check if all words that could fit are used int all_used = 1; for (int i = 0; i < MAX_WORDS; i++) { - if (!used[i] && total_length + strlen(words[i]) + 1 <= max_length) { - all_used = 0; - break; - } + if (!used[i] && total_length + strlen(words[i]) + 1 <= max_length) { all_used = 0; break; } } if (all_used) break; } } -int main() { - srand(time(NULL)); +// Function to play the hangman game +void play_game(const char *chosen_word, int word_length, int letters_to_guess) { + char guessed[word_length + 1]; + int tries = 0, guessed_correctly = 0; - int max_word_length; - printf("Choisissez la taille maximum du mot à deviner : "); - scanf("%d", &max_word_length); - - char chosen_word[max_word_length]; // String to store the chosen combination of words - choose_words(chosen_word, max_word_length); - - int word_length = strlen(chosen_word); - char guessed[word_length + 1]; // +1 for the null terminator - int tries = 0; - int guessed_correctly = 0; - int letters_to_guess = 0; // Total letters to guess (excluding spaces) - - // Initialize the guessed array and count the total number of letters to guess - for (int i = 0; i < word_length; i++) { - if (chosen_word[i] == ' ') { - guessed[i] = ' '; // Spaces are pre-revealed - } else { - guessed[i] = '_'; - letters_to_guess++; // Only count non-space characters - } - } + // Initialize guessed word display with underscores + for (int i = 0; i < word_length; i++) guessed[i] = (chosen_word[i] == ' ') ? ' ' : '_'; guessed[word_length] = '\0'; + // Main game loop, stops if max tries are reached or the word is guessed while (tries < MAX_TRIES && guessed_correctly < letters_to_guess) { - printf("\nMot à deviner : %s\n", guessed); + printf("\nWord to guess: %s\n", guessed); display_hangman(tries); + + // Get a letter guess from the player char guess; - printf("Entrez une lettre : "); + printf("Enter a letter: "); scanf(" %c", &guess); - int found = 0; - int already_revealed = 0; + + int found = 0, already_revealed = 0; - // Check if the guessed letter is in the word + // Check if the letter is in the word and update guessed word display for (int i = 0; i < word_length; i++) { if (chosen_word[i] == guess) { if (guessed[i] == '_') { @@ -119,23 +81,43 @@ int main() { guessed_correctly++; found = 1; } else { - already_revealed = 1; // The letter is already revealed + already_revealed = 1; } } } - // Only increment tries if the letter was not found and not already revealed - if (!found && !already_revealed) { - tries++; - } + // Increment tries if the letter was not found and not already revealed + if (!found && !already_revealed) tries++; } - if (guessed_correctly == letters_to_guess) { - printf("Félicitations ! Vous avez deviné le mot : %s\n", chosen_word); - } else { - printf("Désolé, vous avez perdu. Le mot était : %s\n", chosen_word); + // Display win or lose message based on game outcome + if (guessed_correctly == letters_to_guess) + printf("Congratulations! You've guessed the word: %s\n", chosen_word); + else { + printf("Sorry, you've lost. The word was: %s\n", chosen_word); display_hangman(MAX_TRIES); } +} +// Main function to start the game +int main() { + srand(time(NULL)); + int max_word_length; + + // Prompt user for maximum word length for the puzzle + printf("Enter the maximum word length to guess: "); + scanf("%d", &max_word_length); + + // Select a word within the specified length + char chosen_word[max_word_length]; + choose_words(chosen_word, max_word_length); + + // Calculate total letters to guess (excluding spaces) + int word_length = strlen(chosen_word), letters_to_guess = 0; + for (int i = 0; i < word_length; i++) + if (chosen_word[i] != ' ') letters_to_guess++; + + // Start the game with the chosen word + play_game(chosen_word, word_length, letters_to_guess); return 0; } diff --git a/pendu.exe b/pendu.exe index 97ad6fad91c48cee400fdb423ae66b1b3502ea27..1bfaaed9514947b13ce74402d277cb71b6aef7b0 100644 GIT binary patch delta 18270 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 A`~Uy|