Concordances de picturesbox...

Fermé
Gn3uX Messages postés 5 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 7 novembre 2013 - 5 nov. 2013 à 19:28
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 7 nov. 2013 à 19:21
Bonjour a tous.
Pour commencer bravo a vous pour ce forum, qui m'a maintes fois permis de trouver des réponses concluantes a mes petits "problèmes de débutant"..
Hélas, je suis toujours débutant en visual basic, et il y a quelque chose que je n'arrive toujours pas a faire..

j'ai fait un petit programme tout simple, qui permet a l'utilisateur, via les flèches du pavé numérique de déplacer une picturebox"pion" dans un cadre, et qui, a l'appuie sur une touche, affiche une autre picturebox"bébête", placée de manière aléatoire dans ce cadre.Le but est, en déplaçant la picturebox "pion", de toucher la picturebox "bébête"...dans ce cas elle disparait...

Seulement j'ai un problème..comment savoir si effectivement ma picturebox"pion" touche ma picturebox"bébête"??

Petite info supplémentaire, mes picturebox sont créées dynamiquement..

j'imagine qu'il faut utiliser une boucle qui va tester si chaque point de ma picturebox"pion" est égal a un des points de ma picturebox"bébête", ou inversement, mais je n'arrive pas a exprimer cela sous forme de code...

Quelqu'un pourrait m'aider s'il vous plait??

9 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 nov. 2013 à 03:39
Bonjour,
Quel VB et éventuellement, quel version ?
A+
0
Gn3uX Messages postés 5 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 7 novembre 2013
7 nov. 2013 à 14:27
bonjour, j'utilise visual studio 2010, et je pense que c'est du visual basic(vb.net??).
Merci!
0
Gn3uX Messages postés 5 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 7 novembre 2013
7 nov. 2013 à 14:30
Je te mets un petit bout de code pour etre sur que l'on parle du meme langage!!

Private Sub Form1_Keydown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

'deplacement
Select Case e.KeyCode
'gauche
Case Keys.NumPad4
bordures(absPION - 5, ordPION)
touché(absPION - 5, ordPION)
If bool1 = True Then
pion(0).Location = New System.Drawing.Point(absPION - 5, ordPION)
absPION = absPION - 5
End If
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 nov. 2013 à 14:51
Oui, c'est bien VB.Net 2010
Pour ta question.. savoir si le pion touche (pénètre) la "bébéte"
Intéresse-toi à la classe Rectangle (voir l'aide) pour enrober ta "bébéte" :-)
Ensuite Rectangle.Contains(Point.X,Point.Y)
Si tu a un problème tu dis, j'expliquerais un peu plus.
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gn3uX Messages postés 5 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 7 novembre 2013
7 nov. 2013 à 14:57
Super merci, je regarde ça et je te redis si j'ai un problème..
encore merci pour ta réactivité!
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 7/11/2013 à 15:25
Tant que j'y suis.. un peu plus simple.pour le déplacement de ton pion
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode.ToString()
Case "Left"
Pion.Location = New Point(Pion.Left - 5, Pion.Top)
Case "Right"
Pion.Location = New Point(Pion.Left + 5, Pion.Top)
Case "Up"
Pion.Location = New Point(Pion.Left, Pion.Top - 5)
Case "Down"
Pion.Location = New Point(Pion.Left, Pion.Top + 5)
End Select
End Sub
A+

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 nov. 2013 à 15:56
Bof, comme dis... tant qu'ont y est.. :-)
Public Class Form1
Dim RecBete As Rectangle

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Dim B As Boolean
Select Case e.KeyCode.ToString()
Case "Left"
Pion.Location = New Point(Pion.Left - 5, Pion.Top)
B = RecBete.Contains(Pion.Left, Pion.Top) Or RecBete.Contains(Pion.Left, Pion.Top + Pion.Height)
Case "Right"
Pion.Location = New Point(Pion.Left + 5, Pion.Top)
B = RecBete.Contains(Pion.Left + Pion.Width, Pion.Top) Or RecBete.Contains(Pion.Left + Pion.Width, Pion.Top + Pion.Height)
Case "Up"
Pion.Location = New Point(Pion.Left, Pion.Top - 5)
B = RecBete.Contains(Pion.Left, Pion.Top) Or RecBete.Contains(Pion.Left + Pion.Width, Pion.Top)
Case "Down"
B = RecBete.Contains(Pion.Left, Pion.Top + Pion.Height) Or RecBete.Contains(Pion.Left + Pion.Width, Pion.Top + Pion.Height)
Pion.Location = New Point(Pion.Left, Pion.Top + 5)
End Select
If B Then
Label1.Text = "BOUM"
Else
Label1.Text = ""
End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Initialiser le rectangle Bete à sa création (pas dans le form_Load
RecBete = New Rectangle(Bete.Left, Bete.Top, Bete.Width, Bete.Height)
End Sub
End Class

tu dis..
A+
0
Gn3uX Messages postés 5 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 7 novembre 2013
7 nov. 2013 à 17:38
eh bien écoute, sur la méthode, je comprends, après un petit test, çà marche...donc ça c'est super, merci beaucoup pour ton aide!!

déjà j'utilisais les touches du pavé numérique pour une raison toute bête, c'est que les déplacements en diagonales sont aussi de mise..donc je trouve mon code plus pratique..mais j'apprécie beaucoup ta façon de faire, que je ne connaissais pas..
d'ailleurs a ce propos, je ne comprends pas trop les lignes de ce type

B = RecBete.Contains(Pion.Left, Pion.Top) Or RecBete.Contains(Pion.Left, Pion.Top + Pion.Height)
..peux tu m'eclairer un peu la dessus??

Au point ou on en est, je me permet une autre petite question...j'ai la fâcheuse habitude d'utiliser des fonctions un peu pour tout et n importe quoi...

exemple..

Public Function bordures(ByVal abs As Integer, ByVal ord As Integer) As Boolean

If abs <= 0 Or abs >= resX Or ord <= 0 Or ord >= resY Then
bool1 = False
Else : bool1 = True
End If
Return bool1

End Function

et plus loin a chaque déplacement, je vérifie si mon pion ne dépasse pas les bordures de la fenêtre ( que j'ai mis en variable resX et resY) avant de le déplacer en appelant ma fonction

bordures(absPION - 5, ordPION)

ça se tient, ou il y a "mieux"??
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 7/11/2013 à 19:23
remplacer ta fonction bordure..
            Case "Left"
If Pion.Left > 5 Then
Pion.Location = New Point(Pion.Left - 5, Pion.Top)
B = RecBete.Contains(Pion.Left, Pion.Top) Or RecBete.Contains(Pion.Left, Pion.Top + Pion.Height)
End If
Mais bon, si tu préfère ta façon de faire..
je me demande bien comment tu fais les diagonales ? avec les touches Home, End... suffit alors de les rajouter dans le select case.

Pour les explications sur la ligne voir mon poste précédant et l'aide.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0