From abd96239301205c648274a8ef74229158e991c80 Mon Sep 17 00:00:00 2001 From: nelet Date: Tue, 15 Oct 2024 11:19:32 +0200 Subject: [PATCH] ajout score --- a.out | Bin 16160 -> 16264 bytes pendu.c | 32 ++++++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/a.out b/a.out index 91c1674351b8fc8fd88fdb07debd21dc6233e7dc..d7219b6cea019e2c258030eda6518dfa4add3f50 100755 GIT binary patch delta 2578 zcmZ8jdu&rx7(eH>9qZWE$5y)`ZXI*DXldPp$2Rs-uH1l#3R5&-8QTbp2n<>xhS|;f z;BuKMd_*TgB>Vw0Ofx8%)1d2sFu@q-AL1l}_1(dMp*1NAUcYni?U>x;oZtC=-}{`? zd%OSTZT?`Eb<9kZr$z;mJZIEx@&#E@2Er^;vX-qN`HoXO(#n?d&jAsfT&`OmLLxL2q!rE+qHU z6xe5+pPjBbFj!Wj3X>2lq3gz<4ZF;dG`V1-n~*h=ksNstE|_y3cXEWtw!v`nQdV2vf` z{yL5g3yGyj^lHRKMm&tfHyZIJBZ`rTX~c0x`de^(W!6a~9cb+~VWc)A}?ghU_1#A=~S zafKyCM$RFRbq%8pT7Q-1XKf8CS)!4DWLe_7v0@K4)Stsbj3S4IpW+X1+^$dI_(N)p zk0z>ap-Rmd!qp&u9AjW>VFs5mZ9>uf=#VthsAfPdY?lQkAf0ufH-bJNSn6fWpsT11$;%~gf1-F&Di4A{<%6|5y zh|a(*miR8k-!#!gLK9_!1@U_nL{=G~(xg-mR;s!D`rh z$$3SVy@)pvmm~glRhIW69=s;Y>|D+w4kPAa=s4nh#4HNw`O|186y@6uJ)^Qb1dHS7*LOxJ<0>777=xL>+Z^2S(r$4j4 z=q;!%wP$DHDO)-GNhLnyny-!7!?seGT)$z%+AW?{>(}`RteEKI0RJbj- z|7xlA%mX^tZJCp=N(sCfs-0U+>5I@_Dbp~tSItftDpgH#I5<%?%XoE`D&7SHRk{BG DYQ7~Q delta 2157 zcmZWq4Qx|Y6u$Sh-P*FPuVu5V1I9K{Hlbzzux@UEFFXi8BRZo&vMdat5d_JW%*gDL zDzug*g_DqBh?$x|hKUYpwk6E0I^4!m&0L}u14)SzTbVF)i6}qMbKkoK)R)}*-SeGu z&pqed`|kC7d*2G>+TtQnzXlCRZ}riVQ|4KdCeE6U{^&G244ULHfQ>rMQJp46b>R)v zNeg0yn*3j^&}dQtCxme;<&r>XM9;?Xy3U>r;cqtwNRq$|$1b`>W%j6jjoQDU_M>QH2fsd-Zf7#AFyzu{#?c07G1#eFWkZGq z&~Nw|j;D$1DbbSy7y(b6*gc+1LJZ^}=dx8f}Kt&ioU9TVd) zE9NzRiUm`0&N~U2d&OzVe_Nd+ch_BV5h8aRrWvfd-IgN<4ez6o{7$6Jq{J=xUCeNl zBii?=_LU#PHtPbq7dotqN_HYe+RK|{U)=_rO60(`woEx#H->_evl9En4nAgR zB+=0Gs9~$hNrRe?9gnI`pi0Yq3y#L63oPJqX@bFZTz7({$nvIBmI2W+APuhkvVEBr z_JrJH8PE&0&F$HiflY&Q(95z!)}JBxq+yEQSoM9<1m-)z^6mF^ULfsypEN{$okIq1 zMo=0?-g0CCo-J+MzECSO%l0e$1+m~-w!L?7_m@0W#vWDrP&tye3|CA1j(MmvAiU zs|n51x!K*tZaw)oMcIvLyn&{O^d=rc#B+%Kh~Fbd5%D^!Dk@yqkLFJ@>DhFV!4ue+ ztJsX9M4-K>hMZe)ur`xj1&guuU=z^gHUS4Io#fN$wh9^PM!X+x znlOvJ2X{^vzk68e*>?bv%kyaln4HbD13b=rIs*Y`JvG8bXTCMTucma(n8e^O)cIkR zE1$N)OD+Wl1u?vPg-B@(-Y9j^ccHJeo~A>xv>YnRvK{Z?M4MnC89CeohhFs}4y*k) zYJXMj|4@4a+$ytE8+?KN5-2FQJ1Q_zCr;W_g(ZXy#kDT$|6X(OAS)JWE>k!h i?yIe*bU!5P6g+XsXR6J9{_fwWP*Pt-4?#=)Q~v-`Q;M4a diff --git a/pendu.c b/pendu.c index f06acbb..244a89c 100644 --- a/pendu.c +++ b/pendu.c @@ -36,19 +36,36 @@ void display_hangman(int tries) { case 6: printf(" ----\n | |\n | O\n | /|\\\n | / \\\n |\n--------\n"); break; } } - +// Fct qui fait sortir du prog après avoir passé 30sec void alarm_handler(int sig) { printf("\nTrop tard ! Vous avez dépassé les 30 secondes.\n"); exit(1); } +//FCT pour calculer le score en fonction du temps mis et des erreurs obtenus +int calculate_score(int mistakes, time_t start_time) { + time_t end_time = time(NULL); + int time_taken = (int)difftime(end_time, start_time); + int base_score = 1000 - (mistakes * 100) - time_taken; + return (base_score < 0) ? 0 : base_score; +} + +//FCT pour ajouter un bonus si le joueur trouve en moins de 3 essais +void apply_bonus(int *score, int tries) { + if (tries <= 3) { + *score += 500; + } +} + int main() { srand(time(NULL)); 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 mistakes = 0; + int score = 0; for (int i = 0; i < word_length; i++) { guessed[i] = '_'; @@ -56,15 +73,16 @@ int main() { guessed[word_length] = '\0'; signal(SIGALRM, alarm_handler); + time_t start_time = time(NULL); // Début du chronomètre pour le score while (tries < MAX_TRIES && guessed_correctly < word_length) { printf("\nMot à deviner : %s\n", guessed); display_hangman(tries); char guess; - alarm(30); + alarm(30); //début du compteur des 30 sec a chaque tour printf("Entrez une lettre : "); scanf(" %c", &guess); - alarm(0); + alarm(0); //fin du compteur et sortie du programme via le signal int found = 0; for (int i = 0; i < word_length; i++) { @@ -79,15 +97,21 @@ int main() { if (!found) { tries++; + mistakes++; } } + score = calculate_score(mistakes, start_time); //calcul le score en fonction des erreurs et du temps écoulé + if (guessed_correctly == word_length) { + apply_bonus(&score, tries); //aplique le bonus de score si le nb d'essais <=3 printf("Félicitations ! Vous avez deviné le mot : %s\n", word); } else { printf("Désolé, vous avez perdu. Le mot était : %s\n", word); display_hangman(MAX_TRIES); } + printf("Votre score final est : %d\n", score); + return 0; }