19
Surga Pierre-Emmanuel P2D ESEO Cycle préparatoire deuxième année Mini-projet informatique LE PENDU Compte rendu Objectif du Miniprojet Fonctionnement du programme Structures et fonctions définies Objectifs réalisés et non réalisés Fonctionnement du programme Code source complet du programme

LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

Surga Pierre­EmmanuelP2D

ESEOCycle préparatoire deuxième année

Mini-projet informatique

LE PENDU

Compte rendu

Objectif du Miniprojet

Fonctionnement du programme

Structures et fonctions définies

Objectifs réalisés et non réalisés

Fonctionnement du programme

Code source complet du programme

Page 2: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

Objectif du projet

Le jeu du pendu est un des plus célèbres jeux de lettres au monde. Le joueur doit deviner unmot choisis auparavant par un maître du jeu. 

Le maître du jeu commence par tracer sur un tableau une succession de tirets, un pour chaque lettreque le mot contient. Ensuite le joueur annonce une lettre. 

Si cette lettre fait partie du mot secret, le maître du jeu remplace, pour chaque occurrence dela lettre dans le mot secret, le tiret correspondant  à la lettre annoncée. Par exemple si le mot secretest « évidence », le maître du jeu inscrira « ­­­­­­­­ » sur le tableau. Quand le joueur annonce lalettre « e », le maître du jeu effacera trois tirets et écrira la lettre « e » à leur place, on se retrouveraavec la succession suivante sur le tableau: « e­­­e­­e ».

Si par contre la lettre annoncée n'est pas dans le mot secret, le maître du jeu tracera unélément d'un diagramme représentant un pendu. Le joueur doit ensuite anoncer une autre lettre, et leprocessus recommence.

La partie se termine si le mot secret est entièrement recomposé par le joueur, et le joueurgagne, ou si le diagramme du pendu est achevé, et dans ce cas le joueur perd.

Le but du mini­projet est de réaliser une version informatique de ce jeu, dans laquellel'ordinateur joue le rôle du maître du jeu, et où l'utilisateur est le joueur qui doit deviner le mot.

Des rêgles du jeu il découle le cahier des charges suivant:

– Le programme doit être capable de simuler une partie de pendu.

– Le programme doit être capable de piocher un mot au hasard dans une liste de mots de taillequelconque.

– Le programme doit être capable d'afficher le diagramme d'un pendu à l'écran.

– Le programme doit pouvoir interagir avec l'utlisateur, pour recevoir les lettres annoncées par lejoueur, et l'informer de la progression de la partie.

– De nature ludique, le programme doit posséder une interface plaisante et reposante.

– Le programme doit pouvoir aider le joueur si celui­ci est en difficulté.

– Le programme doit pouvoir déterminer la victoire ou la défaîte du joueur et réagir enconséquence.

Page 3: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

Fonctionnement du programme:

Début du programme

Initialiser des variables

Chargeer du dictionnaire de mots

Choisir un mot au hasard dans ce dictionnaire

Traiter du mot choisis (suppression des accents, des majuscules, etc)

Initialiser du mot secret (celui avec les tirets, visible par l'utlisateur)

Début de la partie

Pendant que le mot secret est différent du mot choisis ou que le pendu n'est pas intégralement tracé:

{

Afficher à l'écran du mot secret, du pendu à son état actuel, et des lettres déjà annoncées

Attendre une lettre annoncée par le joueur

Vérifier si cette lettre est dans le mot à deviner

Si elle l'est, modifier le mot secret de façon appropriée

Si elle ne l'est pas, afficher un élément de plus du pendu

}

Fin de la partie

Afficher à l'écran un message adapté à la victoire ou la défaîte du joueur, ainsi que d'éventuellesstatistiques sur ses résultats

Fin du programme

Page 4: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

Structures et Fonctions définies dans le programme

Le programme, pour des raisons de lisibilité et pour faciliter son développement, a été fractionné enplusieurs fichiers:

­ Pendu.c

C'est le fichier principal.

Trois fonctions sont définies dans ce fichier:

– La fonction main, fonction centrale du programme

– Une fonction initRandom qui initialise le générateur de nombres aléatoires, utilisé pourdéterminer un mot à prendre dans le dictionnaire

– Une fonction indice, qui aide le joueur en dévoilant une lettre non annoncée dans le motsecret

– Alphabet.c

Ce fichier contient la déclaration d'une structure « lettre », utilisée par le programme pourafficher le clavier, et pour déterminer la lettre annoncée par le joueur:

Elle contient les éléments suivants: 

– Un caractère désignant la lettre correspondant à la structures

– Les coordonnées x et y de cette lettre à l'écran

– Un booléen indiquant si la lettre a été annoncée par le joueur, ou pas

Dans ce fichier se trouvent aussi la déclaration d'un tableau de 26 lettres, représentant leclavier affiché à l'écran, et une fonction InitAlphabet servant à initialiser les valeurs dutableau de lettres aux valeurs correspondantes à un clavier d'ordinateur

– Stats.c

Ce fichier contient des fonctions de statistiques sur les parties.

Les différentes fonctions consistent en:

– Une fonction qui charge le fichier de statistiques et extrait ses données

– Une fonction qui sauvegarde ce fichier

– Une fonction retournant le pourcentage de victoires du joueur

– Une fonction calculant le temps moyen d'une partie

Page 5: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

– Dessin.c

Ce fichier contient des fonctions facilitant l'utilisation de la bibliothêque graphique utiliséepar le programme:

– Une structure « couleur » de trois entiers pour représenter une couleur (par sestrois composantes: rouge, vert, bleu)

– Une fonction prenant trois entier en paramêtre et retournant la couleur associée

– La définition de plusieurs couleurs utilisées par le programme, et une fonction lesinitialisant.

– Une fonction prenant une couleur en paramêtre qui emploie cette couleur commecouleur active pour les autres fonctions de dessin

– Une fonction ligne qui trace une ligne reliant deux points passés en paramêtre

– Une fonction lettreCarre qui écrit une lettre à l'écran, ainsi qu'un rectangleentourant cette lettre (utilisée pour tracer le clavier à l'écran)

– Une fonction potence, qui trace progressivement le diagramme du penducorrespondant au nombre d'essais restants, passé en parametre

Objectifs réalisés

Le programme répond à toutes les exigences du cahier des charges défini plus haut.

Objectifs non réalisés

Le sujet original prévoyait notamment l'implémentation d'un système bilingue, proposantl'utilisation de deux dictionnaires équivalents, un français et un anglais, et la mise en place d'unefonction d'indice donnant la traduction du mot à découvrir en anglais si il est en français, et viceversa. Je n'ai pas implémenté cette possibilité, car outre le fait qu'un double dictionnaire soit long etpeu pratique à mettre en place, cette fonction aurait trop avantagé des joueurs bilingues et n'auraitservi à rien pour des francophones ne parlant pas anglais. Cependant le programme tel quel permetà l'utilisateur de choisir le dictionnaire de son choix, dans la langue de son choix, via la ligne decommande.

Une autre fonction du sujet original était le mode deux joueurs, présenté comme ceci: Unjoueur choisis un mot, et l'autre joueur tente de le découvrir. Cette fonction, bien que très simple àimplémenter, ne l'a pas été, car elle manque de dynamisme. En effet, que fait le premier joueur àpart attendre pendant que l'autre trouve son mot? J'ai pensé à un autre système, où le programme

Page 6: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

détermine un mot secret, et où chaque joueur, les joueurs étant chacun sur une machine et cesmachines reliées en réseau, doit trouver le mot, le vainqueur étant celui qui trouve le mot enpremier.

Mais ce système n'a pas pu être implémenté d'une part car il utilise des routines réseau que jene maîtrise pas, d'autre part car il nécessiterai un système de gestion d'événements multitâche, cequi dépasse mes compétences en matière de programmation.

Fonctionnement du programme

Voici l'écran de jeu au lancement du programme. Les boutons du haut servent respectivement àquitter le programme, et à demander un indice (moyennant deux essais).

La barre de titre du programme affiche le nombre d'essais restants au joueur.

Le clavier affiché permet au joueur de choisir une lettre à jouer en cliquant simplement dessus.

Au dessus du clavier se trouve le mot secret, actuellement sous forme de tirets, car nous sommes audébut de la partie. 

A la droite de l'écran se trouve le diagramme du pendu, pour l'instant seule la base de la potence esttracée.

Page 7: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

Voici l'écran de jeu aprèsquelques coups. Les lettrestrouvées remplacent lestirets dans le mot secret, etla potence se trace au fûret à mesure des erreurs del'utilisateur.

On peut noter que dèsqu'une touche est pressée,elle s'efface, ceci permetau joueur d'identifier en uninstant les lettres qu'il adéjà joué.

Quand la partie setermine, le joueur estinformé de sesperformances à l'aide dequelques statistiques.

Paramêtres de ligne de commande:

Deux options sont disponibles, et toutes deux sont facultatives. La première permet de choisir lenombre minimal de lettres que le mot secret doit contenir, et la seconde permet de lancer un

Page 8: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

dictionnaire de son choix.

Exemples:

[p­e@p­e miniproj]$ ./pendu eseo.txt

Ceci va utiliser le dictionnaire eseo.txt

[p­e@p­e miniproj]$ ./pendu ­l10

Ceci rêgle le nombre minimal de lettres du mot secret à 10

[p­e@p­e miniproj]$ ./pendu anglais.txt ­l15

Ceci va utiliser le dictionnaire anglais.txt et choisir un mot d'au moins 15 lettres

[p­e@p­e miniproj]$ ./pendu ­l5 eseo.txt

Les options n'ont pas d'ordre, cette commande marche aussi

Annexe: Code source du programme

Le fichier pendu.c

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <time.h>#include "graphic.h"#include "alphabet.c"#include "dessin.c"#include "stats.c"

int indice(char mottrouve[], char motsecret[], int taille){int navigateur=rand()%taille, good=1;while(mottrouve[navigateur]!='­')

navigateur=rand()%taille;mottrouve[navigateur]=motsecret[navigateur];alphabet[navigateur].choisis=1;return 0;}

void initRandom(void){int date;date=time(NULL);

Page 9: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

srandom(date);}

int main(int argc, char *argv[]){int gagne=0;int perdu=0;int partie=1;int essai=7;int longueurmin;int nombre_mots=0;char choix='a';char motsecret[30];char mottrouve[30];char mottrouve_ancien[30];char dictionnaire[100];char message[200];int i, j, x, y, timer=0;FILE *dico;couleur couleurFond, couleurLettres, couleurCadre, couleurTexte;

// on initialise les choses à initialiserinitCouleurs();initAlphabet();initRandom();chargerStats();initGraph(500, 270);couleurFond=beige; couleurLettres=rouge; couleurCadre=bleu; couleurTexte=noir;

//Analyse des parametres, chargement du dictionnaire adapté et détermination du nombre delettres min

if(argc==1) {strcpy(dictionnaire, "dicodefaut.txt");longueurmin=7;}

if(argc==2){if(argv[1][0]=='­' && argv[1][1] == 'l')

{sscanf(argv[1], "­l%d", &longueurmin);strcpy(dictionnaire, "dicodefaut.txt");

Page 10: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

}else

{strcpy(dictionnaire, argv[1]);longueurmin=7;}

}if(argc==3)

{if(argv[1][0] == '­' && argv[1][1] == 'l')

{sscanf(argv[1], "­l%d", &longueurmin);strcpy(dictionnaire, argv[2]);}

if(argv[2][0] == '­' && argv[2][1] == 'l'){sscanf(argv[2], "­l%d", &longueurmin);strcpy(dictionnaire, argv[1]);}

}

 // On compte le nombre de motsdico=fopen(dictionnaire, "r");while(!feof(dico))

{fscanf(dico, "%s", motsecret);nombre_mots++;

}fclose(dico);

// On charge un mot aléatoirementwhile(strlen(motsecret)<longueurmin)

{dico=fopen(dictionnaire, "r");i=(rand()*rand())%nombre_mots;

for(j=0; j<i; j++)fscanf(dico, "%s", motsecret);

fclose(dico);}

// On enlève les accents et les majuscules du mot secret

Page 11: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

for(i=0; i<strlen(motsecret); i++){motsecret[i]=tolower(motsecret[i]);if(motsecret[i]== 'ï')

motsecret[i]='i';if( motsecret[i]== 'é' || motsecret[i]== 'è' || motsecret[i]== 'ê' || motsecret[i]== 'ë' )

motsecret[i]= 'e';if(motsecret[i]== 'ö' || motsecret[i] == 'ô')

motsecret[i]= 'o';if(motsecret[i]== 'ù' || motsecret[i] == 'û')

motsecret[i]='u';}

// On initialise le mot "question" avec des tiretsfor(i=0; i<strlen(motsecret); i++) 

mottrouve[i] = '­';mottrouve[i] = '\0';strcpy(mottrouve_ancien, mottrouve);

// On démarre le chrono et on incrémente le nombre de parties pour les statstimer=time(NULL);nbParties++;

//Le jeu démarrewhile (partie)

{// On trace l'écran de jeusprintf(message, "Pendu. Coups restants: %d", essai);setTitle(message);setCouleur(couleurFond);fillRect(0, 0, 500, 270);setLineWidth(1);setCouleur(rouge);drawRect(0, 0, 60, 20);drawRect(60, 0, 60, 20);setCouleur(couleurTexte);drawString("Quitter", 10, 15);drawString("Indice?", 70, 15);drawString(mottrouve, 100, 100);for(i=0; i<26;i++)

lettrecarre(alphabet[i].car, alphabet[i].x, alphabet[i].y, couleurLettres,couleurCadre);

potence(essai); 

Page 12: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

// l'utilisateur choisis une lettregetMouse_xy(&x, &y);if(x<60 && y<20) // Si il clique sur "quitter"

return 0;if(x>60 && x<120 && y<20)  //Si il clique sur "indice"

{indice (mottrouve, motsecret, strlen(mottrouve));essai­=3;}

i=0; // Si il clique sur clavierwhile(1)

{if(x<alphabet[i].x && x>alphabet[i].x­taillelettre && y<alphabet[i].y &&

y>alphabet[i].y­taillelettre && !alphabet[i].choisis)break;

i++;if(i>26) { essai++; break;} // Et enfin si il clique ailleurs}

alphabet[i].choisis = 1;choix=alphabet[i].car;

// On cherche la lettre dans le mot secret et on modifie le mot trouvé en conséquencefor(i=0; i<strlen(motsecret); i++) 

{if(choix==motsecret[i])

mottrouve[i] = choix;}

// On regarde si la lettre est dans le mot secretif(!strcmp(mottrouve, mottrouve_ancien))

essai­­;

strcpy(mottrouve_ancien, mottrouve);

// On vérifie si il a gagné ou perduif(essai < 1)

{perdu = 1;partie = 0;}

if (!strcmp(mottrouve, motsecret))

Page 13: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

{gagne=1;partie=0;}

}

//Fin du jeutimer=time(NULL)­timer; // Fin du chronosetCouleur(couleurFond);fillRect(0, 0, 500, 270);setCouleur(couleurTexte);drawString(mottrouve, 100, 100);for(i=0; i<26;i++)

lettrecarre(alphabet[i].car, alphabet[i].x, alphabet[i].y, couleurLettres, couleurCadre);potence(1); if(gagne)

{setTitle("Pendu. Victoire!");nbReussites++;sprintf(message,"Bravo! Vous avez trouvé %s. Temps: %ds", motsecret, timer);}

if(perdu){setTitle("Pendu. Defaite...");sprintf(message, "Dommage! Le mot était %s. Temps: %ds", motsecret, timer);}

setCouleur(couleurTexte);drawString(message, 20, 120);sprintf(message, "Temps moyen: %ds. Reussite: %d%.", upTemps(timer),

(nbReussites*100)/nbParties);drawString(message, 20, 140);drawString("Cliquez pour quitter",20, 160);

getMouse_xy(&x, &y);sauverStats();return 0;}

Le fichier dessin.c

typedef struct

Page 14: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

{int r;int g;int b;} couleur;

couleur rgb(int rouge, int vert, int bleu){couleur output;output.r = rouge;output.g = vert;output.b = bleu;return output;}

couleur rouge, noir, bleu, fushia, beige, marron;

void initCouleurs(){rouge=rgb(255, 0, 0);noir=rgb(0, 0, 0);bleu=rgb(0, 0, 255);fushia=rgb(255, 0, 255);beige=rgb(255, 220, 100);marron=rgb(63, 39, 100);}

void setCouleur(couleur cl){setRGB(cl.r, cl.g, cl.b);}

void ligne(x, y, xb, yb){moveTo(x, y);lineTo(xb, yb);}

void lettrecarre(char lettre, int x, int y, couleur clettre, couleur cfond){setLineWidth(1);char chaine[2];

Page 15: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

chaine[0]=lettre;chaine[1]='\0';int a;setCouleur(clettre);// On va voir si la lettre a déjà été tentéefor(a=0; a<26; a++)

if(alphabet[a].car==lettre && alphabet[a].choisis == 1)setCouleur(beige);

drawString(chaine, x­taillelettre/2, y­taillelettre/2);setCouleur(cfond);drawRect(x­taillelettre, y­taillelettre, taillelettre, taillelettre);}

void potence(int i){setLineWidth(5);int a;int startx=350;int starty=200;switch(i)

{case 1: 

{setCouleur(fushia);ligne(startx+60, starty­60, startx+40, starty­40);ligne(startx+60, starty­60, startx+80, starty­40);}

case 2:{setCouleur(noir);ligne(startx+60, starty­110, startx+40, starty­90);ligne(startx+60, starty­110, startx+80, starty­90);}

case 3:{setCouleur(noir);ligne(startx+60, starty­120, startx+60, starty­60);}

case 4: {setCouleur(noir);ligne(startx+60, starty­150, startx+60, starty­140);

Page 16: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

drawCircle(startx+60, starty­130, 10);}

case 5:{setCouleur(marron);ligne(startx+20, starty­150, startx+60, starty­150);}

case 6:{setCouleur(marron);ligne(startx+20, starty­150, startx+20, starty);}

case 7:{setCouleur(marron);ligne(startx, starty, startx+100, starty);break;}

}}

Le fichier alphabet.c

int taillelettre=30;int debutx=50;int debuty=200;

typedef struct {int x;int y;char car;int choisis;} lettre;

lettre alphabet[26];

void initAlphabet(void){int a;for(a=0; a<26; a++)

alphabet[a].choisis=0;

Page 17: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

alphabet[0].x=debutx;alphabet[0].y=debuty;alphabet[0].car='a';alphabet[1].x=debutx+taillelettre*1;alphabet[1].y=debuty;alphabet[1].car='z';alphabet[2].x=debutx+taillelettre*2;alphabet[2].y=debuty;alphabet[2].car='e';alphabet[3].x=debutx+taillelettre*3;alphabet[3].y=debuty;alphabet[3].car='r';alphabet[4].x=debutx+taillelettre*4;alphabet[4].y=debuty;alphabet[4].car='t';alphabet[5].x=debutx+taillelettre*5;alphabet[5].y=debuty;alphabet[5].car='y';alphabet[6].x=debutx+taillelettre*6;alphabet[6].y=debuty;alphabet[6].car='u';alphabet[7].x=debutx+taillelettre*7;alphabet[7].y=debuty;alphabet[7].car='i';alphabet[8].x=debutx+taillelettre*8;alphabet[8].y=debuty;alphabet[8].car='o';alphabet[9].x=debutx+taillelettre*9;alphabet[9].y=debuty;alphabet[9].car='p';alphabet[10].x=debutx+taillelettre*0;alphabet[10].y=debuty+taillelettre;alphabet[10].car='q';alphabet[11].x=debutx+taillelettre*1;alphabet[11].y=debuty+taillelettre;alphabet[11].car='s';alphabet[12].x=debutx+taillelettre*2;alphabet[12].y=debuty+taillelettre;alphabet[12].car='d';alphabet[13].x=debutx+taillelettre*3;alphabet[13].y=debuty+taillelettre;alphabet[13].car='f';alphabet[14].x=debutx+taillelettre*4;

Page 18: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

alphabet[14].y=debuty+taillelettre;alphabet[14].car='g';alphabet[15].x=debutx+taillelettre*5;alphabet[15].y=debuty+taillelettre;alphabet[15].car='h';alphabet[16].x=debutx+taillelettre*6;alphabet[16].y=debuty+taillelettre;alphabet[16].car='j';alphabet[17].x=debutx+taillelettre*7;alphabet[17].y=debuty+taillelettre;alphabet[17].car='k';alphabet[18].x=debutx+taillelettre*8;alphabet[18].y=debuty+taillelettre;alphabet[18].car='l';alphabet[19].x=debutx+taillelettre*9;alphabet[19].y=debuty+taillelettre;alphabet[19].car='m';alphabet[20].x=debutx+taillelettre*2;alphabet[20].y=debuty+taillelettre*2;alphabet[20].car='w';alphabet[21].x=debutx+taillelettre*3;alphabet[21].y=debuty+taillelettre*2;alphabet[21].car='x';alphabet[22].x=debutx+taillelettre*4;alphabet[22].y=debuty+taillelettre*2;alphabet[22].car='c';alphabet[23].x=debutx+taillelettre*5;alphabet[23].y=debuty+taillelettre*2;alphabet[23].car='v';alphabet[24].x=debutx+taillelettre*6;alphabet[24].y=debuty+taillelettre*2;alphabet[24].car='b';alphabet[25].x=debutx+taillelettre*7;alphabet[25].y=debuty+taillelettre*2;alphabet[25].car='n';}

Le fichier stats.c

int tempsMoyen, nbParties, nbReussites;

void chargerStats(void){

Page 19: LE PENDU - Freepopovmegamix.free.fr/Z/miniprojPendu/compte rendu miniproj hoang… · Le joueur doit ensuite anoncer une autre lettre, et le processus recommence. La partie se termine

FILE *fichier;fichier=fopen("stats.p2d", "r");if(fichier)

{fscanf(fichier, "%d %d %d", &nbParties, &tempsMoyen, &nbReussites);fclose(fichier);}

}

void sauverStats(void){FILE *fichier;fichier=fopen("stats.p2d", "w");if(fichier)

{fprintf(fichier, "%d %d %d", nbParties, tempsMoyen, nbReussites);fclose(fichier);}

}

int upTemps(int timer){tempsMoyen = (nbParties * tempsMoyen + timer)/(nbParties);return tempsMoyen;}

Le fichier stats.p2d ne contient que 3 nombres, je n'ai pas jugé indispensable de l'inclure ici, demême que je n'ai inclus aucun fichier dictionnaire, ceux que j'utilise contenant plusieurs milliers demots.