diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7169fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.log +*.out +.vscode diff --git a/pendu.c b/pendu.c index 1b0cfd6..8154550 100644 --- a/pendu.c +++ b/pendu.c @@ -2,6 +2,7 @@ #include #include #include +#include #define MAX_WORDS 14 #define MAX_TRIES 6 @@ -20,22 +21,68 @@ const char *words[MAX_WORDS] = { "gyroscope", "periclitation", "susurrer", - "eclesiastique" -}; + "eclesiastique"}; -void display_hangman(int tries) { - switch (tries) { - case 0: printf(" ----\n | |\n |\n |\n |\n |\n--------\n"); break; - case 1: printf(" ----\n | |\n | O\n |\n |\n |\n--------\n"); break; - case 2: printf(" ----\n | |\n | O\n | |\n |\n |\n--------\n"); break; - case 3: printf(" ----\n | |\n | O\n | /|\n |\n |\n--------\n"); break; - case 4: printf(" ----\n | |\n | O\n | /|\\\n |\n |\n--------\n"); break; - case 5: printf(" ----\n | |\n | O\n | /|\\\n | /\n |\n--------\n"); break; - case 6: printf(" ----\n | |\n | O\n | /|\\\n | / \\\n |\n--------\n"); break; +void display_hangman(int tries) +{ + switch (tries) + { + case 0: + printf(" ----\n | |\n |\n |\n |\n |\n--------\n"); + break; + case 1: + printf(" ----\n | |\n | O\n |\n |\n |\n--------\n"); + break; + case 2: + printf(" ----\n | |\n | O\n | |\n |\n |\n--------\n"); + break; + case 3: + printf(" ----\n | |\n | O\n | /|\n |\n |\n--------\n"); + break; + case 4: + printf(" ----\n | |\n | O\n | /|\\\n |\n |\n--------\n"); + break; + case 5: + printf(" ----\n | |\n | O\n | /|\\\n | /\n |\n--------\n"); + break; + case 6: + printf(" ----\n | |\n | O\n | /|\\\n | / \\\n |\n--------\n"); + break; } } -int main() { +// Add the game's stats to a file +void add_to_logs(const char *word, int tries, int guessed_correctly, bool won, char guessed[], double time_spent) +{ + FILE *log_file = fopen("pendu.log", "a"); + if (log_file == NULL) + { + printf("Error : Can't open file.\n"); + return; + } + fprintf(log_file, "Log of : %s\n", __DATE__); + fprintf(log_file, "Guessed correctly : %d\n", guessed_correctly); + fprintf(log_file, "Total tries : %d\n", tries + guessed_correctly); + fprintf(log_file, "Guessed letters : %s\n", guessed); + fprintf(log_file, "Word : %s\n", word); + + if (won) + { + fprintf(log_file, "Result : Win\n"); + } + else + { + fprintf(log_file, "Result : Lose\n"); + } + + fprintf(log_file, "Time spent : %fsec\n\n", time_spent); + + fclose(log_file); +} + +int main() +{ + time_t start = time(NULL); srand(time(NULL)); const char *word = words[rand() % MAX_WORDS]; int word_length = strlen(word); @@ -43,12 +90,14 @@ int main() { int tries = 0; int guessed_correctly = 0; - for (int i = 0; i < word_length; i++) { + for (int i = 0; i < word_length; i++) + { guessed[i] = '_'; } guessed[word_length] = '\0'; - while (tries < MAX_TRIES && guessed_correctly < word_length) { + while (tries < MAX_TRIES && guessed_correctly < word_length) + { printf("\nMot à deviner : %s\n", guessed); display_hangman(tries); char guess; @@ -56,9 +105,12 @@ int main() { scanf(" %c", &guess); int found = 0; - for (int i = 0; i < word_length; i++) { - if (word[i] == guess) { - if (guessed[i] == '_') { + for (int i = 0; i < word_length; i++) + { + if (word[i] == guess) + { + if (guessed[i] == '_') + { guessed[i] = guess; guessed_correctly++; } @@ -66,15 +118,23 @@ int main() { } } - if (!found) { + if (!found) + { tries++; } } - if (guessed_correctly == word_length) { + time_t end = time(NULL); + double time_spent = difftime(end, start); + if (guessed_correctly == word_length) + { printf("Félicitations ! Vous avez deviné le mot : %s\n", word); - } else { + add_to_logs(word, tries, guessed_correctly, 1, guessed, time_spent); + } + else + { printf("Désolé, vous avez perdu. Le mot était : %s\n", word); + add_to_logs(word, tries, guessed_correctly, 0, guessed, time_spent); display_hangman(MAX_TRIES); }