diff --git a/pendu.c b/pendu.c index 1b0cfd6..5e6eb93 100644 --- a/pendu.c +++ b/pendu.c @@ -35,16 +35,54 @@ void display_hangman(int tries) { } } +void choose_words(int max_length, char *final_word) { + int total_length = 0; + int chosen[MAX_WORDS] = {0}; // Pour suivre les mots déjà choisis + int attemps = 0; + int max_attemps = 2 * MAX_WORDS; + + while (total_length < max_length && attemps < max_attemps) { + int index = rand() % MAX_WORDS; + + // Si ce mot est déjà choisi ou dépasse la longueur maximale, on l'ignore + if (chosen[index] || total_length + strlen(words[index]) + (total_length > 0 ? 1 : 0) > max_length) { + attemps++; + continue; + } + + // Si c'est le premier mot, on le copie directement, sinon on ajoute un espace et le mot + if (total_length > 0) { + strcat(final_word, " "); // Ajouter un espace entre les mots + } + strcat(final_word, words[index]); + + total_length += strlen(words[index]) + (total_length > 0 ? 1 : 0); // Inclure l'espace si ce n'est pas le premier mot + chosen[index] = 1; // Marquer ce mot comme choisi + } +} + int main() { srand(time(NULL)); - const char *word = words[rand() % MAX_WORDS]; - int word_length = strlen(word); + + // Demander la taille maximale pour le mot + int max_length; + printf("Choisissez la taille maximale du mot à deviner : "); + scanf("%d", &max_length); + + // Créer la chaîne finale à deviner, basée sur la taille choisie + char final_word[256] = ""; // Un buffer assez grand pour contenir plusieurs mots + + // Choisir un ou plusieurs mots pour constituer le mot final + choose_words(max_length, final_word); + + int word_length = strlen(final_word); char guessed[word_length]; int tries = 0; int guessed_correctly = 0; + // Initialiser la chaîne des lettres devinées avec des '_' for (int i = 0; i < word_length; i++) { - guessed[i] = '_'; + guessed[i] = (final_word[i] == ' ') ? ' ' : '_'; // Conserver les espaces dans guessed } guessed[word_length] = '\0'; @@ -56,25 +94,31 @@ int main() { scanf(" %c", &guess); int found = 0; + // Vérifier si la lettre devinée est dans le mot final for (int i = 0; i < word_length; i++) { - if (word[i] == guess) { - if (guessed[i] == '_') { - guessed[i] = guess; - guessed_correctly++; - } + if (final_word[i] == guess && guessed[i] == '_') { + guessed[i] = guess; found = 1; } } + // Le comptage des lettres correctes doit exclure les espaces + guessed_correctly = 0; + for (int i = 0; i < word_length; i++) { + if (guessed[i] != '_' && final_word[i] != ' ') { + guessed_correctly++; + } + } + if (!found) { tries++; } } if (guessed_correctly == word_length) { - printf("Félicitations ! Vous avez deviné le mot : %s\n", word); + printf("Félicitations ! Vous avez deviné le mot : %s\n", final_word); } else { - printf("Désolé, vous avez perdu. Le mot était : %s\n", word); + printf("Désolé, vous avez perdu. Le mot était : %s\n", final_word); display_hangman(MAX_TRIES); } diff --git a/pendu.exe b/pendu.exe new file mode 100644 index 0000000..06e50f7 Binary files /dev/null and b/pendu.exe differ