IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Comment savoir si une image touche à une autre image ?


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 9
    Points
    9
    Par défaut Comment savoir si une image touche à une autre image ?
    Bonjour ,

    je suis en train de faire un petit jeu, un sokoban en vb 6.0. pour l'école. J'ai réussi à faire bouger mon bonhomme en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If KeyCode = vbKeyRight Then
    Imgbonhomme.Left = Imgbonhomme.Left + 100
    End If
    même code pour la gauche, bas et haut.

    Ce que j'aimerais savoir c'est si c'est corecte comme code ou il y a plus simple et plus performant ? et aussi comment savoir si mon bonhomme arrive sur une autre image par exemple un mur donc si un pixel de mon bonhomme touche sur un pixel du mur par exemple...?

    Si vous ne comprenez pas toutes mes questions n'hésitez pas à me le dire .

    Daniel.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    En ce qui concerne ta 1ère question : je n'ai rien à redire au code montré.

    En ce qui concerne la seconde : ce n'est qu'un calcul purement arithmétique basé sur la propriété left d'une des 2 images et l'addition des propriétés left et Width de l'autre !

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 9
    Points
    9
    Par défaut
    Salut,

    tu pourrais me donner un petit exemple ? Je viens de commencer le VB donc

    en attendent, j'essai de mon côté

    merci.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Rien à voir avec VB, mais tout avec l'arithmétique élémentaire, quel que soit le langage de développement utilisé.

    Donc ? relis ce que j'ai écrit plus haut : tout y est.

  5. #5
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    ucfoutu, une question:

    dans ce cas cité plus haut, en fonction de la position de son bonhomme, comment faire pour savoir quelle image le bonhomme touche?

    où alors je n'ai pas tout suivi...
    Xavier

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 9
    Points
    9
    Par défaut
    D'accord je vais essayer de décortiqué tout ça ^^

    merci

    Serais-je dans la bonne voie si je fais ça ?

    If ImgMur.Left = 2000 AND Imgbonhomme.Left = 2000 then
    ...
    End If

    je n'ai pas testé...

  7. #7
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par Daniel_P Voir le message
    If ImgMur.Left = 2000 AND Imgbonhomme.Left = 2000 then
    ...
    End If
    perso, je ne pense pas, à cette condition, le bonhomme est déjà dans le mur, non?

    regarde peut être dans ce sens:
    si le bonhomme se déplace vers la droite et touche un mur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Imgbonhomme.Left + ImgBonhomme.width = ImgMur.Left then
    ...
    End If
    Xavier

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 9
    Points
    9
    Par défaut
    Non, ça ne fait rien =/

    peut-être que si je mets tout le code ça pourrais vous aider à comprendre ?

  9. #9
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Perso je n'utiliserais pas les propriétés left, top, etc... mais je ferais un tableau à 2 dimensions représentant ta grille de sokoban. A chaque "case" de ce tableau tu affectes une valeur symbolisant le fait que la case soit vide ou avec une caisse ou avec un mur ou avec ton bonhomme par exemple.

    Ensuite quand tu appuis sur une touche tu regardes dans quelle case ca mettrait le bonhomme et tu verifies que la case est vide ou que c'est une caisse qui peut etre poussée dans la meme direction que le bonhomme (donc vérifier pour la case suivante).

    C'est une explication très succinte évidemment mais juste pour te donner une autre piste à explorer.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 9
    Points
    9
    Par défaut
    Je vais réfléchir à ta suggestion OhMonBato mais faudrait que tu m'en explique un peu plus si possible

    Sinon pour mon code le voici :

    j'ai 4 images pour Luigi (dos, face, gauche et droite) et lorsqu'il touche au levier qui est fermer je voudrais qu'il ne puisse plus avancer. Pareil pour les murs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    Dim temps_secondes_tableau1 As Integer
    Dim temps_minutes_tableau1 As Integer
     
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
     
    'on fait avancer le bonhomme vers la droite en cachant et en faisant
    'suivre les autres bonhommes...
    If KeyCode = vbKeyRight Then
    Call procEffaceImageDébut
    Imgluigi_droite.Left = Imgluigi_droite.Left + 50
    Imgluigi_gauche.Left = Imgluigi_gauche.Left + 50
    Imgluigi_face.Left = Imgluigi_face.Left + 50
    Imgluigi_dos.Left = Imgluigi_dos.Left + 50
    End If
     
    'on fait avancer le bonhomme vers le bas en cachant et en faisant
    'suivre les autres bonhommes...
    If KeyCode = vbKeyDown Then
    Call procEffaceImageBas
    Imgluigi_face.Top = Imgluigi_face.Top + 50
    Imgluigi_gauche.Top = Imgluigi_gauche.Top + 50
    Imgluigi_dos.Top = Imgluigi_dos.Top + 50
    Imgluigi_droite.Top = Imgluigi_droite.Top + 50
    End If
     
    'on fait avancer le bonhomme vers la gauche en cachant et en faisant
    'suivre les autres bonhommes...
    If KeyCode = vbKeyLeft Then
    Call procEffaceImageGauche
    Imgluigi_gauche.Left = Imgluigi_gauche.Left - 50
    Imgluigi_face.Left = Imgluigi_face.Left - 50
    Imgluigi_dos.Left = Imgluigi_dos.Left - 50
    Imgluigi_droite.Left = Imgluigi_droite.Left - 50
    If Imgluigi_gauche.Left + Imgluigi_gauche.Width = Imglevier_fermer.Left Then
    End
    End If
    End If
     
    'on fait avancer le bonhomme vers le haut en cachant et en faisant
    'suivre les autres bonhommes...
    If KeyCode = vbKeyUp Then
    Call procEffaceImageHaut
    Imgluigi_dos.Top = Imgluigi_dos.Top - 50
    Imgluigi_gauche.Top = Imgluigi_gauche.Top - 50
    Imgluigi_face.Top = Imgluigi_face.Top - 50
    Imgluigi_droite.Top = Imgluigi_droite.Top - 50
    End If
     
    If KeyCode = vbKeySpace Then
    'Test pour la porte
    Imglevier_fermer.Visible = False
    Tmrporte.Enabled = True
    End If
     
    End Sub
     
    Private Sub Form_Load()
     
    'temps initial pour faire le tableau
    temps_secondes_tableau1 = 60
    temps_minutes_tableau1 = 1
     
    Lbltemps.Caption = "1 : 60"
     
    'on cache les bonhommes et on laisse celui qui regarde vers la droite visible.
    Imgluigi_gauche.Visible = False
    Imgluigi_face.Visible = False
    Imgluigi_dos.Visible = False
     
    End Sub
     
    Public Sub procEffaceImageDébut()
     
    'on cache les bonhommes qui ne servent pas...
    Imgluigi_droite.Visible = True
    Imgluigi_gauche.Visible = False
    Imgluigi_face.Visible = False
    Imgluigi_dos.Visible = False
     
    End Sub
     
    Public Sub procEffaceImageBas()
     
    'on cache les bonhommes qui ne servent pas...
    Imgluigi_face.Visible = True
    Imgluigi_gauche.Visible = False
    Imgluigi_dos.Visible = False
    Imgluigi_droite.Visible = False
     
    End Sub
     
    Public Sub procEffaceImageGauche()
     
    'on cache les bonhommes qui ne servent pas...
    Imgluigi_gauche.Visible = True
    Imgluigi_face.Visible = False
    Imgluigi_dos.Visible = False
    Imgluigi_droite.Visible = False
     
    End Sub
     
    Public Sub procEffaceImageHaut()
     
    'on cache les bonhommes qui ne servent pas...
    Imgluigi_dos.Visible = True
    Imgluigi_face.Visible = False
    Imgluigi_gauche.Visible = False
    Imgluigi_droite.Visible = False
     
    End Sub
     
    Private Sub Tmrporte_Timer()
     
    'on fais ouvrir la porte et on arrête le timer
    Imgporte.Top = Imgporte.Top - 50
    If Imgporte.Top < 4440 Then
        Tmrporte.Enabled = False
    End If
     
    End Sub
     
    Private Sub Tmrtemps_Timer()
     
    'on calcule le temps...
    temps_secondes_tableau1 = temps_secondes_tableau1 - 1
     
    If temps_secondes_tableau1 = 0 Then
    temps_secondes_tableau1 = 60
    temps_minutes_tableau1 = temps_minutes_tableau1 - 1
    End If
     
    Lbltemps.Caption = temps_minutes_tableau1 & " : " & temps_secondes_tableau1
     
    End Sub

  11. #11
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par OhMonBato Voir le message
    Perso je n'utiliserais pas les propriétés left, top, etc... mais je ferais un tableau à 2 dimensions représentant ta grille de sokoban. A chaque "case" de ce tableau tu affectes une valeur symbolisant le fait que la case soit vide ou avec une caisse ou avec un mur ou avec ton bonhomme par exemple.

    Ensuite quand tu appuis sur une touche tu regardes dans quelle case ca mettrait le bonhomme et tu verifies que la case est vide ou que c'est une caisse qui peut etre poussée dans la meme direction que le bonhomme (donc vérifier pour la case suivante).

    C'est une explication très succinte évidemment mais juste pour te donner une autre piste à explorer.
    pas bête, à creuser...
    Xavier

  12. #12
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Tu fais un tableau correspondant aux lignes et aux colonnes de ta grille de sokoban. et tu affectes une valeur à chaque case de ce tableau, par exemple :

    0 : case vide
    1 : mur
    2 : caisse
    3 : cible pour caisse
    4 : bonhomme

    Une piece entourée de mur et avec 2 caisses et un bonhomme au milieu donnerait un tableau comme ceci :

    1 1 1 1 1 1 1 1
    1 0 0 0 0 0 0 1
    1 0 3 0 2 0 0 1
    1 0 4 0 0 0 0 1
    1 0 2 3 0 0 0 1
    1 0 0 0 0 0 0 1
    1 0 0 0 0 0 0 1
    1 1 1 1 1 1 1 1

    Dans cet exemple le bonhomme est dans la case Dalle(3,2) si je prend le tableau Dalle(Ligne,Colonne)

    si tu appuis sur la touche Fleche droite, le bonhomme peut t'il se deplacer ? Tu regardes d'abord le contenu de la case Dalle(3,3), elle vaut 0 donc vide, le bonhomme peut se déplacer

    si tu appuis sur la fleche bas, le bonhomme peut t'il se deplacer ? Tu regardes d'abord le contenu de la case Dalle(4,2), c'est 2 donc une caisse. Peut on pousser la caisse vers le bas, tu verifies le contenu de la case Dalle(5,2), c'est 0 tu peux y aller, etc....
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  13. #13
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Points : 9
    Points
    9
    Par défaut
    Daccord j'essai ceci, le tableau je le fais avec des images ?

    Merci de l'explication... Mais les colonnes et linges se content avec VB ?

  14. #14
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par OhMonBato Voir le message

    0 : case vide
    1 : mur
    2 : caisse
    3 : cible pour caisse
    4 : bonhomme



    1 1 1 1 1 1 1 1
    1 0 0 0 0 0 0 1
    1 0 3 0 2 0 0 1
    1 0 4 0 0 0 0 1
    1 0 2 3 0 0 0 1
    1 0 0 0 0 0 0 1
    1 0 0 0 0 0 0 1
    1 1 1 1 1 1 1 1

    Dans cet exemple le bonhomme est dans la case Dalle(3,2) si je prend le tableau Dalle(Ligne,Colonne)

    si tu appuis sur la touche Fleche droite, le bonhomme peut t'il se deplacer ? Tu regardes d'abord le contenu de la case Dalle(3,3), elle vaut 0 donc vide, le bonhomme peut se déplacer
    Pas Dalle (3, 4) ?
    Xavier

  15. #15
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Je me gourre peut etre mais non je ne pense pas avec un tableau(Ligne,Colonne) d'indice commencant à 0
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  16. #16
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Citation Envoyé par Daniel_P Voir le message
    Daccord j'essai ceci, le tableau je le fais avec des images ?

    Merci de l'explication... Mais les colonnes et linges se content avec VB ?
    Houla ! Tu ne connais pas les tableaux ?
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  17. #17
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par OhMonBato Voir le message
    Je me gourre peut etre mais non je ne pense pas avec un tableau(Ligne,Colonne) d'indice commencant à 0
    Si tableau(Ligne,Colonne) avec indice 0:

    on aurait tableau (2, 3) non?
    Xavier

  18. #18
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par OhMonBato Voir le message
    Houla ! Tu ne connais pas les tableaux ?
    apparemment non...
    Xavier

  19. #19
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Citation Envoyé par Asdorve Voir le message
    Si tableau(Ligne,Colonne) avec indice 0:

    on aurait tableau (2, 3) non?
    Lequel de nous 2 inverse ligne et colonne ?
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  20. #20
    Membre éclairé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 332
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par OhMonBato Voir le message
    Lequel de nous 2 inverse ligne et colonne ?
    c'est moi l'imbécile, oulà, la fin de journée est difficile..........
    Xavier

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. Réponses: 4
    Dernier message: 31/05/2009, 10h38
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo