VALISOACHESS un jeu d'échecs ambitieux

Présentation
Bonjour tout le monde.
En tant que joueur d'échecs (1654 ELO FIDE en Avril 2017) et amateur en programmation, j'ai eu l'idée de créer mon propre jeu d'échecs. Avant de me lancer, j'ai fait des recherches sur internet et j'ai trouvé beaucoup d'exemples mais soient ils sont trop compliqués pour être compris soient leurs codes sont trop longs (> 2 000 lignes). Alors que j'ai voulu avoir un exemple très simple juste pour débuter; un exemple qui montre juste comment deplacer les pièces et comment generer un coup sans se soucier du gain ou des tactiques gagnantes et cela avec le minimum de codes possibles.
Je me suis décidé alors de créer moi-même ce que je cherchais : VALISOACHESS est alors né.

Développeur : Valisoa Jean Hervé
Début de programmation : 01/04/2017
Version : 0.0.2 (30/05/2017)
Langage de programmation : Pascal
Compilateur : FreePascal 3.0.2
Nos ressources disponibles
Mon objectif principal était avant tout de créer le plus SIMPLE moteur d'échecs qui soit,en langage Pascal, en utilisant le MINIMUM DE CODE POSSIBLE. Afin que quiconque voudrait débuter au développement d'un jeu d'échecs en langage Pascal, même un débutant en programmation pourrait utiliser VALISOACHESS comme une référence de départ.
Jusqu'à la limite du possible, j'essayerais de maintenir les idées directrices suivantes :
Simple/Minimum de code/Original/Très intelligent/Documenté.
NB :
1- Original pour moi veut dire pas de plagiats. Je ne veux pas de "Copier/Coller" des codes spécifiques à tel ou tel programme d'échecs.
2- Pas de "Copier/Coller" d'algorithmes spécifiques à un programme d'échecs déjà existant même en Open Source.
3- Toutes fois, je ne me priverai pas des algorithmes que tout le monde utilise.
4- Je pourais utiliser les autres programmes d'échecs, "libres","OpenSource", comme sources d'inspirations(d'idées, d'imaginations) mais jamais comme une source à "Copier/Coller".
5- Je souhaite que VALISOACHESS soit unique de son genre : Original, intelligent et autonome.
6- Mon rêve est qu'à l'avenir VALISOACHESS soit parmi les meilleurs moteurs d'échecs ou qu'il soit le meilleur de tous pourquoi pas .

ValisoaChess (version 0.0.2) ne gère pas encore la prise en passant, le roque et l'échecs. Il gère tous les autres mouvements de toutes les pièces y compris les captures.
ValisoaChess joue ses coups de façon aléatoire. Toutes fois, il priorise les captures par rapport aux simples deplacements.
Pour jouer, utilisez la notation algebrique du genre e2e4, e7e5 ou g1f3.

Des suggestions, critiques, aides et conseils seront les bienvenus !
Détails
Catégories : Free Pascal
Avatar de inspirateur
Membre habitué
Voir tous les téléchargements de l'auteur
Licence : BSD
Date de mise en ligne : 5 décembre 2017




Avatar de inspirateur inspirateur - Membre habitué https://www.developpez.com
le 03/06/2017 à 11:41
Mon objectif principal était avant tout de créer le plus SIMPLE moteur d'échecs qui soit,en langage Pascal, en utilisant le MINIMUM DE CODE POSSIBLE. Afin que quiconque voudrait débuter au développement d'un jeu d'échecs en langage Pascal, même un débutant en programmation pourrait utiliser VALISOACHESS comme une référence de départ.
Jusqu'à la limite du possible, j'essayerais de maintenir les idées directrices suivantes :
Simple/Minimum de code/Original/Très intelligent/Documenté.
NB :
1- Original pour moi veut dire pas de plagiats. Je ne veux pas de "Copier/Coller" des codes spécifiques à tel ou tel programme d'échecs.
2- Pas de "Copier/Coller" d'algorithmes spécifiques à un programme d'échecs déjà existant même en Open Source.
3- Toutes fois, je ne me priverai pas des algorithmes que tout le monde utilise.
4- Je pourais utiliser les autres programmes d'échecs, "libres","OpenSource", comme sources d'inspirations(d'idées, d'imaginations) mais jamais comme une source à "Copier/Coller".
5- Je souhaite que VALISOACHESS soit unique de son genre : Original, intelligent et autonome.
6- Mon rêve est qu'à l'avenir VALISOACHESS soit parmi les meilleurs moteurs d'échecs ou qu'il soit le meilleur de tous pourquoi pas .

ValisoaChess (version 0.0.2) ne gère pas encore la prise en passant, le roque et l'échecs. Il gère tous les autres mouvements de toutes les pièces y compris les captures.
ValisoaChess joue ses coups de façon aléatoire. Toutes fois, il priorise les captures par rapport aux simples deplacements.
Pour jouer, utilisez la notation algebrique du genre e2e4, e7e5 ou g1f3.

Des suggestions, critiques, aides et conseils seront les bienvenus !
Avatar de Alcatîz Alcatîz - Responsable Pascal, Delphi et Assembleur https://www.developpez.com
le 05/06/2017 à 21:10
Bonjour Jean-Hervé,

La pièce jointe est de format inconnu, serait-il possible de la remplacer par une archive zip, par exemple ?
J'ai hâte de faire des tests !

Avatar de inspirateur inspirateur - Membre habitué https://www.developpez.com
le 07/06/2017 à 11:21
Bonjour Alcatîz !
Le fichier est au format archives du type rar. Mais je vais le mettre au format zip si vous voulez.
C'est fait. Maintenant le fichier .pas est déjà archivé au format .zip.
[ATTACH]283186d1/a/a/a" />
Avatar de Alcatîz Alcatîz - Responsable Pascal, Delphi et Assembleur https://www.developpez.com
le 07/06/2017 à 21:59
Merci, j'ai testé une petite partie.

L'IA a continué à jouer avec une pièce que je lui ai prise, je n'ai maheureusement pas eu le temps de regarder le code. Celui-ci est toutefois clair, les identificateurs sont bien parlants et il y a des commentaires, ce qui en facilitera la compréhension.

Petite suggestion : cela ne devrait pas prendre trop de temps d'implémenter la visualisation de l'échiquier, un peu comme ceci :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
TCFDRF.T
p.pppppp
.......C
.p......
....p...
...p....
ppp..ppp
TCFDRFCT
Comme ça le joueur n'a pas besoin de véritable échiquier.
(mais c'est juste une suggestion)
Avatar de inspirateur inspirateur - Membre habitué https://www.developpez.com
le 08/06/2017 à 17:53
Je n'ai pas remarqué ce bug mais je vais revérifier. Mais comme il ne gère pas encore la prise en passant c'est possible qu'il utilise encore un pion déjà capturé.
Pour l'interface, je vous remercie de votre suggestion et j'en tiens compte mais j'aimerais qu'il soit capable de gérer les 3 mouvements/règles de base à savoir la prise en passant, l'échecs et le roque avant de lui créer une interface. Ce sera pour bientôt...
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 09/06/2017 à 10:48
Bonjour ! Intéressant projet.

J'ai regardé rapidement votre code. Il vous reste encore pas mal de travail avant de pouvoir générer correctement tous les coups légaux. Deux remarques à ce sujet : 1° pour vérifier la légalité d'un coup, il faut être capable de détecter l'échec, afin de savoir si le joueur ne se met pas en échec en déplaçant sa pièce. 2° Concernant le roque et la prise en passant, la légalité du coup dépend, non seulement de la position actuelle des pièces sur l'échiquier, mais aussi de conditions liées à l'histoire de la partie.

Sauf erreur de ma part, il vous manque donc deux variables correspondant aux 3e et 4e champs d'une chaîne FEN :

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Ces deux variables doivent être initialisées au début de la partie et modifiées après chaque coup, comme la variable qui représente le "trait".

Un moteur qui joue même au hasard mais sans erreur est un objectif déjà assez difficile. Je pense comme Alcatîz qu'il serait bon de voir l'échiquier, ne serait-ce que pour détecter les erreurs inévitables quand on commence un programme de ce genre. Il serait bon de voir après chaque coup, non seulement l'échiquier, mais la valeur des variables "trait", "roque" et "prise en passant". Il faut penser en écrivant le programme au moyen de détecter les erreurs.

Voilà, bon courage ! J'ai hâte de voir la suite.
Avatar de inspirateur inspirateur - Membre habitué https://www.developpez.com
le 10/06/2017 à 8:15
Bonjour ! Merci pour vos remarques Roland Chastain.
Vous avez raison pour l'interface. C'est plus pratique et facile à tester si ValisoaChess possède sa propre interface. Je vais en créer une pour les prochaines versions.
Pour l'instant j'ai corrigé quelques bug de la version 0.0.2 et j'ai rajouté un fichier pdf contenant le journal de bord de ValisoaChess, une sorte d'historique de développement, et un autre fichier pdf qui devrait, au fur et à mesure, contenir la documentation de ValisoaChess. J'aimerais que ValisoaChess reste documenté.
La version 0.0.3 est déjà terminée mais j'ai encore des tests à faire avant de la mettre ici. Dans la version 0.0.3, ValisoaChess gère la prise en passant. J'aimerais y aller doucement mais sûrement de façon progressive ; en même temps j'essaye de comprendre le fonctionnement d'un IA, comme un jeu d'échecs, donc je ne peux pas faire beaucoup de choses à la fois.
Je livrerai la version 0.0.3 à la semaine prochaine.

Lorsque vous avez dit qu'il me manque encore deux variables correspondants aux 3ème et 4ème champs d'une chaîne FEN, je ne comprends pas ce que vous voulez dire par là. Quelles variables ? En tout cas, je crois que ValisoaChess maitrise bien la prise en passant. Il ne lui reste plus que le roque et l'échecs avant d'être un vrai moteur d'échecs
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 10/06/2017 à 12:40
Citation Envoyé par inspirateur Voir le message
Lorsque vous avez dit qu'il me manque encore deux variables correspondants aux 3ème et 4ème champs d'une chaîne FEN, je ne comprends pas ce que vous voulez dire par là. Quelles variables ? En tout cas, je crois que ValisoaChess maitrise bien la prise en passant.
Une position au jeu des échecs, ce n'est pas seulement la position des pièces sur l'échiquier, c'est aussi le "trait" (qui doit jouer), l'autorisation de roquer (indépendamment de la position actuelle des pièces), l'autorisation de prendre en passant (indépendamment de la position actuelle des pièces) et éventuellement (si l'on veut appliquer la règle des cinquante coups) le nombre de demi-coups joués précédemment sans prise ni pion déplacé.

Tout cela correspond aux cinq premiers champs d'une chaîne FEN. Je parle de la notation FEN parce qu'elle est couramment utilisée et aussi parce qu'elle peut servir d'aide-mémoire. D'ailleurs je recommanderais d'initialiser les différentes variables qui représentent la position au sens large à partir d'une chaîne FEN. C'est ce que j'ai fait dans mon propre programme d'échecs.

Pour le moment, vous n'avez que deux variables, qui représentent respectivement la position des pièces et le "trait". Donc vous ne pouvez générer correctement ni le roque, ni la prise en passant.

Par exemple, la prise en passant d'un pion n'est autorisée qu'au coup suivant le déplacement de ce pion (1). Or on ne peut pas savoir en regardant l'échiquier si le pion vient d'être déplacé. D'où la nécessité d'une variable représentant l'autorisation de prendre en passant, variable qui doit être mise à jour après chaque coup, en même temps que les variables "pièces" et "trait". J'espère que c'est plus clair cette fois.

Bonne continuation !

(1) Et il faut que le pion ait avancé de deux cases d'un seul coup. Cela non plus, on ne peut pas le savoir en regardant simplement l'échiquier.
Avatar de inspirateur inspirateur - Membre habitué https://www.developpez.com
le 14/06/2017 à 11:17
Merci Roland Chastain! Je vais rajouter les variables que vous m'avez proposées. J'ai déjà téléchargé votre propre programme , c'est très cool ; mais je n'ai pas encore regardé le code, je l'ai juste survolé. Je l'analyserai en détails.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -