salut
quelques remarques sur le code
dans ta methode initialisation il y a quelques simplifications et optimisations à faire
remplace ceci
1 2 3 4 5 6 7 8 9
|
// for i := 0 to 99 do
// Piece[i] := Bord; {Initialisation du bord de l'échiquier}
// for j := 3 to 6 do
// Piece[i*10+j] := vide;
// for i := 1 to 8 do
// Piece[i*10+2] := Pion;
// for i := 1 to 8 do
// Piece[i*10+7] := -Pion;; |
par
1 2 3 4 5 6 7 8 9
|
FillChar(Piece,sizeof(Piece),Bord);
for i := 1 to 8 do
begin
for j := 3 to 6 do
Piece[i*10+j] := vide;
Piece[i*10+2] := Pion;
Piece[i*10+7] := -Pion;
end; |
ceci fait exactement la même chose en moins de boucle
autre chose dans la methode ValisoaChessCoup
ce qui me gène c'est que tu écrases systématiquement les premiers coups par des coups ayant une capture
je conçois que pour le moment ton ia est un peu simple et que tu donnes priorité aux capturex mais les échecs ce n'est pas que cela
il m'est arrivé de sacrifier des pions pour gagner la partie
donc pour ne pas trop changer ta logique actuelle il serait plus simple d'avoir un tableau d'entiers dans lesquels on indiquera le coup ayant une capture
1 2 3 4 5
| ...
TabCapture : array[1..200] of integer;
...
FilleChar(TabCapture,Sizeof(TabCapture),0);
... |
pour chaque capture
au lieu de
1 2 3 4 5
|
inc(nbCoup); inc(nbCapture);
Coup[nbCoup] := ...;
Coup[nbCapture] := Coup[nbCoup];
Writeln(nbCoup,' : ',Coup[nbCoup],' Capture de prise en passant'); |
tu remplaces par
1 2 3 4 5
|
inc(nbCoup); inc(nbCapture);
Coup[nbCoup] := ...;
TabCapture[nbCapture] := nbCoup;
Writeln(nbCoup,' : ',Coup[TabCapture[nbCapture]],' Capture'); |
et pour ton choix si il y a des captures
CoupChoisi := Coup[TabCapture[Random(nbCapture-1)+1]]; {Le coup choisi est pris aléatoirement parmi les captures possibles}
dans ta methode arbitre plutôt que deux tests tu peux simplement faire
1 2 3 4 5 6 7 8 9
|
......
Repeat
Writeln(' Voulez-vous jouer les blancs ou les noirs ?',#10,' 1 : Blancs',#10,' 2 : Noirs');
Write(' Quelle couleur Voulez-vous jouer ? : ');
Readln(ChoixMachine);
Machine := ChoixMachine = 2;
until (ChoixMachine = 1) or (ChoixMachine=2);
... |
par contre je ne vois pas où il se termine ?
j'ai nulle part un
après tu as fait des choix techniques qui sont déroutants au premier abord et une fois rentré dans le code somme toute sympas
Partager