Jeu 94%

Résolu
el_clapotis Messages postés 15 Statut Membre -  
el_clapotis Messages postés 15 Statut Membre -
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. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. el_clapotis Messages postés 15 Statut Membre
       
      Je vais essayer :)
      0
  2. el_clapotis Messages postés 15 Statut Membre
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
    2. el_clapotis Messages postés 15 Statut Membre
       
      compriiis
      0
  3. el_clapotis Messages postés 15 Statut Membre
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  4. el_clapotis Messages postés 15 Statut Membre
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
    2. el_clapotis Messages postés 15 Statut Membre
       
      Tout est compris, je te remercie pour ton aide,
      0