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"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										69
									
								
								pendu.c
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								pendu.c
									
									
									
									
									
								
							@@ -2,24 +2,18 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
 | 
			
		||||
#define MAX_WORDS 14
 | 
			
		||||
#define MAX_TRIES 6
 | 
			
		||||
 | 
			
		||||
const char *words[MAX_WORDS] = {
 | 
			
		||||
    "programmation",
 | 
			
		||||
    "ordinateur",
 | 
			
		||||
    "langage",
 | 
			
		||||
    "jeu",
 | 
			
		||||
    "algorithmique",
 | 
			
		||||
    "fontainebleau",
 | 
			
		||||
    "koala",
 | 
			
		||||
    "anticonstitutionnellement",
 | 
			
		||||
    "code",
 | 
			
		||||
    "canard",
 | 
			
		||||
    "gyroscope",
 | 
			
		||||
    "periclitation",
 | 
			
		||||
    "susurrer",
 | 
			
		||||
    "programmation", "ordinateur", "langage", "jeu", 
 | 
			
		||||
    "algorithmique", "fontainebleau", "koala", 
 | 
			
		||||
    "anticonstitutionnellement", "code", "canard", 
 | 
			
		||||
    "gyroscope", "periclitation", "susurrer", 
 | 
			
		||||
    "eclesiastique"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -35,32 +29,62 @@ 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() {
 | 
			
		||||
    srand(time(NULL));
 | 
			
		||||
 | 
			
		||||
    while (1) {
 | 
			
		||||
        const char *word = words[rand() % MAX_WORDS];
 | 
			
		||||
        int word_length = strlen(word);
 | 
			
		||||
    char guessed[word_length];
 | 
			
		||||
        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;
 | 
			
		||||
        printf("Entrez une lettre : ");
 | 
			
		||||
 | 
			
		||||
            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;
 | 
			
		||||
                }
 | 
			
		||||
@@ -68,15 +92,30 @@ int main() {
 | 
			
		||||
 | 
			
		||||
            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);
 | 
			
		||||
 | 
			
		||||
        char play_again;
 | 
			
		||||
        printf("Voulez-vous jouer à nouveau ? (o/n) : ");
 | 
			
		||||
        scanf(" %c", &play_again);
 | 
			
		||||
        if (tolower(play_again) != 'o') {
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user