Echecs en VB net

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 18 oct. 2014 à 12:35
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 22 sept. 2017 à 07:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/100773-echecs-en-vb-net

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 22 sept. 2017 à 07:07
Dans la version actuelle PieceEchiquier n'est plus de type Char comme indiqué au message 19
Voici sa déclaration comme propriété dans la classe ClassEchiquier
Public Shared Property PiecesEchiquier As New List(Of TypePieceOuSymbole)
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 23 août 2017 à 23:57
Merci du compliment Whis !
Tel qu'il est le projet me satisfait largement .
A+
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 août 2017 à 23:38
Nous n'avons pas les mêmes compétences, par exemple, tes ihm ont un design bien plus travaillés que les miennes.
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
23 août 2017 à 20:51
C'est surtout que je ne sens pas capable de le faire bien que j'ai compris le principe !
Je suis très loin d'avoir tes compétences
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
23 août 2017 à 20:12
C'était juste une idée, c'est toi le patron
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
23 août 2017 à 16:14
Salut Whis
J'ai modifié le code
Je n'ai pas dérivé les classes Roi, Reine,etc....car l'information intéressante d'une pièce de l'échiquier est sa property PieceEchiquier as Char et les différents déplacements de pièce sont gérables plus facilement directement dans la classe principale Echiquier .
Exemple de PieceEchiquier as Char : "k"c est un roi noir et "K"c est un roi blanc
Les noirs sont en minuscule et les blancs en majuscule ( j'en déduis le type de pièce et sa couleur lorsque nécessaire )

Par contre j'ai allégé le code dans Form1 en transposant certaines routines dans la classe Echiquier et en me servant des RaiseEvent pour rafraichir les informations sur la Form

A +
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
16 août 2017 à 16:58
Oui ça devrait suffire
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
16 août 2017 à 16:26
Que je suis bête !
Ma classe Piece je lui dis qu'elle hérite de Picturebox avec le mot-clé Inherits
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
16 août 2017 à 14:17
Salut Whis
Je viens juste de voir ton commentaire sur mon projet Echecs .
Au lieu de gérer la pièce dans la Form je gère ma pièce dans une classe Pièce "mère" avec des sous-classes "filles" selon la pièce !
comme tu as fait avec la Classe Carte et les sous-classe Embuches, Kilomètres, etc.. dans le 1000 kms.
Par contre tu dis : "Tu pourrais dériver une picturebox en Piece" .Là je ne comprends pas trop . Ce ne serait pas plutôt créer 64 objets de la classe Pièce et gérer les pièces avec ces objets dans cette classe et la Form ne ferait qu'afficher les pièces grâce à ces objets .
Va falloir que je réfléchisse à tout cela : un défi intéressant pour moi pour progresser
A + Whis et merci
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
28 juil. 2017 à 19:06
Bonjour

Voici peut être un axe d'amélioreration:
Tu utiliser des picturebox, du coup dans ta form, tu dois gérer de quelle pièce il s'agit, en déduire le déplacement etc...
Tu pourrais dériver une picturebox en Piece, qui aurait une couleur, un déplacement, un mode de prise, et tous les trucs communs à une pièce (y compris le pion).
Ensuite tu dériverais cette classe en Pion, Tour, Fou, Cavalier Roi et Reine.
Ainsi quand on clique sur une Piece par polymorphisme, elle sait ce qu'elle peut faire et la Form se contente de le montrer.
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
5 nov. 2014 à 17:40
bonsoir insoft2
Moi aussi j'ai programmé qous Qbasic avec MS-Dos 4 si mes souveniers sont bons ! et bien avant j'avais un Thomson TO7 que l'on branchait sur un télé et on faisait les sauvegardes de programmes Basic sur cassettes magnétophone ! toute une épopée !
Bonne soirée à toi oldy !
Pour vb95, et donc un autre 'oldy', j'ai aussi développé sur ... QB et ses parents/ancêtres dont Basic sur Apple II.

Entre autre, j'avais fait un compilateur de Basic sur Apple II commercialisé par MemSoft.
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
22 oct. 2014 à 17:33
resalut cs_ShayW
j'ai vu ton code avec les classes ! Mais je dois t'avouer que c'est quelque chose dont j'ai compris le principe en gros mais je n'ai jamais réussi à travailler avec !
Sans doute l'habitude de Visual Basic 6 car cela fait facilement plus de 15 ans que je programme avec VB ( j'ai commencé avec VB4 : ça date !)
J'en suis resté avec mes forms et mes modules .
Et à 64 ans bientôt dur de changer les vieilles habitudes !
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
21 oct. 2014 à 20:53
Voici le code qui fonctionne
Remarque que j'utilise la propriété Name de la Picturebox suivi de l'index

Dim colorsquare As New Color

Dim pic1 As PictureBox
Dim picleft As Integer, pictop As Integer
Dim index As Integer = 0

' les 64 cases du jeu
pic1 = Nothing
pictop = 28
For row = 0 To 7
picleft = 40
If row Mod 2 = 0 Then
colorsquare = Color.Khaki
Else
colorsquare = Color.Maroon
End If
For col = 0 To 7
pic1 = New PictureBox
With pic1
.Name = "PictureBox" & (index + 1).ToString
.BackColor = colorsquare
.Height = 45
.Width = 45
.Location = New Point(picleft, pictop)
End With
ImgPos.Add(pic1)
AddHandler pic1.MouseDown, AddressOf ImgPosMousedown
AddHandler pic1.GiveFeedback, AddressOf ImgPosGiveFeedback
AddHandler pic1.DragEnter, AddressOf ImgPosDragEnter
AddHandler pic1.DragDrop, AddressOf ImgPosDragDrop
Paneljeu.Controls.Add(pic1)
picleft = picleft + pic1.Width
index = index + 1
If colorsquare = Color.Khaki Then
colorsquare = Color.Maroon
Else
colorsquare = Color.Khaki
End If
Next
pictop = pictop + pic1.Height
Next


et pour avoir l'index de la picturebox cliquée j'utilise :
sourceindex = Convert.ToInt32(sender.name.substring(10)) - 1

Ainsi je construis l'interface du jeu que par code
Cela fait plus propre et plus "classe"

Merci à toi cs_ShayW
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
21 oct. 2014 à 18:23
merci cs_ShayW !
je verrai cela ce Week-end !
Bien le bonjour à toi
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
20 oct. 2014 à 22:08
 Private Sub pic1mouseclick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
dim x as integer
x = Convert.ToInt32(DirectCast(sender, PictureBox).Tag.ToString

end sub
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
20 oct. 2014 à 21:32
resalut cs_Shayw
Ca coince !
Je n'arrive pas dans les événements à déterminer quelle Picturebox est tributaire de cet évènement !
je garde ma solution peut-être peu élégante mais fonctionnelle !
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
20 oct. 2014 à 20:49
c'est vrai que tout est différent entre vb 6 et vb net mais la logique du jeu d'échecs est tout autre !
J'avoue que je n'ai fait que de comprendre le code VB 6 de Clémentio pour le transférer en VB net !
pour l'erreur pas grave !
par contre pic1 comme picturebox doit être définie au niveau de la feuille et non au Form_Load de celle-ci ! Il faut pouvoir y accéder pendant les événements MouseClick, DragEnter et DragDrop qui régissent le joueur humain !
Moi je travaille avec Visual Studio Express 2013 avec le framework 4.5
Cela explique surement le fait que tu n'ai pas pu ouvrir le projet
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
20 oct. 2014 à 19:42
je crois avoir trouvé !
counter+=1 est à remplacer par index+=1
ah oui erreur de ma part
a ta place je n'aurais pas pris un code vb6 et le transferer en vb.net
mais commencer à partir de zéro car en vb.net tout est different
au fait je n'ai pas pu ouvrir le projet car j'ai le visual 2010 framework 4
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
20 oct. 2014 à 18:48
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
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
20 oct. 2014 à 18:30
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 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
20 oct. 2014 à 18:06
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
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
20 oct. 2014 à 16:36
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 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
18 oct. 2014 à 12:40
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
Rejoignez-nous