IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Blocage dans l'avancée d'un petit jeu de Mastermind


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Blocage dans l'avancée d'un petit jeu de Mastermind
    Bonjour à tous,
    J'aurais besoin de votre aide si possible, je suis entrain de programmer un Mastermind en Pascal, sans aspect graphique(Sous forme de texte et chiffre). Je compile avec Borland Delphi 6 en Application console.
    L’algorithme me semble juste, il m'y a pas d'erreur lors de la compilation mais au moment de l’exécution, ça bloque. Après que le joueur ai placé ses 4 boules rien ne passe.
    Voilà a peu près le schéma que je me suis fait pour le jeu:
    -L'ordi choisit 4 boules au hasard
    -Le joueur place ses 4 boules sur la ligne
    -Comparaison des boules du joueur et de l'ordi
    -Si boule identique, tableau réponse reçoit: O
    -Inverse, tableau réponse reçoit: X
    -Fin du tour, on recommence et ainsi de suite.

    Le programme est encore très incomplet, je sais

    Voilà, le code, merci de m’éclaircir ou de me dire les détails qui ne vont pas. Merci beaucoup pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    program Mastermind_Changou;
     
    {$APPTYPE CONSOLE}
     
    uses
    SysUtils;
     
    const
    max=8;
     
    var
    DEB,REG,J,I1,TOUR:integer;
    X,O:string;
    TA:array[1..4] of integer;
    TJ:array[1..10, 1..4] of integer;
    TC:array[1..10, 1..4] of string;
     
    begin
    writeln('Voulez vous commencez une partie ?');
    writeln('Appuyez sur 1 pour "Oui" ou sur 2 pour "Non".');
    readln(DEB);
    if (DEB=1) then
            begin
            writeln;
            writeln('Voulez vous prendre connaissance des regles du jeu ?');
            writeln('Appuyez sur 1 pour "Oui" ou sur 2 pour "Non".');
            readln(REG);
            if (REG=1) then
                    begin
                    writeln;
                    writeln('Le jeu se presente sous la forme d''un plateau perfore de 10 rangees de quatre trous pouvant accueillir des pions de couleurs.');
                    writeln('Le nombre de pions de couleurs differentes est de 8 et les huit couleurs sont: rouge, jaune, vert, bleu, orange, blanc, violet, fuchsia.');
                    writeln('Il y a egalement des pions blancs et noirs utilises pour donner des indications a chaque etape du jeu.');
                    writeln;
                    writeln;
                    writeln('L''ordinateur commence par placer son choix de pions sans qu''ils soient vus par le joueur à l''arriere d''un cache qui les masquera a la vue de celui-ci jusqu''a la fin de la manche.');
                    writeln('Le joueur qui n''a pas sélectionne les pions doit trouver quels sont les quatre pions, c''est-a-dire leurs couleurs et positions.');
                    writeln('Pour cela, a chaque tour, le joueur doit se servir de pions pour remplir une rangee selon l''idee qu''il se fait des pions dissimulés.');
                    writeln('Une fois les pions places, l''autre joueur indique:');
                    writeln('        -le nombre de pions de la bonne couleur bien places en utilisant le meme nombre de pions noires');
                    writeln('        -le nombre de pions de la bonne couleur, mais mal places, avec les pions blancs.');
                    writeln;
                    writeln;
                    writeln('La tactique du joueur actif consiste a selectionner en fonction des coups precedents, ');
                    write('couleurs et positions, de maniere a obtenir le maximum d''informations de la reponse du partenaire ');
                    write('puisque le nombre de propositions est limite par le nombre de rangees de trous du jeu. ');
                    write('Dans la plupart des cas, il s''efforce de se rapprocher le plus possible de la solution, ');
                    write('compte-tenu des reponses precedentes, mais il peut aussi former une combinaison dans le seul but ');
                    write('de verifier une partie des conclusions des coups precedents et de faire en consequence la proposition ');
                    write('la plus propice à la deduction d''une nouvelle information.');
                    end;
            if (REG=2) then
                    begin
                    writeln;
                    writeln;
                    writeln('La partie va donc commencer. Bonne partie !');
                    end;
     
    writeln('Dans le jeu, chaque couleur se verra attribue un chiffre lui conrespondant:');
    writeln('1:Rouge, 2:Jaune, 3:Vert, 4:Bleu, 5:Orange, 6:Blanc, 7:Violet, 8:Fuchsia');
    writeln;
    writeln;
    writeln('Les pions noires seront representes par: O');
    writeln('Les pions blancs seront representes par: X');
    writeln;
    writeln;
    writeln;
     
    randomize;
    for J:= 1 to 4 do
            begin
            TA[J]:= 1+ random(max);
            end;
    for J:= 1 to 4 do
            begin
            writeln(TA[J]);
            end;
     
    I1:=1;
    TOUR:=1;
    while TOUR<>10 do
            begin
            for J:= 1 to 4 do
                    begin
                    writeln ('Placez la ',J,' ieme boule, s''il vous plait.');
                    readln (TJ[I1,J]);
                    if (TJ[I1,J] <> TA[J]) then
                            begin
                            TC[I1,J]:= X;
                            end;
                    if (TJ[I1,J] = TA[J]) then
                            begin
                            TC[I1,J]:= O;
                            end;
                    end;
     
            for J:= 1 to 4 do
                    begin
                    readln(TC[I1,J]);
                    end;
     
            I1:= I1+1;
            TOUR:= TOUR+1;
     
            end;
     
     
     
     
     
     
     
     
     
     
     
     
            end;
    if (DEB=2) then
            begin
            writeln;
            writeln;
            writeln('Merci, a bientot !');
            end;
    readln;
    end.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Qia,

    Il faudrait commencer par découper le code en fonctions, ça facilite la lecture et le suivi de l'algorithme.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Que sont les fonctions ? Et à quoi servent-elles concrètement ? Je n'ai pas un très bon niveau en programmation malheureusement

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Il faudrait apprendre à vous servir des mots-clés procedure et function. C'est l'affaire d'un quart d'heure, et c'est pratiquement indispensable.

    http://pascal.developpez.com/cours/ptrau/?page=page_13

    Voici un exemple tout simple d'une procédure qui affiche les règles du jeu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var
      DEB,REG,J,I1,TOUR:integer;
      X,O:string;
      TA:array[1..4] of integer;
      TJ:array[1..10, 1..4] of integer;
      TC:array[1..10, 1..4] of string;
     
    procedure AfficheRegles;
    begin
      writeln;
      writeln('Le jeu se presente sous la forme d''un plateau perfore de 10 rangees de quatre trous pouvant accueillir des pions de couleurs.');
      writeln('Le nombre de pions de couleurs differentes est de 8 et les huit couleurs sont: rouge, jaune, vert, bleu, orange, blanc, violet, fuchsia.');
      writeln('Il y a egalement des pions blancs et noirs utilises pour donner des indications a chaque etape du jeu.');
    { etc. }
    end;
    L'endroit correspondant dans la boucle principale devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (REG=1) then
    begin
      AfficheRegles;
    end;
    Pour le reste je n'ai pas encore regardé.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Quelques observations supplémentaires, après avoir mieux regardé le code.

    "O" et "X" sont des caractères, pas des variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      DEB,REG,J,I1,TOUR:integer;
      //X,O:string;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (TJ[I1,J] <> TA[J]) then TC[I1,J]:= 'X';
    Plus loin tu as mis un ReadLn au lieu d'un WriteLn : ça marche moins bien forcément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for J:= 1 to 4 do {readln}writeln(TC[I1,J]);
    D'ailleurs ce serait peut-être mieux comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for J:= 1 to 4 do
      write(TC[I1,J]);
    writeln;
    Enfin il y a un problème de conception à cet endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            if (TJ[I1,J] <> TA[J]) then TC[I1,J]:= 'X';
            if (TJ[I1,J] = TA[J]) then TC[I1,J]:= 'O';
    Le cas des boules de la bonne couleur mais mal placées n'est pas traité. C'est là-dessus qu'il faut travailler.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/02/2015, 14h27
  2. Petit jeu en java
    Par Seth77 dans le forum 2D
    Réponses: 80
    Dernier message: 08/01/2006, 23h01
  3. Nombre aléatoire (petit jeu)
    Par niCo.nb dans le forum C
    Réponses: 7
    Dernier message: 14/10/2005, 19h55
  4. [Thread] Blocage dans mon programme
    Par Xo Sonic oX dans le forum EDT/SwingWorker
    Réponses: 4
    Dernier message: 18/06/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo