IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Téléchargé 2 fois
Vote des utilisateurs
1 
0 
Détails
Éditeur : Valisoa Jean Hervé
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

==== 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
Avatar de anapurna
Expert confirmé https://www.developpez.com
Le 15/01/2019 à 14:53
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
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
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.
Avatar de inspirateur
Membre averti https://www.developpez.com
Le 23/01/2019 à 10:13
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 .
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.