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

Programmation multimédia/Jeux Python Discussion :

Hitbox Rectangle Casse brique [Python 3.X]


Sujet :

Programmation multimédia/Jeux Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Hitbox Rectangle Casse brique
    Bonjour, en ce moment j'essaie de créer un casse brique et j'aimerais faire rebondir la balle sur les côtés de mon rectangle.
    Actuellement j'ai réussi à créer une fenêtre avec un rectangle pouvant bouger grâce aux flèches directionnelles, une balle qui bouge de façon aléatoire et rebondi sur les côtés de ma fenêtre.
    Puis-je avoir quelques conseils pour créer cette fameuse "hitbox" sur mon rectangle.

    Voici mon code:

    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
    from tkinter import * #Le programme va aller chercher toute les fonctions de la bibliothèque Tkinter
    import math,random    #Le programme va aller chercher toute les fonctions de la bibliotèque math
     
    fenetre= Tk()
    fenetre.title("Casse briques")
     
    def Clavier(event):
        """ Gestion de l'événement Appui sur une touche du clavier """
        global x1,x2
        touche = event.keysym
        # déplacement vers la droite
        if touche == 'Right' and x2<=549:
            x1 += 13.5333333333
            x2 += 13.5333333333
        # déplacement vers la gauche
        if touche == 'Left' and x1>=0.4:
            x1 -= 13.5333333333
            x2 -= 13.5333333333
        #On donne les nouvelles coordonnées à la raquette
        Can1.coords(Rectangle1,x1,y1,x2,y2)
        print(x1)
        print(x2)
     
    def deplacement():
        """ Déplacement de la balle """
        global X,Y,DX,DY,RAYON,LARGEUR,HAUTEUR,FLAG,x1,x2,y1,y2
        # rebond à droite
        if X+RAYON+DX > LARGEUR:
            X = 2*(LARGEUR-RAYON)-X
            DX = -DX
     
        # rebond à gauche
        if X-RAYON+DX < 0:
            X = 2*RAYON-X
            DX = -DX
     
        # rebond en bas
        if Y+RAYON+DY > HAUTEUR:
            Y = 2*(HAUTEUR-RAYON)-Y
            DY = -DY
     
        # rebond en haut
        if Y-RAYON+DY < 0:
            Y = 2*RAYON-Y
            DY = -DY
     
        X = X+DX
        Y = Y+DY
     
        # affichage
        Can1.coords(Balle,X-RAYON,Y-RAYON,X+RAYON,Y+RAYON)
     
        if FLAG >0:
            FLAG = 1
            fenetre.after(50,deplacement) # mise à jour toutes les 50 ms
     
    def start():
     # demarrage de l'animation"
        global FLAG
        if FLAG ==0: # pour ne lancer qu’une seule boucle
            FLAG =1
            deplacement()
     
     
    Can1 = Canvas(fenetre, width=550, height=600, highlightthickness=0)#On défini la taille de la fenêtre de jeu grace au canvas
    Can1.pack()#Et on n'oublie pas le .pack() pour l'afficher
    #highlightthickness=0 Permet d'enlever les bordures dû au "focus" pour
    #que le programme reconnaisse les touches
     
    LARGEUR =550 #Largeur de la fenêtre
    HAUTEUR = 600 #Hauteur de la fenêtre
     
    FLAG= 0
    x1 = ((1/3)*LARGEUR)+20 #Côté gauche du rectangle
    y1 = 590 #Deuxième valeur de la hauteur
    x2 = ((2/3)*LARGEUR)-20 #Côté droit du rectangle
    y2 = 560 #Première valeur de la hauteur
     
    #En définissant la largeur du rectangle de cette façon on obtient une largeur égale à 1/3 de l'écran
    #Et au milieu de l'écran.Ensuite on enlève 20 d'abscisse de chaque côté pour
    #Raccourcir la barre trop longue à mon goût
     
    Rectangle1 = Can1.create_rectangle(x1,y1,x2,y2,fill='blue')
     
    #Créer les fonctions pour faire bouger le rectangle:
    #Pour que le canvas capture les événement clavier, il faut qu'il soit sélectionner
    #(Qu'il est le focus), donc on le sélectionne grâce à cette commande qui lui donne
    #Ces contours gris
    Can1.focus_set()
    Can1.bind('<Key>',Clavier)
     
    #Coordonnées de la balles
    RAYON = 15 # rayon de la balle
    X = LARGEUR/2 #
    Y = 545 #Pour la mettre au dessus de la raquette qui est à 560pixels
     
    # Création de la balle
    Balle = Can1.create_oval(X-RAYON,Y-RAYON,X+RAYON,Y+RAYON,width=1,fill='green')
     
    # direction initiale aléatoire de la balle
    vitesse = random.uniform(1.8,2)*5
    angle = random.uniform(0,2*math.pi)
    DX = vitesse*math.cos(angle)
    DY = vitesse*math.sin(angle)
     
    start()
     
    fenetre.mainloop()
    Merci d'avance.

    Ilan

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Salut,

    Citation Envoyé par IlanLeBlagueur Voir le message
    Puis-je avoir quelques conseils pour créer cette fameuse "hitbox" sur mon rectangle.
    Quelle est la différence entre rebondir sur le rectangle et rebondir sur les bords?

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

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut, la différence c'est que le rectangle est mobile.
    Du coup je peux pas assigner une quelconque coordonnée pour laquelle la balle doit rebondit pour qu'elle rebondisse.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 778
    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 778
    Par défaut
    Citation Envoyé par IlanLeBlagueur Voir le message
    Salut, la différence c'est que le rectangle est mobile.
    Du coup je peux pas assigner une quelconque coordonnée pour laquelle la balle doit rebondit pour qu'elle rebondisse.
    La balle est aussi mobile et çà ne vous empêche pas de connaître ses coordonnées à chaque instant via les variables globales (x1 et x2). Vous pouvez aussi demander ces coordonnées au Canvas via .coords. Donc vous avez tout ce qu'il faut dans la fonction "deplacement"...

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un casse-briques
    Par psgkiki dans le forum Assembleur
    Réponses: 4
    Dernier message: 02/04/2007, 16h18
  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