Bonjour à tous, voici en deux mots mon souci : j'essaie de faire tourner un jeu du pendu réalisé en langage pascal mais je n'arrive pas à créer la boucle qui permet au joueur de faire plusieurs propositions, tant qu'il n'abandonne pas ou qu'il n'est pas pendu. Pour l'instant, le programme tourne bien sauf cette boucle, merci d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 program jouer_au_pendu; uses pendu_et_affichage; var encore_envie : BOOLEAN; // pour recommencer une nouvelle partie mot_a_trouver : STRING; // contient le mot à trouver mot_cache : STRING; // contient le mot en cours de découverte // cette fonction sert à fabriquer une chaîne de n étoiles. function repete_etoile(const n : CARDINAL) : STRING; var i:cardinal; var a:string; begin a:=''; for i:=1 to n do a:=a+'*'; repete_etoile:=a; end;{repete_etoile} // cette procédure permet de modifier la variable mot_cache // en faisant apparaître la lettre proposée lettre procedure decouvrir(const lettre : CHAR); var b:cardinal; begin for b:=1 to length(mot_a_trouver) do if lettre=mot_a_trouver[b] then mot_cache[b]:=lettre; end;{decouvrir} // cette procédure demande à l'utilisateur une proposition. // Si la proposition est erronnée alors le joueur est sanctionné, // sinon la lettre est découverte. procedure faire_proposition; var c:char; var e:cardinal; begin afficher_gibet; mot_a_trouver:='azerty'; writeln(repete_etoile(length(mot_a_trouver))); writeln('votre proposition ? (*/?/lettre/mot)'); readln(c); if c='?' then begin Afficher_regle; readln; end; if c='*' then exit; for e:=1 to length(mot_a_trouver)do if c=mot_a_trouver[e] then decouvrir(c)else begin decouvrir(c); mot_cache[e]:=c; writeln(mot_cache); readln; end; if mot_a_trouver<>c then sanctionner else writeln('bonne réponse, le mot était ; ',mot_a_trouver); end;(*faire_proprosition*) // cette procédure effectue une partie de jeu du pendu // - choix du mot à trouver // - interrogation de l'utilisateur jusqu'à fin de partie procedure jouer; begin writeln(repete_etoile(length(mot_cache))); preparer_gibet; mot_a_trouver:='azerty'; writeln(repete_etoile(length(mot_cache))); faire_proposition; if pendu=true then writeln('Vous avez perdu'); end;(*jouer*) // cette procedure demande à l'utilisateur // s'il veut poursuivre la partie // et lit sa réponse // attribue la valeur VRAI à la variable globale encore_envie // si l'utilisateur a répondu par l'affirmative // et la valeur FAUX dans le cas contraire procedure demander_si_encore_envie; var f:char; begin writeln('Voulez-vous recommencer une partie ?(o/n)'); readln(f) ; If f='o' then encore_envie:=TRUE else encore_envie:=false; end; (*demander_si*) BEGIN jouer(); demander_si_encore_envie(); while encore_envie do begin jouer(); demander_si_encore_envie(); end (*while*); END.
Partager