Concordances de picturesbox...

Gn3uX Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 191
 
Bonjour,
Quel VB et éventuellement, quel version ?
A+
0
Gn3uX Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 191
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 191
 
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   Statut Contributeur Dernière intervention   1 191
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 191
 
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