Jeu 94%

Résolu/Fermé
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016 - Modifié par KX le 24/04/2016 à 12:44
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016 - 26 avril 2016 à 17:25
Bonjour,

j'ai fait le programme pour un jeu 94%
Je vais vous expliquer le principe du jeu, Tu as un thème (une phrase, un mot ) et le joueur doit trouver des mot reliés à ton thème S'il trouve 94% des mots alors il a gagné. Exemple:
thème: famille
mots à trouver: mère, père, grands-parents, frère, sœur, tante; oncle, neveu. Pour gagner la partie l'utilisateur doit trouver 7 des 8 mots cités en haut

donc voilà ce que j'ai fait


program jeu_94;
var mot:string;
begin
writeln('bienvenue');
writeln('le rincipe du jeu insiste de trouver un mot qui a une relation avec le terme donnez');
writeln('level 1 ');
writeln('trousse');
readln(mot);
  if (mot='stylo') or (mot='crayon') or(mot='correcteur') or (mot='couleur') or(mot='gomme') or(mot='feutre') or(mot='règle') or(mot='arrondisseur') or(mot='taille crayon') then
    begin
     writeln('you win');
     writeln('leval 2');
     writeln('famille');
     readln(mot);

      if (mot='mère') or (mot='père') or(mot='frère') or (mot='sœur') or(mot='tante') or(mot='oncle') or(mot='grands parents') 
then
         begin
         writeln('you win');
         writeln('level 3');
         writeln('boisson');
         readln(mot);


         if (mot='eau') or (mot='jus') or (mot='thé‚') or (mot='café‚') or(mot='lait')  then
           begin
           writeln('you win');
           writeln('level 4');
           writeln('cartable');
           readln(mot);


             if (mot='trousse') or (mot='cahier') or(mot='livre') or (mot='ardoise') or(mot='gomme') or(mot='feutre') or(mot='règle') then
               begin

                writeln('you win');
                writeln('level 5');
                writeln('jardin');
                readln(mot);


                  if (mot='arbre') or (mot='flure') or (mot='fruit') or (mot='chaise') or(mot='gazon') or (mot='sol') or (mot='puits') then
                     begin
                     writeln('you win');
                     writeln('level 6');
                     writeln('médecine');
                     readln(mot);


                       if (mot='docteur') or (mot='médicament') or (mot='hôpital') or (mot='infirmier') or(mot='patient') or (mot='maladie') then
                            begin
                             writeln('you win');
                             writeln('level 7');
                             writeln('ordinateur');
                             readln(mot);

                            if (mot='sourie') or (mot='clavier') or (mot='ecran') or (mot='cd') or(mot='dvd') or (mot='ram') or (mot='rom') then
                               begin
                               writeln('you win');
                               writeln('leval 8');
                               writeln('cuisine');
                               readln(mot);
                                   if (mot='r‚frig‚rateur') or (mot='cuisini‚re') or (mot='table') or (mot='chaise') or(mot='vaisselle') or (mot='lampe') or (mot='mixeurs')or (mot='lave vaisselle') then
                                      begin
                                      writeln('you win');
                                      writeln('congratulation');
                                      end
                                   else
                                   writeln('you lose');
                               end
                            else
                            writeln('you lose');
                            end
                       else
                       writeln('you lose');
                     end
                  else
                  writeln('you lose');
               end
             else
             writeln('you lose');
           end
         else
         writeln('you lose');
         end
      else
      writeln('you lose');
    end
  else
  writeln('you lose');
readln;
end.


j'ai l'impression qu'il est plein de fautes , et je veux savoir si mon principe de travail est correcte

j'ai besoin de vous, merci d'avance
A voir également:

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 avril 2016 à 12:43
Bonjour,

Le principe des if à répétitions ne peut pas être correct, ici tu as 8 niveaux, imagine ton code si tu en avais 100 par exemple...

Il faudrait que tu gères différemment tes données par exemple en stockant tes niveaux (thème et mots à trouver) dans un tableau.

Ainsi au lieu d'avoir une imbrication de if à rallonge, tu aurais une simple boucle sur chaque niveau.
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
24 avril 2016 à 15:03
Je vais essayer :)
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
Modifié par KX le 25/04/2016 à 06:39
voila ce que j'ai fait

program jeu94;
type tab=array[1..6] of string;
var mot:string;  i:integer; q1,q2,q3,q4,q5:tab; gn:boolean;
level:array[1..6] of tab;

procedure jeu(mmot:string; t:tab; var d:boolean);
var j,cpt,m:integer; score:integer;
begin
cpt:=0; r:=0; d:=false;
for j:=2 to 6 do
begin
writeln('entrez les mots lies au:',t[1]);
readln(mmot);
for m:=2 to 6 do
begin
  if (mmot=t[m]) then
  cpt:=cpt+1;
end;
end;
score:=(100*cpt)div 5;
if (score>=94) then
begin
d:=true;
writeln('tu as gagne ton score est ',score,' passant au theme suivant');
end
else
begin
d:=false;
writeln('niveau echoue ton score est ',score);
end;
readln;
end;


begin
q1[1]:='aliments riches en fer'; q1[2]:='thym'; q1[3]:='curry';
q1[4]:='lentilles'; q1[5]:='cumin'; q1[6]:='pisson';

q2[1]:='touristiques plage destinations'; q2[6]:='maldives';
 q2[2]:='bulgaria'; q2[3]:='antalya';q2[4]:='hawaii'; q2[5]:='sydney';

q3[1]:='meilleurs nations du foot en coupe de monde'; q3[6]:='argentine';
q3[2]:='bresil'; q3[3]:='algerie';q3[4]:='allemagne'; q3[5]:='italie';

q4[1]:='pays peuples'; q4[2]:='chine'; q4[3]:='etats unis';
q4[4]:='inde'; q4[5]:='indonesie'; q4[6]:='japon';

q5[1]:='voitures de course'; q5[6]:='ferrari';q5[2]:='bentley';
q5[3]:='lamborghini';q5[4]:='maserati'; q5[5]:='bugatti';

level[1]:=q2; level[2]:=q3; level[3]:=q4;  level[4]:=q5;
writeln('Bienvenue au JEU 94% assure toi de collecter 94 du score ou plus');
jeu(mot,q1,gn);
i:=1;
while (gn=true)and (i<=5) do
begin
  jeu(mot,level[i],gn);
  i:=i+1;
end;
end.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 avril 2016 à 06:57
Il y a encore quelques maladresses mais dans l'idée c'est quand même beaucoup mieux de coder ainsi, ça facilite le développement et la compréhension du code.

Remarque : Pour l'instant dans ton programme
score:=(100*cpt)div 5;
ne peut dépasser 94 que si cpt = 5, il faudrait donc faire un sans faute pour réussir...
Dans le jeu 94% chaque réponse a un poids puisqu'il s'agit de retrouver les résultats d'un sondage. C'est la somme de ces poids qui doit atteindre 94%.

Exemple : Animaux herbivores
32% : Vache
13% : Cheval
10% : Âne
10% : Chèvre
9% : Mouton
8% : Tortue
6% : Lapin
3% : Éléphant
2% : Panda
1% : Girafe
Source : http://www.les-reponses.fr/solutions-94-pour-cent.html

PS. sur ce forum les balises de code pour le langage Pascal c'est <code delphi>
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
25 avril 2016 à 15:47
compriiis
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
Modifié par el_clapotis le 25/04/2016 à 15:51
compris KX
j'ai crée un nouveau tableau pour les pourcentages,
et j'ai mis le variable score à la place de cpt ,, donc il reçoit la somme des pourcentages de chaque réponse correcte
voilà
program jeu94;
type tab=array[1..6] of string;
var mot:string;  m:integer; q1,q2,q3,q4,q5:tab; gn:boolean;
level:array[1..6] of tab;

procedure jeu(mmot:string; t:tab; var d:boolean);
var j,i,score:integer; pourcent:array[1..6] of integer;
begin
pourcent[1]:=0; pourcent[2]:=30; pourcent[3]:=25;
pourcent[4]:=16;pourcent[5]:=16; pourcent[6]:=11;

score:=0; d:=false;
for j:=2 to 6 do
begin
writeln('entrez les mots lies au:',t[1]);
readln(mmot);
for i:=2 to 6 do
begin
  if (mmot=t[i]) then
  score:=score+pourcent[i];
end;
end;
if (score>=94) then
begin
d:=true;
writeln('tu as gagne ton score est ',score,'% passant au theme suivant');
end
else
begin
d:=false;
writeln('niveau echoue ton score est ',score,'%');
end;
readln;
end;


begin
q1[1]:='aliments riches en fer'; q1[2]:='thym'; q1[3]:='curry';
q1[4]:='lentilles'; q1[5]:='cumin'; q1[6]:='pisson';

q2[1]:='touristiques plage destinations'; q2[6]:='maldives';
 q2[2]:='bulgaria'; q2[3]:='antalya';q2[4]:='hawaii'; q2[5]:='sydney';

q3[1]:='meilleurs nations du foot en coupe de monde'; q3[6]:='argentine';
q3[2]:='bresil'; q3[3]:='algerie';q3[4]:='allemagne'; q3[5]:='italie';

q4[1]:='pays peuples'; q4[2]:='chine'; q4[3]:='etats unis';
q4[4]:='inde'; q4[5]:='indonesie'; q4[6]:='japon';

q5[1]:='voitures de course'; q5[6]:='ferrari';q5[2]:='bentley';
q5[3]:='lamborghini';q5[4]:='maserati'; q5[5]:='bugatti';

level[1]:=q2; level[2]:=q3; level[3]:=q4;  level[4]:=q5;
writeln('Bienvenue au JEU 94% assure toi de collecter 94 du score ou plus');
jeu(mot,q1,gn);
m:=1;
while (gn=true)and (m<=5) do
begin
  jeu(mot,level[m],gn);
  m:=m+1;
end;
end.

0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 avril 2016 à 19:13
Je ne comprends pas pourquoi tu as mis
pourcent[1]:=0; pourcent[2]:=30; pourcent[3]:=25; pourcent[4]:=16; pourcent[5]:=16; pourcent[6]:=11;

C'est au hasard ?
Parce que normalement pour chaque niveau tu vas avoir des pourcentages différents, il n'y a pas de raison pour que ce soit toujours 30-25-16-16-11
D'autant que, pareil, mathématiquement pour avoir 94% avec ces valeurs il faut absolument faire un sans faute (avec une erreur tu aurais maximum 89%...)

Concernant l'implémentation maintenant, pour aller encore plus loin, je te conseilles d'utiliser des structures de données.

Exemple (compilé avec FreePascal)

type
    Response = record
               value   : String;
               percent : integer;
    end;

    Level = record
            title     : String;
            responses : array[1..10] of Response;
    end;

var
    Game : Array[1..2] of Level = (
        (title:'Animaux herbivores';
         responses:((value:'vache';    percent:32),
                    (value:'cheval';   percent:13),
                    (value:'ane';      percent:10),
                    (value:'chevre';   percent:10),
                    (value:'mouton';   percent:9),
                    (value:'tortue';   percent:8),
                    (value:'lapin';    percent:6),
                    (value:'elephant'; percent:3),
                    (value:'panda';    percent:2),
                    (value:'girafe';   percent:1))
         ),(title:'C''est bleu';
         responses:((value:'mer';        percent:41),
                    (value:'ciel';       percent:36),
                    (value:'yeux';       percent:7),
                    (value:'jeans';      percent:4),
                    (value:'schtroumpf'; percent:4),
                    (value:'stylo';      percent:2),
                    (value:'';           percent:0),
                    (value:'';           percent:0),
                    (value:'';           percent:0),
                    (value:'';           percent:0))
         ));

Avec cette structure tu peux par exemple faire ce genre de code :

var
    lvl:Level;
    rsp:Response;
    i,j:integer;
begin
    for i := 1 to 2 do
    begin
        lvl := Game[i];
        writeln(lvl.title); 
        writeln();
        for j := 1 to 10 do
        begin
            rsp := lvl.responses[j];
            if (rsp.percent > 0) then
                writeln(rsp.value,' ',rsp.percent,'%');
        end;
        writeln();
    end;
    readln;
end.

Ce qui donne :
Animaux herbivores

vache 32%
cheval 13%
ane 10%
chevre 10%
mouton 9%
tortue 8%
lapin 6%
elephant 3%
panda 2%
girafe 1%

C'est bleu

mer 41%
ciel 36%
yeux 7%
jeans 4%
schtroumpf 4%
stylo 2%
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
25 avril 2016 à 19:31
D'accord j'ai compris,, le travail avec les structures de donnés a simplifié le programme, merci pour l'aide et vos astuces , ça m'a aidé beaucoup
Juste une autre question , est ce qu'il y a une autre méthode appart les structures de donnés?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
25 avril 2016 à 19:46
On pourrait très bien imaginer écrire des fichiers, soit un par niveau soit globalement, ce qui évite d'avoir à remplir les données dans le code.
Mais en terme de manipulation du code on reviendra sûrement à une structure de données comme celle-ci.

Après on pourrait aller plus loin en faisant du Pascal Objet, mais la notion d'objet est assez proche de la structure de données aussi, c'est surtout les fonctions qui changerait.
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
26 avril 2016 à 17:25
Tout est compris, je te remercie pour ton aide,
0