Jeu 94%

Résolu
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

4 réponses

  1. Modérateur
    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.
    1. Je vais essayer :)
  2. 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.
    1. Modérateur
      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 <codedelphi>
    2. compriiis
  3. 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.
    
    
    1. Modérateur
      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%
  4. 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?
    1. Modérateur
      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.
    2. Tout est compris, je te remercie pour ton aide,