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

Free Pascal Discussion :

Algorithme du jeu du morpion


Sujet :

Free Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut Algorithme du jeu du morpion
    Bonjour !

    Aidez-moi svp, je voudrais écrire un programme Pascal sur un jeu de morpion pour deux joueurs.
    Aais je bloque !

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    tu bloques où ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Si tu vas faire un tour parmi les codes sources Pascal et si tu fais une recherche sur le mot "morpion", tu trouveras plusieurs exemples qui pourront t'aider. Le morpion avait également été le sujet du défi Pascal 2008.

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut merci
    merci mais retrouve dans les codes sources sontr des bouts de code dispersé dont je n'arrive pas à savoir ou est le debut! en gros je suis perdu

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    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 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par scorpion el-diabloti Voir le message
    je suis perdu
    Et si vous commenciez par le début ? Le début, c'est la façon dont vous allez représenter le jeu. Il me semble que le jeu du morpion peut être représenté par un tableau contenant trois lignes et trois colonnes. Les cases du tableau peuvent recevoir trois valeurs différentes. Est-ce que ça vous paraît faisable ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut oui
    je pense que oui! mais quels sont les etapes pour cet algorithme! de la ddeclaration à la fin par quel etapes devrai je passer

  7. #7
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    Du même avis que Roland : d'abord le début. Avant l'algorithme, Il faut essayer de définir à l'avance tout ce qui peut servir dont le tableau 3x3, si chaque case peut contenir 3 valeurs (x,o ou rien) ces cases peuvent être de n'importe quel type sauf les boolean (Par exemple en shortint avec 0 pour rien, 1 pour x et 2 pour o).
    On pourra toujours rajouter des variables statiques auquel on n'a pas pensé pour tout le programme.

    Pour les graphismes, je pense qu'il vaut mieux essayer le plus simple : en mode texte, en écrivant sur trois lignes les o ou les x ou rien des cases avant chaque demande pour le joueur 1 ou 2.

    A chaque étape, les vérifications à faire (troix x ou troix o alignés horizontalement, verticalement ou en diagonale).

    La boucle principal à faire est logiquement de type infini (Repeat... until... ou While ... do...) mais comme il y aura au maximum 9 tours, tu peux aussi utiliser For.. do ...

    Fais une tentative et tu verras bien si tu es sur une bonne piste, les étapes se dévoileront au fur et à mesure en fonction des besoins.

    Bon courage

  8. #8
    Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    merci pour le +

  9. #9
    Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut aide sur un programme
    bonsoir! voici ce que j'ai pu faire concernant le morpion mais d'apres le compilateur il ya des probemes et j'ai essayé de rectifier mais en vin! donc svp aidez moi à rperé les erreurs!

    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
    127
    128
    program morpion_zoe;
    uses crt;
     
    const
      vide=' ';
      NB_LIG=3;
      NB_COL=3;
    var
      pion:char;
      pion1,pion2:char;
      true,false:boolean;
      damier: array[1..NB_LIG,1..NB_COL] of char;
      grille:damier;
     
    begin
    clrscr;
      procedure initialisegrille();
      var
        i,j:integer;
     
       begin
         i:=0;
         while i<NB_LIG do
           j:=0;
           while j<NB_COL do
             grille[i,j]=' ';
     
             j=j+1
           end;
           i=i+1
         end;
       end;
     
       procedure affichegrille();
       var
         i,j:integer;
     
         begin
           i:=0;
           while i<NB_LIG do
            j:=0;
            while j<NB_COL do
              case grille[i,j] of
                vide: writeln(' ');
                pion1: writeln('*');
                pion2: writeln('+')
              end;
            end;
           end;
         end,
         writeln();
     
       procedure metunpionsur_la_grille(ligne,col:integer; saisie_correcte:boolean);
        saisie_correcte:=false;
        writeln('numeros de ligne et de colonne');
        repeat
          readln(ligne,col);
          writeln();
          if ligne>0 and ligne<NB_LIG and col>0 and col<NB_COL then
            ligne:=ligne-1;
            col:=col-1;
            if grille[ligne,col]<>vide then
              writeln('cette case a deja ete remplie. veuillez recommencer:');
                else
                  saisie_correcte:=true;
                  grille[ligne,col]:=prochainjoueur;
                  if prochainjoueur=pion1 then
                    prochainjoueur:=pion2;
                    else
                       prochainjoueur:=pion1;
                       else
                          writeln('indice de ligne ou de colonne incorrecte. veuillez recommencer:')
                  end;
            end;
          end
        until not saisie_correcte;
     
       function testefin_jeu(joueurgagnant:integer; estfini:boolean);
       var
        i,j:integer;
       begin
         estfini:=false;
         if grille[1][1]<>vide then
            if grille[0][1]=grille[1][1] and grille[1][1]=grille[2][1] or
               grille[1][0]=grille[1][1] and grille[1][1]=grille[1][2] or
               grille[0][0]=grille[1][1] and grille[1][1]=grille[2][2] or
               grille[0][2]=grille[1][1] and grille[1][1]=grille[2][0] then
                 joueurgagant:=grille[1][1];
                 estfini:=true
            end;
         end;
     
         if not estfini and grille[2][2]<>vide then
           if grille[2][0]=grille[2][1] and grille[2][1]=grille[2][2] or
              grille[0][2]=grille[1][2] and grille[1][2]=grillr[2][2] then
                joueurgagnant:=grille[2][2]
                estfini:=true
           end;
         end;
     
         if estfini then
           writeln('felicitation au joueur ayant les');
           if joueurgagnant=pion1 then
             write('pion1');
             else
               write('pion2');
               writeln('qui a gagne');
               return true
           end;
         end;
         i:=0;
         while i<NB_LIG do
           j:=0;
           while j<NB_COL do
             if grille[i][j]=vide then
               return false
             end;
           end
         end;
         return true;
     
      function initialisegrille();
      repeat
        metunpionsur_la_grille();
        affichegrille();
      until not testefinjeu
      return 1;
    end.

  10. #10
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    Aïe ...
    Le problème principal est que tu déclares les routines (Function ou Procedure) dans la partie principale (tout ce qui est entre Begin et End. ) alors qu'elles doivent être créées avant cette partie.
    De plus, chaque routine doit commencer par Begin et se terminer par End; après sa déclaration.

    Voici un exemple d'utilisation d'une petite routine additionnant deux nombres entiers, pour t'aider à comprendre le fonctionnement :
    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
    Program addition;
    Var s : integer;
     
     
    Function addition(i,j : integer) : integer;    //Routine additionnant deux nombres
    Begin              //Début de la routine
      result:=i+j;
    End;               //Fin de la routine
     
     
    BEGIN            //PARTIE PRINCIPALE
      s:=addition(8,12);                        //Appel de la routine 'addition' définie et créée précédemment.
      writeln('La somme de 8 et de 12 est : ',s);
      readln;
    END.             //FIN de la partie principale

  11. #11
    Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Gabon

    Informations professionnelles :
    Activité : programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Merci pour la remarque, après vérification j'ai moi même aussi remarqué beaucoup d'erreurs que j'ai corrigées. Maintenant, ce que je voudrais faire c'est écrire une procédure qui permettra à l'ordinateur de vérifier si les lignes sont réalisables ; si c'est le cas, il y aligne les trois pions et gagne, dans le cas contraire il empêche le joueur de gagner ! Que faire ?

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 114
    Points
    114
    Par défaut
    Bonjour,
    Citation Envoyé par scorpion el-diabloti
    maintenant ce que je voudrai faire c'est ecrire une procedure qui permetrra à l'oedinateur de verifivier si les ligne sont realisable si c'est le cas il y aligne les trois pions et gagne au cas contraire il empeche le joueur de gagner! que faire
    Donc si je comprends bien, comment vérifier s'il y a trois '+' ou trois '*' alignés dans le tableau 3*3 de type char?
    Comme le nombre de cas est plutôt limité (3 lignes, 3 colonnes et 2 diagonales => total 8 par joueur donc 16), on peut le faire manuellement avec des if ... then.... Ce sera certes un peu long mais l'avantage est que ce sera moins une prise de tête
    Peut-être y a t-il moyen de raccourcir un peu, à voir.
    La routine : je verrais -par exemple- une Function qui renvoie un shortint avec les trois valeurs possibles : 0 si rien n'est aligné, 1 si trois '+' sont alignés et 2 si trois '*' sont alignés. A toi de voir.

Discussions similaires

  1. Jeu du morpion utilisant l'algorithme Minimax
    Par Roland Chastain dans le forum Codes sources à télécharger
    Réponses: 2
    Dernier message: 30/10/2018, 12h53
  2. Jeu du morpion utilisant l'algorithme Negamax
    Par Roland Chastain dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 09/02/2016, 07h04
  3. Jeu du morpion utilisant l'algorithme Minimax
    Par Roland Chastain dans le forum Lua
    Réponses: 0
    Dernier message: 25/01/2016, 17h44
  4. Algorithme Min-Max en C appliqué au jeu de Morpion (Tic-Tac-Toe)
    Par crooss dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 02/01/2012, 16h41
  5. Algorithme d'élagage alpha-beta en java appliqué au jeu du morpion 3*3
    Par sampaiX dans le forum Intelligence artificielle
    Réponses: 4
    Dernier message: 06/05/2010, 13h38

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