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 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
| program Pendus;
// objet pour le dictionnaire (liste de chaines)
type
TStringList = object
Strings : array of string;
Count : integer;
procedure Initialize;
procedure SetCount(aCount: integer);
procedure Clear;
procedure LoadFromFile(aFileName: string);
end;
{ TStringList }
procedure TStringList.Clear;
begin
SetLength(Strings, 0);
Count := 0;
end;
procedure TStringList.Initialize;
begin
Clear;
end;
procedure TStringList.LoadFromFile(aFileName: string);
var F: Text;
I: integer;
begin
Assign(F, aFileName);
Reset(F);
Clear;
I := 8;
SetLength(Strings, I);
while not Eof(F) do
begin
ReadLn(F, Strings[Count]);
inc(Count);
if Count = I then
begin
I := I + 8;
SetLength(Strings, I);
end;
end;
SetLength(Strings, Count);
Close(F);
end;
procedure TStringList.SetCount(aCount: integer);
begin
SetLength(Strings, aCount);
Count := aCount;
end;
// Messages du jeux
const
// à trouver une bonne lettre
bienVus : array[0..3] of string = (
'Super !',
'Parfait !',
'Héhé t''es en forme on dirait!',
'Chanceux !'
);
maxBienVus = length(bienVus);
// n'a pas trouver de lettre
malVus : array[0..3] of string = (
'Pas de chance !',
'Dommage !',
'Nul, concentre toi un peu !',
'Holala, n''importe quoi !'
);
maxMalVus = length(malVus);
// gagne la partie
youWin : array[0..3] of string = (
'Hey! pas mal du tout!',
'Félicitation, pas trop dur ?',
'Qu''elle culture!',
'Impréssionant!'
);
maxYouWin = length(youWin);
// perd la partie
youLose : array[0..3] of string = (
'Nul nul nul archi nul!',
'Ouai ouai ... la prochaine fois quoi ...',
'T''as joué avec les pieds la ?',
'Tu devrais lire un peu plus, tu crois pas ?'
);
maxYouLose = length(youLose);
// variables globale
var
N, // boucle
indexAleatoire, // index aléatoire pour le dictionnaire
compteurEssais, // nombre d'essais pour trouver le mot
erreurLettre, // nombre d'erreur
lettreTrouve : integer; // nombre d'occurance de la lettre trouvée dans le mot
motCache, // le mot à trouvé
motCherche, // le mot caché
lettresTest : string; // lettres testées
lettreChoisie, // saisie utilisateur
essayeEncore : char; // choix recommencer ou non (o ou n)
dictionnaireMots : TStringList; // dictionnaire
begin
// init generateur de nombres aléatoire
randomize;
// init dictionnaire
dictionnaireMots.Initialize;
// chargement dictionnaire
dictionnaireMots.LoadFromFile('dictionnaire_francais.txt');
// le dictionnaire est vide
if dictionnaireMots.Count = 0 then
writeln('Bah mince! le dictionnaire est vide... c''est balot')
else
repeat
// choix d'un mot
indexAleatoire := random(dictionnaireMots.Count);
motCache := dictionnaireMots.Strings[indexAleatoire];
motCherche := motCache;
// cache le mot
for N := 1 to length(motCache) do
motCherche[N]:='_';
// init partie
erreurLettre := 0;
lettresTest := '';
compteurEssais := length(motCache);
repeat
// dernière chance
if (compteurEssais = 1) or (erreurLettre = 4) then
begin
write('Dernière chance, proposez un mot pour "',motCherche,'" : ');
readln(motCherche);
dec(compteurEssais);
inc(erreurLettre);
end
else
begin
// aller, trouve les lettres!
writeln('Voici le mot à chercher, encore ', compteurEssais,' chances : ', motCherche);
writeln('lettres testées : ',lettresTest,'');
write('Choisissez une lettre : ');
readln(lettreChoisie);
// sauvegarde des lettres déjà saisie
lettresTest := lettresTest + lettreChoisie;
// cherche la lettre dans le mot
lettreTrouve := 0;
for N := 1 to length(motCache) do
if lettreChoisie = motCache[N] then
begin
motCherche[N] := lettreChoisie;
inc(lettreTrouve);
end;
if lettreTrouve = 0 then
begin
// la lettre n'a pas été trouvée dans le mot
writeln(malVus[random(maxMalVus)]);
inc(erreurLettre);
end
else
// la lettre a été trouvée dans le mot
writeln(bienVus[random(maxBienVus)]);
end;
dec(compteurEssais);
writeln('');
until (erreurLettre >= 5) or (compteurEssais < 1) or (motCache = motCherche);
// gagné ou perdus ?
if motCache = motCherche then
writeln(youWin[random(maxYouWin)])
else
writeln(youLose[random(maxYouLose)]);
// une autre partie ?
writeln('');
write('Une autre partie ? [o/n] :');
readLn(essayeEncore);
until not (essayeEncore in ['o','O']);
// vide le dictionnaire
dictionnaireMots.Clear;
end. |
Partager