forked from menault/TD3_DEV51_Qualite_Algo
		
	a essayer
This commit is contained in:
		
							
								
								
									
										7
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
|     // Use IntelliSense to learn about possible attributes. | ||||
|     // Hover to view descriptions of existing attributes. | ||||
|     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||
|     "version": "0.2.0", | ||||
|     "configurations": [] | ||||
| } | ||||
							
								
								
									
										20
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @@ -17,6 +17,26 @@ | ||||
|             "problemMatcher": [ | ||||
|                 "$gcc" | ||||
|             ], | ||||
|             "group": "build", | ||||
|             "detail": "Task generated by Debugger." | ||||
|         }, | ||||
|         { | ||||
|             "type": "cppbuild", | ||||
|             "label": "C/C++: cl.exe build active file", | ||||
|             "command": "cl.exe", | ||||
|             "args": [ | ||||
|                 "/Zi", | ||||
|                 "/EHsc", | ||||
|                 "/nologo", | ||||
|                 "/Fe${fileDirname}\\${fileBasenameNoExtension}.exe", | ||||
|                 "${file}" | ||||
|             ], | ||||
|             "options": { | ||||
|                 "cwd": "${fileDirname}" | ||||
|             }, | ||||
|             "problemMatcher": [ | ||||
|                 "$msCompile" | ||||
|             ], | ||||
|             "group": { | ||||
|                 "kind": "build", | ||||
|                 "isDefault": true | ||||
|   | ||||
							
								
								
									
										199
									
								
								pendu.c
									
									
									
									
									
								
							
							
						
						
									
										199
									
								
								pendu.c
									
									
									
									
									
								
							| @@ -17,6 +17,7 @@ const char *words[MAX_WORDS] = { | ||||
|     "eclesiastique" | ||||
| }; | ||||
|  | ||||
| // Fonction pour afficher le pendu | ||||
| void display_hangman(int tries) { | ||||
|     switch (tries) { | ||||
|         case 0: printf("  ----\n  |  |\n  |\n  |\n  |\n  |\n--------\n"); break; | ||||
| @@ -29,85 +30,145 @@ void display_hangman(int tries) { | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Fonction pour gérer le signal d'alarme | ||||
| void alarm_handler(int sig) { | ||||
|     printf("\nTrop tard ! Vous avez dépassé les 30 secondes.\n"); | ||||
|     exit(1);   | ||||
| } | ||||
|  | ||||
| // Fonction pour filtrer les mots selon la taille maximale | ||||
| int filter_words(const char *filtered_words[], int max_word_length) { | ||||
|     int count = 0; | ||||
|     for (int i = 0; i < MAX_WORDS; i++) { | ||||
|         if (strlen(words[i]) <= max_word_length) { | ||||
|             filtered_words[count++] = words[i]; | ||||
|         } | ||||
|     } | ||||
|     return count; | ||||
| } | ||||
|  | ||||
| // Fonction pour choisir plusieurs mots uniques aléatoirement | ||||
| void choose_random_words(const char *filtered_words[], int num_filtered_words, char *result, int max_length) { | ||||
|     int total_length = 0; | ||||
|     while (total_length < max_length) { | ||||
|         int index = rand() % num_filtered_words; | ||||
|         const char *chosen_word = filtered_words[index]; | ||||
|          | ||||
|         if (total_length + strlen(chosen_word) + 1 > max_length) { | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         strcat(result, chosen_word); | ||||
|         total_length += strlen(chosen_word); | ||||
|  | ||||
|         if (total_length < max_length) { | ||||
|             strcat(result, " "); | ||||
|             total_length++; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Fonction pour initialiser le mot deviné avec des underscores | ||||
| void initialize_guessed_word(char guessed[], const char *word, int word_length) { | ||||
|     for (int i = 0; i < word_length; i++) { | ||||
|         guessed[i] = (word[i] == ' ') ? ' ' : '_';  // Gérer les espaces | ||||
|     } | ||||
|     guessed[word_length] = '\0'; | ||||
| } | ||||
|  | ||||
| // Fonction pour traiter chaque saisie de l'utilisateur | ||||
| int handle_guess(char guess, const char *word, char guessed[], int word_length, int *score) { | ||||
|     int found = 0; | ||||
|     clock_t start_time = clock(); | ||||
|  | ||||
|     for (int i = 0; i < word_length; i++) { | ||||
|         if (word[i] == guess) { | ||||
|             if (guessed[i] == '_') { | ||||
|                 guessed[i] = guess; | ||||
|                 found = 1; | ||||
|                 *score += 1000 - (clock() - start_time) * 1000 / CLOCKS_PER_SEC; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return found; | ||||
| } | ||||
|  | ||||
| // Fonction principale pour jouer une partie | ||||
| int play_game(const char *word, int word_length) { | ||||
|     char guessed[word_length + 1]; | ||||
|     int tries = 0; | ||||
|     int guessed_correctly = 0; | ||||
|     int score = 0; | ||||
|  | ||||
|     initialize_guessed_word(guessed, word, word_length); | ||||
|  | ||||
|     while (tries < MAX_TRIES && guessed_correctly < word_length) { | ||||
|         printf("\nMot à deviner : %s\n", guessed); | ||||
|         display_hangman(tries); | ||||
|         char guess; | ||||
|  | ||||
|         alarm(30); | ||||
|         printf("Entrez une lettre (ou 'q' pour quitter) : "); | ||||
|         scanf(" %c", &guess); | ||||
|         alarm(0); | ||||
|  | ||||
|         if (guess == 'q') { | ||||
|             printf("Vous avez quitté le jeu. À bientôt !\n"); | ||||
|             return 0; | ||||
|         } | ||||
|  | ||||
|         if (!isalpha(guess)) { | ||||
|             printf("Veuillez entrer une lettre valide.\n"); | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
|         guess = tolower(guess); | ||||
|         int found = handle_guess(guess, word, guessed, word_length, &score); | ||||
|  | ||||
|         if (!found) { | ||||
|             tries++; | ||||
|             score -= 200;  // Malus pour une mauvaise réponse | ||||
|         } else { | ||||
|             guessed_correctly += found; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (guessed_correctly == word_length) { | ||||
|         printf("Félicitations ! Vous avez deviné le mot : %s\n", word); | ||||
|         if (tries < 3) { | ||||
|             score += 500; | ||||
|         } | ||||
|     } else { | ||||
|         printf("Désolé, vous avez perdu. Le mot était : %s\n", word); | ||||
|         display_hangman(MAX_TRIES); | ||||
|     } | ||||
|  | ||||
|     printf("Votre score est : %d\n", score); | ||||
|     return score; | ||||
| } | ||||
|  | ||||
| int main() { | ||||
|     srand(time(NULL)); | ||||
|  | ||||
|     while (1) { | ||||
|         const char *word = words[rand() % MAX_WORDS]; | ||||
|         int max_word_length; | ||||
|         printf("Entrez la taille maximale des mots à deviner : "); | ||||
|         scanf("%d", &max_word_length); | ||||
|  | ||||
|         const char *filtered_words[MAX_WORDS]; | ||||
|         int num_filtered_words = filter_words(filtered_words, max_word_length); | ||||
|  | ||||
|         if (num_filtered_words == 0) { | ||||
|             printf("Aucun mot ne correspond à cette taille maximale.\n"); | ||||
|             continue; | ||||
|         } | ||||
|  | ||||
|         char word[256] = ""; | ||||
|         choose_random_words(filtered_words, num_filtered_words, word, max_word_length); | ||||
|         int word_length = strlen(word); | ||||
|         char guessed[word_length + 1]; | ||||
|         int tries = 0; | ||||
|         int guessed_correctly = 0; | ||||
|         int score = 0; | ||||
|  | ||||
|         for (int i = 0; i < word_length; i++) { | ||||
|             guessed[i] = '_'; | ||||
|         } | ||||
|         guessed[word_length] = '\0'; | ||||
|  | ||||
|         signal(SIGALRM, alarm_handler);  | ||||
|  | ||||
|         while (tries < MAX_TRIES && guessed_correctly < word_length) { | ||||
|             printf("\nMot à deviner : %s\n", guessed); | ||||
|             display_hangman(tries); | ||||
|             char guess; | ||||
|  | ||||
|             alarm(30);  | ||||
|             printf("Entrez une lettre (ou 'q' pour quitter) : "); | ||||
|             scanf(" %c", &guess); | ||||
|             alarm(0); | ||||
|  | ||||
|             if (guess == 'q') { | ||||
|                 printf("Vous avez quitté le jeu. À bientôt !\n"); | ||||
|                 return 0; | ||||
|             } | ||||
|  | ||||
|             if (!isalpha(guess)) { | ||||
|                 printf("Veuillez entrer une lettre valide.\n"); | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             guess = tolower(guess); | ||||
|             int found = 0; | ||||
|  | ||||
|             // Démarrer le chronomètre | ||||
|             clock_t start_time = clock(); | ||||
|  | ||||
|             for (int i = 0; i < word_length; i++) { | ||||
|                 if (word[i] == guess) { | ||||
|                     if (guessed[i] == '_') { | ||||
|                         guessed[i] = guess; | ||||
|                         guessed_correctly++; | ||||
|                         // Calculer le score basé sur le temps | ||||
|                         score += 1000 - (clock() - start_time) * 1000 / CLOCKS_PER_SEC; // Bonus pour le temps | ||||
|                     } | ||||
|                     found = 1; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (!found) { | ||||
|                 tries++; | ||||
|                 score -= 200; // Malus pour une mauvaise réponse | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         if (guessed_correctly == word_length) { | ||||
|             printf("Félicitations ! Vous avez deviné le mot : %s\n", word); | ||||
|             // Bonus si trouvé en moins de 3 essais | ||||
|             if (tries < 3) { | ||||
|                 score += 500; | ||||
|             } | ||||
|         } else { | ||||
|             printf("Désolé, vous avez perdu. Le mot était : %s\n", word); | ||||
|             display_hangman(MAX_TRIES); | ||||
|         } | ||||
|  | ||||
|         printf("Votre score est : %d\n", score); | ||||
|         printf("%s",word) | ||||
|         int score = play_game(word, word_length); | ||||
|  | ||||
|         char play_again; | ||||
|         printf("Voulez-vous jouer à nouveau ? (o/n) : "); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user