vb95
Messages postés3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és19024Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention18 avril 2024656 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és19024Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention18 avril 2024656 23 août 2017 à 20:12
C'était juste une idée, c'est toi le patron
vb95
Messages postés3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és19024Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention18 avril 2024656 16 août 2017 à 16:58
Oui ça devrait suffire
vb95
Messages postés3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és19024Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention18 avril 2024656 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 21 oct. 2014 à 18:23
merci cs_ShayW !
je verrai cela ce Week-end !
Bien le bonjour à toi
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 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és3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 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és3472Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention13 avril 2024169 18 oct. 2014 à 12:40
Modifié le 22 sept. 2017 à 07:07
Voici sa déclaration comme propriété dans la classe ClassEchiquier
Modifié le 23 août 2017 à 23:57
Tel qu'il est le projet me satisfait largement .
A+
23 août 2017 à 23:38
23 août 2017 à 20:51
Je suis très loin d'avoir tes compétences
23 août 2017 à 20:12
23 août 2017 à 16:14
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 +
16 août 2017 à 16:58
16 août 2017 à 16:26
Ma classe Piece je lui dis qu'elle hérite de Picturebox avec le mot-clé Inherits
16 août 2017 à 14:17
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
28 juil. 2017 à 19:06
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.
5 nov. 2014 à 17:40
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 !
5 nov. 2014 à 17:14
Entre autre, j'avais fait un compilateur de Basic sur Apple II commercialisé par MemSoft.
22 oct. 2014 à 17:33
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 !
21 oct. 2014 à 20:53
Remarque que j'utilise la propriété Name de la Picturebox suivi de l'index
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
21 oct. 2014 à 18:23
je verrai cela ce Week-end !
Bien le bonjour à toi
20 oct. 2014 à 22:08
20 oct. 2014 à 21:32
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 !
20 oct. 2014 à 20:49
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
20 oct. 2014 à 19:42
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
20 oct. 2014 à 18:48
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
20 oct. 2014 à 18:30
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
20 oct. 2014 à 18:06
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
20 oct. 2014 à 16:36
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
18 oct. 2014 à 12:40
Merci à l'auteur de celle-ci