Echecs avec moteur UCI Stockfish 32 bits

Soyez le premier à donner votre avis sur cette source.

Vue 3 463 fois - Téléchargée 787 fois


Description

L'ancienne source basée sur le projet de Clementio a été supprimée
Les 14 premiers commentaires sur cette source datent du projet fait avec la source en VB 6 de Clementio : il ne faut donc plus en tenir compte

La nouvelle source dont je me suis inspirée est ici : http://codes-sources.commentcamarche.net/source/100999-interface-pour-jeux-d-echecs
Merci à l'auteur pour son excellente source .
J'ai corrigé les erreurs dûes au fait que l'auteur n'avait pas mis son projet sur "Option Strict" à la compilation et qu'il avait gardé la référence "Microsoft Visual Basic" pour la compatibilité VB 6 .
Je n'ai pas gardé le redimensionnement de l'interface de jeu .
Diverses optimisations ont été faites dans le code : utilisation de list(of String) pour les coups jouables, les mouvements possibles et les prises entre autres .
Plein d'autres optimisations ont été faites ( factorisation de code, etc... )
Le gestion des promotions est faite : le joueur peut choisir la pièce promue ( Reine, Tour, Fou ou Cavalier)
Un moteur UCI a été rajouté comme adversaire : j'ai choisi Stockfish ( ici en version 10 en 32 bits )
Pour interfacer un moteur UCI avec un projet voir : https://castelmoissac-echecs.fr/spip.php?article252=
On peut choisir la couleur du joueur humain si on joue contre le moteur UCI .
Notez que ce même moteur UCI est utilisé dans cettte source en C# : http://codes-sources.commentcamarche.net/source/52342-jeu-d-echecs-en-c
Mais cette source ne fonctionne pas avec la version 8 du moteur UCI Stockfish .
De toute façon ce sont toujours les Blancs qui commencent que ce soit en mode UCI ou en mode Debug ( voir plus loin la signification)

Correction d'un bug lors de la promotion d'un pion
Correction d'un bug lors de la première avancée d'un pion : il pouvait avancer de 2 cases même si il y avait une pièce juste devant lui . Cela a été corrigé .
Correction d'un bug dans l'affichage du FEN actuel au niveau des possibilités de roque ( le tiret indiquant plus aucun roque possible pour les 2 rois était toujours visible même si un des rois ou les deux pouvaient roquer )
On ne redessine plus tout l'échiquier à chaque coup : seules les pièces qui sont déplacées sont redessinées et les mouvements sont effacés.
Une case à cocher permet un mode Humain contre Humain : utile pour debugguer le projet ou jouer à deux sur le même PC . Si on décoche cette case à cocher on joue contre le moteur UCI . Evidement que l'on coche ou que l'on décoche la partie recommence à zéro .
Une seconde case à cocher permet de cacher ou de visualiser les mouvements et menaces lors de la sélection d'une pièce par le joueur humain . On peut cocher et décocher cette case sans avoir à recommencer la partie . Fonction utile pour les débutants aux échecs .

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

vb95
Messages postés
2031
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 janvier 2020
81
la source vb6 d'origine est ici : http://codes-sources.commentcamarche.net/source/21680-clm-s-echecs-jeu-d-echecs-contre-votre-pc

Merci à l'auteur de celle-ci
cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
Salut
Si tu as 64 picturebox placés sur ta form pourquoi avoir déclarer imgpos as new list (of picturebox)

tu peux créer le tout dynamiquement sans l'ide
public  imgpos as new list (of picturebox)
private sub DesignBoard()
Dim colorsquare As New Color

dim pic1 as picturebox
dim left ,top as integer
dim index as integer= 0
top = 4
for row = 0 to 7
left = 4
if row mod 2 = 0 then
colorsquare = color.white
else
colorsquare = color.black
end if

for col = 0 to 7
pic1 = new picturebox
with pic1
.backcolor = colorsquare
.height = 'ce que tu veux
.width = 'ce que tu veux
.location = new point(left,top)
.tag = index
end with
imgpos.Add(pic1)
AddHandler pic1.MouseClick, AddressOf pic1mouseclick
me.Controls.Add(pic1)
left += pic1.width
counter+=1
if colorsquare =Color.White then
colorsquare = color.black
else
colorsquare = color.white
end if
next
top += pic1.height
next

end sub
vb95
Messages postés
2031
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 janvier 2020
81 > cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019

salut cs_ShayW
ImgPos simule les groupes de controles qui n'existent plus en natif sur VB net . J'ai placé mes 64 picturebox sur le Form par copier-coller et ensuite associé chaque Picturebox de cette forme à ImgPos ! et ImgPos ainsi permet l'accès à une picturebox avec des indices de la même façon qu'un tableau de variables .
C'est vrai que les 64 picturebox d'origine auraient pu être mis sur la feuille par
code !
question bête : sur ma feuille j'ai 64 ou 128 picturebox ? à mon avis c'est 64 et celles-ci sont référencées dans ImgPos as new List (of Picturebox)
Dans ce cas on peut faire de même pour les 2 groupes de 15 Picturebox qui servent aux pièces prises pendant le jeu !

Autre chose : AddHandler pic1.MouseClick, AddressOf pic1mouseclick
dans l'événement pic1mouseclick comment vais-je savoir l'indice de la picturebox cliquée ? Alors qu'avec AddHandler ImgPos(i).MouseClick, AddressOf
pic1mouseclick le paramètre sender me renvoie Picturebox1 pour la première picturebox ! un substring(10) me renvoie l'indice de la picturebox auquel j'enlève 1 pour avoir un "tableau" de Picturebox de 0 à 63 !

Quoiqu'il en soit je vais tester ta solution !
Merci pour cette remarque et bonne prog à toi
vb95
Messages postés
2031
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 janvier 2020
81 > vb95
Messages postés
2031
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 janvier 2020

resalut cs_Shayw
au sujet du AddHandler pic1.MouseClick, AddressOf pic1mouseclick problème ! Avec ton code le paramètre Sender me renvoie une chaine vide "" donc il est impossible au pic1Mouseclick de savoir quel est l'indice de la Picturebox qui a été cliquée !
J'ai essayé ton code sur un projet vide en y rajoutant un événement Pic1Mouseclick (sender as Object, e as MouseEventArgs)
Dans cette sub événement j'ai mis ce code -ci
Dim sourceindex as Integer = Convert.ToInt32(sender.name.substring(10)) - 1
le paramètre Sender.Name est une chaine nulle ! alors que dans mon code j'ai Picturebox1 pour la première Picturebox .
A nos bons groupes de contrôle de VB 6 ! où sont-ils passés donc ?

Je laisse donc le projet tel quel pour l'instant
vb95
Messages postés
2031
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 janvier 2020
81 > vb95
Messages postés
2031
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 janvier 2020

cs_ShayW
je crois avoir trouvé !
counter+=1 est à remplacer par index+=1
et on se sert de pic1.tag = index pour avoir l'indice de notre Picturebox

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.