Téléchargé 5 fois
Vote des utilisateurs
1
0
Détails
Licence : BSD
Mise en ligne le 15 janvier 2019
Plate-forme :
Windows
Langue : Français
Référencé dans
Navigation
ValisoaMorpion utilise l'algorithme MinMax
ValisoaMorpion utilise l'algorithme MinMax
==== VALISOA MORPION 1.0 ====
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é
ses 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
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é
ses 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
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 :
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.
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.
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 |
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; |
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 |
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; |
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.
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 .
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 .
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.