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

Vue hybride

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

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    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
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

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

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    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
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    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
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    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
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    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

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