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

Téléchargez Pascal Discussion :

ValisoaMorpion utilise l'algorithme MinMax [Sources]


Sujet :

Téléchargez Pascal

  1. #1
    Robot Forum
    Avatar de forum
    Inscrit en
    Novembre 1999
    Messages
    2 774
    Détails du profil
    Informations forums :
    Inscription : Novembre 1999
    Messages : 2 774
    Points : 2 549
    Points
    2 549
    Par défaut ValisoaMorpion utilise l'algorithme MinMax
    Bonjour,

    Je vous propose un nouvel élément à utiliser : ValisoaMorpion utilise l'algorithme MinMax.

    L'objectif du jeu est d'aligner trois pions de même couleur sur la ligne horizontale ou verticale ou diagonale. Le premier joueur à avoir aligné ces trois pions est le vainqueur.

    Type : jeu de morpion
    Développeur : Valisoa Jean Hervé
    Version : 1.0
    Date de sortie : 15/01/2018
    Langage de programmation : Pascal
    Compilateur : FreePascal 3.0.4
    OS : Windows
    Profondeur de calcul : 7 demi-coups
    Algorithme utilisé : MinMax

    Qu'en pensez-vous ?

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    Salut

    Bon j'ai regardé ton code, il y a quelques points à améliorer.
    Déjà ce n'est pas un échiquier mais un damier.

    Dans ton actualiseInterface, pourquoi ne pas faire plutôt :
    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
     
    procedure TValisoaMorpionForm.ActualiseInterface(Coup,joueur : byte);
    var 
      Col : TColor;
    Begin
      if Joueur = 1 then
        Col :=  clred
      else 
        Col :=  clgreen
     
       Case Coup of
          11 : P11.color := Col;
          12 : P12.color := Col;
          13 : P13.color := Col;
          21 : P21.color := Col;
          22 : P22.color := Col;
          23 : P23.color := Col;
          31 : P31.color := Col;
          32 : P32.color := Col;
          33 : P33.color := Col;
      end;
     
    End;
    Bon par défaut j'aurais plus pris un tableau de 1 à 9 mais bon c'est ton choix d'avoir des colonnes et des lignes.

    Dans Evaluations, ta boucle n'a pas besoin de prendre les diagonales et, plutôt que de mettre des chiffres, il vaut mieux passer la valeur du pion attaquant et défenseur, cela me paraît plus cohérent.
    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
    Function Evaluation(Piece : Damier;PionAttaque,PionDefense : integer) : shortint; { On evalue juste si un joueur a gagné ou non }
    var i,j,nbPion1,nbPion2 : byte;
    Begin
      Evaluation := 0;
      for i := 1 to 3 do
      begin		
        { Horizontalement }
    	if (Piece[i*10+1] = PionAttaque) and (Piece[i*10+1] = Piece[i*10+2]) and (Piece[i*10+1] = Piece[i*10+3]) then 
    	  Evaluation := 125
    	else 
    	  if (Piece[i*10+1] = PionDefense) and (Piece[i*10+1] = Piece[i*10+2]) and (Piece[i*10+1] = Piece[i*10+3]) then 
    		Evaluation := -125;
    		
    	 { Vertical }	
    	if (Piece[1*10+i] = PionAttaque) and (Piece[1*10+i] = Piece[2*10+i]) and (Piece[1*10+i] = Piece[3*10+i]) then 
    	  Evaluation := 125
    	else 
    	if (Piece[1*10+i] = PionDefense) and (Piece[1*10+i] = Piece[2*10+i]) and (Piece[1*10+i] = Piece[3*10+i]) then 
    	  Evaluation := -125;
    	end;
    		
    	// Diagonal
    	if (Piece[11] = PionAttaque) and (Piece[11] = Piece[22]) and (Piece[22] = Piece[33]) then 
    	  Evaluation := 125
    	else 
    	if (Piece[11] = PionDefense) and (Piece[11] = Piece[22]) and (Piece[22] = Piece[33]) then 
    	  Evaluation := -125;
    		
    	// Diagonal
    	if (Piece[13] = PionAttaque) and (Piece[13] = Piece[22]) and (Piece[22] = Piece[31]) then 
    	  Evaluation := 125
    	else 
    	if (Piece[13] = PionDefense) and (Piece[13] = Piece[22]) and (Piece[22] = Piece[31]) then 
    		  Evaluation := -125;
    	{ Si vous voulez, rajouter ici l'évaluation si la partie n'est pas finie. Mais moi, je trouve que cela est inutile au-delà de 6 demi-coups de calcul de profondeur }
    End;
    Après, je trouve cela un peu alambiqué l'utilisation de constante et de valeur numérique en place et lieu de la valeur du joueur.
    Je parle par exemple pour ton algo du min max, perso j'aurais passé en paramètres les différentes valeurs de mes pions, cela me permettant de choisir n’importe quel joueur sans passer par une valeur chiffrée, ce qui permettrait aussi de jouer à deux ou tout seul selon que l'on utilise ou pas le jeu automatique.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre averti
    Avatar de inspirateur
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2014
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2014
    Messages : 91
    Points : 339
    Points
    339
    Par défaut
    Bonjour.
    Merci pour les suggestions. En fait, échiquier ou damier ? Comme je suis un joueur d'échecs j'ai l'habitude d'utiliser le mot échiquier à tous les plateaux du jeu de ce genre, mais merci pour la correction. ValisoaMorpion était un test pour voir si j'arrive bien à implémenter l'algorithme MinMax. Mon objectif final c'est de rajouter MinMax au sein de ValisoaChess afin d'augmenter son niveau. Je vois déjà qu'est-ce que dois améliorer .
    " Le voyage compte plus que la destination. "
    ValisoaChess

Discussions similaires

  1. Puissance 4 utilisant l'algorithme MinMax
    Par Roland Chastain dans le forum Téléchargez
    Réponses: 0
    Dernier message: 24/02/2017, 16h50
  2. Optimisation en utilisant les algorithmes génétiques
    Par nourette dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 30/03/2010, 12h18
  3. Simulation multi-core de corps léger utilisant un algorithme vêtement
    Par raptor70 dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 04/01/2009, 15h19
  4. Fonction d'évaluation d'un jeu de dames utilisant l'algorithme du min/max
    Par elron8 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 31/01/2007, 11h04
  5. l'algorithme MinMax --> Evaluate() ?
    Par Miksimus dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 13/04/2006, 13h32

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