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

Tkinter Python Discussion :

Casse brique en python


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Casse brique en python
    Bonjour,

    J'ai pour projet de réaliser un casse brique sous python. Mais je bloque sur les collisions de la balle avec les briques. Si vous pouvez m'aider svp


    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
     
    from tkinter import*
    from random import randrange
    from math import*
     
    #On definie les paramétres
    XMAX,YMAX=550,600
    X,Y=265,550
    DX,DY=-10,-10
    xbar,ybar=275,580
    RAYON=8
    flag = 0
     
    #Mouvement de la balle
    def move():
        global X,Y,DX,DY,XMAX,YMAX,balle,flag,RAYON
        xp, yp = X+DX, Y+DY
     
        #rebond a droite
        if xp > YMAX-35 :
            DX=-DX
        #rebond a gauche
        if xp < 0:
            DX=-DX
        #rebond en haut
        if yp <0:
            DY=-DY
        #rebond sur la raquette
        if yp >= ybar-10  and xp < xbar+50 and xp > xbar-50:
            DY = -DY
     
     
     
        X, Y = X+DX, Y+DY
        Can1.coords(balle,X-RAYON,Y-RAYON,X+RAYON,Y+RAYON)
     
     
        if flag > 0:
            fenetre.after(45,move)
     
     
    def start(event):
        global flag
        flag=flag+1
        if flag==1:
            move()
        "démarrer"
     
    def stop(event):
        "arret de l'animation"
        global flag
        flag =0
     
    #Pour quitter le programme    
    def Quitter (event):
        fenetre.destroy()
     
     
     
    def Clavier(event):
     
        global xbar,ybar
        touche=event.keysym
     
     
        if touche == 'Left':
            xbar=xbar-30
     
        if touche == 'Right':
            xbar=xbar+30
     
        if touche == 'Escape':
            fenetre.destroy
     
     
        Can1.coords(raquette,xbar-50,ybar-8,xbar+50,ybar+8)
     
     
     
    #Définition de la fenetre 
    fenetre = Tk() 
    fenetre.title('casse briques')
    #Indique les normes du Canevas
    Can1 = Canvas(fenetre, width = XMAX, height = YMAX, bg='white')
    Can1.pack()
    #Définition du boutton "Start"
    Button(fenetre, text='Démarrer',command=start).pack(side=LEFT, padx=15,pady=10)
    Can1.bind("<Return>",start)
    #Définition du boutton "Quitter"
    Button(fenetre, text='Quitter',command=fenetre.destroy).pack(side=RIGHT,padx=15,pady=10)
    Can1.bind("<Escape>",Quitter)
    #Cliquer sur p pour mettre en pause
    Can1.bind("<p>",stop)
     
    #Création de la raquette et de la balle 
    raquette = Can1.create_rectangle(xbar-50,ybar-8,xbar+50,ybar+8,width=2,fill='black')
    balle = Can1.create_oval(X-RAYON,Y-RAYON,X+RAYON,Y+RAYON,width=1,fill='red')
    #Création des briques
    for yb in range(50, 150, 20):
        for xb in range(50, 500, 50):
            brique=Can1.create_rectangle(xb, yb, xb+50, yb+20, fill='green') 
     
     
     
     
     
    Can1.focus_set()
     
    Can1.bind('<Key>', Clavier) 
     
    fenetre.mainloop()

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 711
    Points : 31 028
    Points
    31 028
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Il te faut mettre ton code entre (bouton "#" un peu au dessus de la zone d'édition) sinon il ressort non indenté. Et comme l'indentation est un des éléments primordiaux de ce langage...

    Sinon d'un point de vue mathématique, une balle c'est un cercle, une brique c'est un rectangle (donc 4 segments de droite) donc la collision c'est quand le point d'intersection entre le cercle et l'un des 4 segments se met à exister. Et (optimisation), comme la balle possède un déplacement en X et un autre en Y, seul le premier segment de droite se trouvant dans la direction du X ou du Y sont susceptibles d'être impactés par ladite collision...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Ou est ce qu'il faut mettre le # ?
    Mais comment savoir quel segment la balle a atteinte

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 711
    Points : 31 028
    Points
    31 028
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par younes_88 Voir le message
    Ou est ce qu'il faut mettre le # ?
    Le "#" n'est pas à mettre. C'est le bouton qui permet de mettre un texte entre balises "[ code ]" et "[ /code ]" (sans espace). Il est juste à droite des autres boutons de mise en forme au dessus de la zone d'édition. Sinon tu peux aussi très bien mettre toi même ces balises (la première avant le code, et la seconde après). Re-édites ton premier post, un modo l'a corrigé, et regarde comment il est écrit.

    Citation Envoyé par younes_88 Voir le message
    Mais comment savoir quel segment la balle a atteinte
    Ben la méthode de base serait de tous les tester. Sinon un petit peu de réflexion. Le segment sera fatalement l'un des deux celui qui sont en opposition directe avec le mouvement de la balle. Si la balle monte vers la droite, le segment sera alors celui du bas ou celui de gauche...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    En créant brique par brique j'y arrive car je connais toutes les coordonnées de mes briques et comme ca je dis que si y de la balle atteint y de la brique n alors il supprime la brique et yballe=-yballe. Mais en créant le mur de brique avec une boucle for je sais pas comment faire parsque je connais pas les coordonées de chaque brique

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par younes_88 Voir le message
    J'ai pour projet de réaliser un casse brique sous python. Mais je bloque sur les collisions de la balle avec les briques.
    Une solution simple est de chercher si des briques (des items de type rectangle qui les représentent) ont une intersection (.find_overlapping) avec le rectangle (retourné par .bbox) occupé par la balle.
    La difficulté sera ensuite de trouver le côté pour calculer la nouvelle "vitesse" due au rebond.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Une solution simple est de chercher si des briques (des items de type rectangle qui les représentent) ont une intersection (.find_overlapping) avec le rectangle (retourné par .bbox) occupé par la balle.
    La difficulté sera ensuite de trouver le côté pour calculer la nouvelle "vitesse" due au rebond.


    - W
    Mais faudrait mettre les briques dans une liste et tester si la longueur de la liste a des intersection avec la balle ?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par younes_88 Voir le message
    Mais faudrait mettre les briques dans une liste et tester si la longueur de la liste a des intersection avec la balle ?
    Vos briques sont déjà sur le Canvas, .find_overlapping les trouvera: pas besoin de liste. Vous avez juste à ouvrir la documentation donnée dans le lien pour comprendre comment çà marche et essayer pour voir ce que çà fait.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vos briques sont déjà sur le Canvas, .find_overlapping les trouvera: pas besoin de liste. Vous avez juste à ouvrir la documentation donnée dans le lien pour comprendre comment çà marche et essayer pour voir ce que çà fait.

    - W
    Canvas.find_overlapping(x1, y1, x2, y2) les x et y correspondant coordonnées du mur ou de chaque brique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for yb in range(50, 150, 20):
        for xb in range(50, 500, 50):
            brique=Can1.create_rectangle(xb, yb, xb+50, yb+20, fill='green')
        if Canvas.find_overlapping(xb, yb, xb+50, yb+20 ):
            DY=-DY

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par younes_88 Voir le message
    Canvas.find_overlapping(x1, y1, x2, y2) les x et y correspondant coordonnées du mur ou de chaque brique ?
    Vous cherchez les collisions entre la balle et les briques non?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vous cherchez les collisions entre la balle et les briques non?

    - W
    Oui et quand la balle atteint une brique, la brique disparait et la balle continue puis revient

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par younes_88 Voir le message
    Oui et quand la balle atteint une brique, la brique disparait et la balle continue puis revient
    Et ben, voilà rien de plus que ce que je racontais précédemment:
    Une solution simple est de chercher si des briques (des items de type rectangle qui les représentent) ont une intersection (.find_overlapping) avec le rectangle (retourné par .bbox) occupé par la balle.
    La difficulté sera ensuite de trouver le côté pour calculer la nouvelle "vitesse" due au rebond.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Et ben, voilà rien de plus que ce que je racontais précédemment:


    - W
    Comment trouver cette intersection ? Canvas.find_overlapping(x1, y1, x2, y2) a quoi correspondent x1 y1 x2 y2

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par younes_88 Voir le message
    Comment trouver cette intersection ? Canvas.find_overlapping(x1, y1, x2, y2) a quoi correspondent x1 y1 x2 y2
    à ce que retourne .bbox(balle)...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    à ce que retourne .bbox(balle)...

    - W
    Comme ça ça marche mais y'a toute la ligne qui disparait
    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
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    from tkinter import *
    from random import randrange
    from math import *
     
    ## Declaration des variables
    # Dimensions
    XMAX, YMAX = 550, 600
     
    # Position et vitesse
    X, Y    = 265, 550
    DX, DY  = -10, -10
     
    # Coordonées de la barre
    xbar, ybar = 275, 580
     
    # Propriétés de la balle
    RAYON   = 8
    flag    = 0
     
     
     
     
     
    # Mouvement de la balle
    def move():
        global X, Y, DX, DY, XMAX, YMAX, balle, flag, RAYON
        xp = X + DX
        yp = Y + DY
     
        for i in range(len(liste_brique_graphique)):
            if (yp == coord_y[i]):
                if (liste_brique_etat[i] == True):
                    # la balle repart
                    DY = -DY
     
                    # On supprime la brique i graphiquement
                    Can1.delete(fenetre, liste_brique_graphique[i])
     
                    # On supprime la brique i graphiquement
                    liste_brique_etat[i] = False
     
     
     
        # rebond a droite
        if xp > YMAX - 35:
            DX = -DX
        # rebond a gauche
        if xp < 0:
            DX = -DX
        # rebond en haut
        if yp < 0:
            DY = -DY
        # rebond sur la raquette
        if yp >= ybar - 10 and xp < xbar + 50 and xp > xbar - 50:
            DY = -DY
     
        X, Y = X + DX, Y + DY
        Can1.coords(balle, X - RAYON, Y - RAYON, X + RAYON, Y + RAYON)
     
        if flag > 0:
            fenetre.after(45, move)
     
     
    def start(event):
        global flag
        flag = flag + 1
        if flag == 1:
            move()
        "démarrer"
     
    def stop(event):
        "arret de l'animation"
        global flag
        flag = 0
     
    # Pour quitter le programme
    def Quitter(event):
        fenetre.destroy()
     
     
    def Clavier(event):
        global xbar, ybar
        touche = event.keysym
     
        if touche == 'Left':
            xbar = xbar - 30
     
        if touche == 'Right':
            xbar = xbar + 30
     
        if touche == 'Escape':
            fenetre.destroy
     
        Can1.coords(raquette, xbar - 50, ybar - 8, xbar + 50, ybar + 8)
     
    # Définition de la fenetre
    fenetre = Tk()
    fenetre.title('casse briques')
    # Indique les normes du Canevas
    Can1 = Canvas(fenetre, width=XMAX, height=YMAX, bg='white')
    Can1.pack()
    # Définition du boutton "Start"
    Button(fenetre, text='Démarrer', command=move).pack(side=LEFT, padx=15, pady=10)
    Can1.bind("<Return>", start)
    # Définition du boutton "Quitter"
    Button(fenetre, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=15, pady=10)
    Can1.bind("<Escape>", Quitter)
    # Cliquer sur p pour mettre en pause
    Can1.bind("<p>", stop)
     
    # Création de la raquette et de la balle
    raquette = Can1.create_rectangle(xbar - 50, ybar - 8, xbar + 50, ybar + 8, width=2, fill='black')
    balle = Can1.create_oval(X - RAYON, Y - RAYON, X + RAYON, Y + RAYON, width=1, fill='red')
     
    # Création de la liste
    liste_brique_graphique = []
    liste_brique_etat = [True]*len(liste_brique_graphique)
    coord_x = []
    coord_y = []
     
     
    for y in range(50, 110, 20):
        for x in range (50, 500, 50):
            #On crée un objet brique
            brick_rect = Can1.create_rectangle(x, y, x+50, y+20, fill='green')
     
            coord_x.append(x);
            coord_y.append(y);
     
            # On ajoute la brique graphique dans la liste
            liste_brique_graphique.append(brick_rect)
     
            # On ajoute l'état de la brique dans la liste
            # True = brique est présente
            # False = brique est détruite
            liste_brique_etat.append(True)
     
    nb_brique=0
     
    for i in range(len(liste_brique_etat)):
                   if(liste_brique_etat[i]==True):
                       nb_brique=nb_brique+1
                       if (nb_brique==0):
                           Can1.create_text(250,250,text="PERDU  :(",fill='black')
                           print(nb_brique)
     
     
     
     
     
     
     
     
    Can1.focus_set()
     
    Can1.bind('<Key>', Clavier)
     
    fenetre.mainloop()

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par younes_88 Voir le message
    Comme ça ça marche mais y'a toute la ligne qui disparait
    Je vous ai suggéré d'utiliser .bbox et .find_overlapping et vous partez dans une autre direction...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Je vous ai suggéré d'utiliser .bbox et .find_overlapping et vous partez dans une autre direction...

    - W
    Je ne comprend pas comment fonctionnant .bbox et .find_overlapping. Est ce qu'il faut utiliser des boucles if ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Canvas.find_overlapping(xb, yb, xb+50, yb+20 ):
                  DY=-DY

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par younes_88 Voir le message
    Je ne comprend pas comment fonctionnant .bbox et .find_overlapping.
    Il n'y a rien à comprendre. Ce sont des fonctions (ou plus précisément des méthodes du Canvas tkinter): elles font ce qu'en dit leur description que l'on trouve dans une documentation:
    Pour bbox:
    Canvas.bbox(tagOrId=None)

    Retourne un tuple (x1, y1, x2, y2) qui décrit un rectangle qui renferme tous les objets identifiés par tagOrId. Si l’argument n’est pas précisé, le rectangle retourné est le plus petit qui contient tous les items présents dans le canevas. Le coin supérieur gauche du rectangle est (x1, y1) et son coin inférieur droit est (x2, y2).
    et pour find_overlapping:

    Canvas.find_enclosed(x1, y1, x2, y2)

    Retourne la liste des identifiants numériques des items situés entièrement à l’intérieur du rectangle déterminé par (x1, y1) (coin supérieur gauche) et (x2, y2) (coin inférieur droit).

    Canvas.find_overlapping(x1, y1, x2, y2)

    Similaire à la méthode précédente, mais sélectionne tous les items qui ont au moins un point commun avec le rectangle.
    Puis vous essayez de les faire marcher.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 711
    Points : 31 028
    Points
    31 028
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par younes_88 Voir le message
    Est ce qu'il faut utiliser des boucles if ?
    Ouais ben quand on en arrive à dire que "if" est une boucle, c'est toute la base de l'algorithmique qu'il faut reprendre !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    pour find_overlapping:

    - W
    Ce n'est pas ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    x1, y1, x2, y2 = Can1.coords(brique)
        if len(Can1.find_overlapping(x1,y1, x2, y2))>0:
            Can1.delete(fenetre,brique)
            DY=-DY

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/05/2018, 07h56
  2. Réponses: 5
    Dernier message: 06/09/2006, 09h35
  3. [Source] [SDL] Commencement d'un casse brique
    Par grincheux01 dans le forum Contribuez
    Réponses: 8
    Dernier message: 29/06/2006, 12h27
  4. Button "Start" dans un jeu de casse brique
    Par tex78 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 24/01/2006, 15h47
  5. [Tkinter] casse brique
    Par mamatt77 dans le forum Tkinter
    Réponses: 6
    Dernier message: 18/04/2005, 09h43

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