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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
(*******************************************************************************
** Auteur : Tasnim HAMZA
** Date : 23/10/2009
** Titre : jeu_de_devin
*******************************************************************************)
Program jeu_de_devin ;
(*l'utilisateur choisie soit de deviner ou de faire deviner un nombre
**entre 1 et 999 à la machine.
**le nombre doit etre deviner en un nombre minimal d'essais.
*)
Var
choix_jeu :Char; (*choix du role du joueur dans le jeu lu au clavier*)
borne_min :Real; (*borne minimale de l'intervalle de recherche du nombre par la machine *)
borne_max :Real; (*borne maximale de l'intervalle de recherche du nombre par la machine *)
nb_essai :Integer; (*nombre d'essai de deviner le nombre*)
nb_essai_max :Integer; (*nombre maximal d'essais lu au clavier*)
essai_computer :Real; (*nombre proposé par la machine*)
nb_fixe :Real ; (*nombre fixé aleatoirement par la machine*)
saisie_correct :Boolean ; (*test du saisie du joueur*)
essai_joueur :Real ; (*essai du joueur lu au clavier*)
resultat :Char ; (*resultat de comparaison essai_computer et nombre fixe par l'utilisateur*)
reponce :Char; (*reponce ( joueur/ machine) à l'essaai ( machine/ joueur) lue au clavier*)
rejouer :Char; (*demande de rejouer ou non, lue au clavier*)
Begin
(*saisir le nombre maximal d'essais*)
writeln('donner le nombre maximal de essais');
readln (nb_essai_max ) ;
(*demarrer une nouvelle partie en fin de la premiere si demandé*)
Repeat
(*donner le choix au joueur de deviner ou faire deviner un nombre*)
writeln ('si vous voulais me faire deviner un nombre tapez j ') ;
writeln ('si vous voulais que je vous fais deviner un nombre tapez t ') ;
readln (choix_jeu) ;
(*lancer le jeu selon le choix du joueur*)
Case choix_jeu in
(*la machine cherche le nombre fixe par l'utilisateur*)
'j' : Begin
(*chercher le nombre*)
borne_min := 1;
borne_max := 999;
nb_essai = 0;
Repeat
(*donner un essai*)
essai_computer := ( borne_min + borne_max )/2 ;
writeln (essai_computer );
(*lire la reponce de l'utilisateur*)
writeln ('que en pensez vous? tapez g ou p ou t');
readln (reponce);
(*incrementer les bornes de l'intervalle de recherche*)
Case reponce of
'g', 'G' : borne_max := essai ;
'p', 'P' : borne_min := essai ;
(*incrementer le nombre d'essai*)
nb_essai := nb_essai + 1;
Until (reponce = 'c') or (reponce = 'C') or (nb_essai = nb_essai_max);
End;
(*l'utilisateur devine un nombre fixé par la machine*)
't' : Begin
(*fixer un nombre a faire demander au joueur*)
nb_fixe := random(999) + 1 ;
{1 <= nb_fixe <= 999}
(*faire deviner le nombre au joueur*)
nb_essai := 0;
Repeat
(*calculer le nombre d'essai*)
nb_essai := nb_essai + 1 ;
(*saisir l'essai du joueur*)
saisie_correct := true;
Repeat
writeln('donner un nombre entre 1 et 999') ;
readln (essai_joueur);
(*tester essai valide ou non*)
if (essai_joueur < 1) or (essai_joueur > 999) then
saisie_correct := false;
Until saisie_correct:=true;
(*comparer essai et nombre fixe*)
If essai_joueur < nb_fixe then
reponce := 'p'
Else Begin
If essai_joueur > nb_fixe then
reponce:= 'g'
Else
reponce := 'c';
end;
(*afficher le resultat de comparaison des deux nombre*)
Case reponce of
'p' : writeln ('le nombre saisie est trop petit') ;
'g' : writeln ('le nombre saisie est trop grand') ;
Until (reponce = 'c') or (nb_essai = nb_essai_max);
end;
(*afficher le resultat du jeu*)
If (nb_essai <= nb_essai_max) and (reponce='c') then
begin
(*donner le nombre d'essais*)
writeln('le nombre a ete trouve en ', nb_essai) ;
(*declarer le vainqueur de la partie*)
case choix_jeu in
'j' : writeln('la machine vous a battu') ;
't' : writeln('vous avez battu la machine') ;
end
Else
(*declarer le perdant depassant le nombre d'essais maximal*)
case choix_jeu in
'j' : writeln('vous avez battu la machine, elle est incapable de trouver le nombre') ;
't' : writeln('la machine vous a battu, vous etes incapable de trouver le nombre') ;
(*demander au joueur s'il veut rejouer*)
writeln ('voulez vous lancer une nouvelle partie? si oui tapez o sinon tapez n ') ;
readln (rejouer) ;
until (rejouer = 'n') ;
end. |
Partager