Bonjour,
Comme beaucoup d'entre nous qui partagent la passion des échecs et celle de l'informatique, j'ai souvent eu l'envie de me pencher sur la programmation des jeux d'échec.
C'est maintenant chose faite, avec ce petit jeu dont je vous transmet la source.
Les règles sont simples:
Dans un premier temps on choisit sa couleur, blancs ou noirs. La partie commence.
On joue son coup en cliquant sur une pièce et sur sa case d'arrivée. Puis l'ordinateur joue son coup. Et ainsi de suite.
La partie s'arrête en cas de chute de pendule (un joueur n'a plus de temps) , de MAT ou de PAT.
J'ai choisi le langage C# et .NET pour bénéficier de la facilité à créer une interface graphique, de la programmation objet, et de performances acceptables dans le calcul des coups.
Le principe est le suivant :
Une partie est une succession de positions. Chaque position est constituée de 64 cases, occupées ou non. Ces 64 cases déterminent les coups possibles pour cette position. Chaque coup entraîne une nouvelle position de 64 cases, permettant de nouveaux coups, etc.
On a donc une arborescence de positions-coups, qui se développe tout au long de la partie.
Grâce à la programmation en objet de cette arborescence, il est possible de calculer plusieurs coups à l'avance par une simple boucle récursive sur les différents coups et la position qu'ils entrainent.
Cependant, en voulant appliquer l'algorithme MinMax (utilisé par presque tous les jeux d'échecs pour calculer le coup de l'ordinateur), j'ai compris que le calcul de millions de coups, nécessaire à un jeu intelligent de l'ordinateur, était beaucoup trop gourmand en ressources mémoire.
J'ai donc opté pour l'interconnexion du jeu avec un moteur UCI (Universal Chess Interface). Il s'agit d'un processus autonome à qui l'on transmet les coups du joueur sous forme de notation algébrique, et qui calcule la réponse la plus appropriée. De nos jours, la majorité des logiciels d'échec emploient des moteurs UCI. Il en existe de nombreux et des compétitions ont lieu régulièrement. J'ai choisi StockFish (Licence GPL), qui est intégré au jeu sous forme de ressource.
Source / Exemple :
Précisions sur le ZIP:
Source/Cases/ : Les classes des cases et pièces (roi, dame..) des positions de jeu.
Source/Coups/ : Les classes des différents types de coup (prise, roque, etc)
Source/Joueur/ : Les classes des joueurs, le joueur Ordinateur gère le processus UCI.
Source/Dialogues/ : Les fenêtres de dialogue
Source/ControlesUtilisateurs/ : Les classes des éléments graphiques du jeu (échiquier, pendule, feuille de jeu..)
Source/Partie.cs : La classe principale du jeu.
Source/Position.cs : La classe qui décrit une position de jeu.
Resources/stockfish.exe : L'exécutable du moteur UCI.
Conclusion :
J'ai baptisé le jeu « Simple Fischer » en référence à son interface minimale et à la pendule type Fischer qui est employée.
Beaucoup d'évolutions seraient intéressantes:
_ Historique des positions (possibilité de revenir en arrière après une erreur)
_ Enregistrer/Charger une position
_ Réglage de la difficulté de jeu
_ Réaliser son propre moteur UCI (le langage C me paraitrait idéal).
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.