forked from menault/TD3_DEV51_Qualite_Algo
		
	Ajout chrono et score
This commit is contained in:
		
							
								
								
									
										28
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "tasks": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "type": "cppbuild",
 | 
				
			||||||
 | 
					            "label": "C/C++: gcc build active file",
 | 
				
			||||||
 | 
					            "command": "/usr/bin/gcc",
 | 
				
			||||||
 | 
					            "args": [
 | 
				
			||||||
 | 
					                "-fdiagnostics-color=always",
 | 
				
			||||||
 | 
					                "-g",
 | 
				
			||||||
 | 
					                "${file}",
 | 
				
			||||||
 | 
					                "-o",
 | 
				
			||||||
 | 
					                "${fileDirname}/${fileBasenameNoExtension}"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "options": {
 | 
				
			||||||
 | 
					                "cwd": "${fileDirname}"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "problemMatcher": [
 | 
				
			||||||
 | 
					                "$gcc"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "group": {
 | 
				
			||||||
 | 
					                "kind": "build",
 | 
				
			||||||
 | 
					                "isDefault": true
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "detail": "Task generated by Debugger."
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "version": "2.0.0"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										125
									
								
								pendu.c
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								pendu.c
									
									
									
									
									
								
							@@ -2,24 +2,18 @@
 | 
				
			|||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <time.h>
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <signal.h>
 | 
				
			||||||
 | 
					#include <ctype.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAX_WORDS 14
 | 
					#define MAX_WORDS 14
 | 
				
			||||||
#define MAX_TRIES 6
 | 
					#define MAX_TRIES 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *words[MAX_WORDS] = {
 | 
					const char *words[MAX_WORDS] = {
 | 
				
			||||||
    "programmation",
 | 
					    "programmation", "ordinateur", "langage", "jeu", 
 | 
				
			||||||
    "ordinateur",
 | 
					    "algorithmique", "fontainebleau", "koala", 
 | 
				
			||||||
    "langage",
 | 
					    "anticonstitutionnellement", "code", "canard", 
 | 
				
			||||||
    "jeu",
 | 
					    "gyroscope", "periclitation", "susurrer", 
 | 
				
			||||||
    "algorithmique",
 | 
					 | 
				
			||||||
    "fontainebleau",
 | 
					 | 
				
			||||||
    "koala",
 | 
					 | 
				
			||||||
    "anticonstitutionnellement",
 | 
					 | 
				
			||||||
    "code",
 | 
					 | 
				
			||||||
    "canard",
 | 
					 | 
				
			||||||
    "gyroscope",
 | 
					 | 
				
			||||||
    "periclitation",
 | 
					 | 
				
			||||||
    "susurrer",
 | 
					 | 
				
			||||||
    "eclesiastique"
 | 
					    "eclesiastique"
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,47 +29,92 @@ void display_hangman(int tries) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void alarm_handler(int sig) {
 | 
				
			||||||
 | 
					    printf("\nTrop tard ! Vous avez dépassé les 30 secondes.\n");
 | 
				
			||||||
 | 
					    exit(1);  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
    srand(time(NULL));
 | 
					    srand(time(NULL));
 | 
				
			||||||
    const char *word = words[rand() % MAX_WORDS];
 | 
					 | 
				
			||||||
    int word_length = strlen(word);
 | 
					 | 
				
			||||||
    char guessed[word_length];
 | 
					 | 
				
			||||||
    int tries = 0;
 | 
					 | 
				
			||||||
    int guessed_correctly = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i = 0; i < word_length; i++) {
 | 
					    while (1) {
 | 
				
			||||||
        guessed[i] = '_';
 | 
					        const char *word = words[rand() % MAX_WORDS];
 | 
				
			||||||
    }
 | 
					        int word_length = strlen(word);
 | 
				
			||||||
    guessed[word_length] = '\0';
 | 
					        char guessed[word_length + 1];
 | 
				
			||||||
 | 
					        int tries = 0;
 | 
				
			||||||
    while (tries < MAX_TRIES && guessed_correctly < word_length) {
 | 
					        int guessed_correctly = 0;
 | 
				
			||||||
        printf("\nMot à deviner : %s\n", guessed);
 | 
					        int score = 0;
 | 
				
			||||||
        display_hangman(tries);
 | 
					 | 
				
			||||||
        char guess;
 | 
					 | 
				
			||||||
        printf("Entrez une lettre : ");
 | 
					 | 
				
			||||||
        scanf(" %c", &guess);
 | 
					 | 
				
			||||||
        int found = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (int i = 0; i < word_length; i++) {
 | 
					        for (int i = 0; i < word_length; i++) {
 | 
				
			||||||
            if (word[i] == guess) {
 | 
					            guessed[i] = '_';
 | 
				
			||||||
                if (guessed[i] == '_') {
 | 
					        }
 | 
				
			||||||
                    guessed[i] = guess;
 | 
					        guessed[word_length] = '\0';
 | 
				
			||||||
                    guessed_correctly++;
 | 
					
 | 
				
			||||||
 | 
					        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;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                found = 1;
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!found) {
 | 
				
			||||||
 | 
					                tries++;
 | 
				
			||||||
 | 
					                score -= 200; // Malus pour une mauvaise réponse
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!found) {
 | 
					        if (guessed_correctly == word_length) {
 | 
				
			||||||
            tries++;
 | 
					            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);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (guessed_correctly == word_length) {
 | 
					        printf("Votre score est : %d\n", score);
 | 
				
			||||||
        printf("Félicitations ! Vous avez deviné le mot : %s\n", word);
 | 
					
 | 
				
			||||||
    } else {
 | 
					        char play_again;
 | 
				
			||||||
        printf("Désolé, vous avez perdu. Le mot était : %s\n", word);
 | 
					        printf("Voulez-vous jouer à nouveau ? (o/n) : ");
 | 
				
			||||||
        display_hangman(MAX_TRIES);
 | 
					        scanf(" %c", &play_again);
 | 
				
			||||||
 | 
					        if (tolower(play_again) != 'o') {
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user