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 :

Problème tkinter vitesse d'une balle [Python 3.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Par défaut Problème tkinter vitesse d'une balle
    Bonjour, j'ai pour la rentrée un programme à faire en python dont voici la consigne:

    Ecrire un programme de jeu fonctionnant de la manière suivante*:
    une balle se déplace au hasard sur un canevas, à vitesse faible. Le joueur doit essayer de
    cliquer sur cette balle à l'aide de la souris. S'il y arrive, il gagne un point, mais la balle se
    déplace plus rapidement et ainsi de suite. Arrêter le jeu au bout d'un certain nombre de clics
    et afficher le score atteint.

    Or j'ai un problème, lorsque je clique sur ma balle son sens de déplacement change bizarrement et la vitesse ne semble pas être croissante avec l'augmentation du score. Merci d'avance pour l'aide qui me sera fournie.

    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
    from tkinter import *
    from random import*
    from math import sin, cos
     
    #Définition des gestionnaires d'évenements: 
    def move():
        global x, y, flag, dx, dy
     
        if x > 485 or x < 15:
            dx = -dx
        x += dx
     
        if y > 485 or y < 15:
            dy = -dy
        y += dy
     
        can.coords(ball, x-15, y-15, x+15, y+15)
     
        if flag > 0:
            fen.after(50, move)
     
    def clicBall(event):
        global x, y, score, flag, ms, tap, dx, dy
        if event.x:
            tap+=1
        if flag == 1:
     
            if event.x >= x-15 and event.x <= x+15 and event.y >= y-15 and event.y <= y+15:
                score += 1
                dx += 2
                dy += 2
                labScore.configure(text= "Nombre de Points: "+str(score))
                gameOver()
     
    def gameOver():
        global tap, flag
     
        if tap == 50:
            labScore.configure(text= "Bravo! Score Final: "+str(score))
            stop()
     
    def start():
        global flag, ms
     
        flag += 1
     
        if flag == 1:
            labScore.configure(text= "Nombre de Points: "+str(score))
            ms = 6
            move()
     
    def stop():
        global flag, score
     
        flag = 0
        score = 0
     
    #========== Programme principal =============
    # les variables suivantes seront utilisées de manière globale :
    x, y = 150, 280
    flag = 0
    dx, dy = 5, 5
    vx = cos(1)
    score = 0
    tap = 0 
     
    #Création du widget principal ("maitre"):
    fen = Tk()
    fen.title("Petit jeu avec Tkinter")
     
    #Création des widgets "esclaves":
    can = Canvas(fen, bg= "dark grey", width= 500, height= 500)
    can.grid(row= 2, column= 0)
    ball = can.create_oval(x-15, y-15, x+15, y+15, outline= "black", fill= "green")
    can.bind("<Button-1>", clicBall)
    labScore = Label(fen, text= "Nombre de Points: 0")
    labScore.grid(row= 3, column= 0)
    Button(fen, text= "Débuter la Partie", command= start).grid(row= 0, column= 0)
    Button(fen, text= "Arrêter la Partie", command= stop).grid(row= 1, column= 0)
    Button(fen, text= "Quitter", command= fen.quit).grid(row= 4, column= 0)
    fen.mainloop()
    fen.destroy()
    Fichiers attachés Fichiers attachés

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

    Vous avez reçu un message pour savoir comment poster votre code.

    Citation Envoyé par JulienVrctr Voir le message
    Or j'ai un problème, lorsque je clique sur ma balle son sens de déplacement change bizarrement et la vitesse ne semble pas être croissante avec l'augmentation du score.
    C'est pas une question Python mais une question de "physique".
    Votre vitesse est un vecteur V qui a une longueur (proportionnelle à la vitesse) et une direction.
    Augmenter la vitesse change la longueur mais pas la direction (c'est le rebond élastique sur les bords qui fait çà). Vous pouvez représenter longueur et direction à l'instant t par leur projection (dx, dy) sur les axes.
    Vous comprenez que traduire "augmenter la vitesse" par l'ajout de 2 à dx et dy, est faux et produit ce que vous constatez: des fois, çà ralentit, d'autres fois çà change de direction...
    Donc il va falloir revoir tout çà.

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

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Augmenter la vitesse change la longueur mais pas la direction (c'est le rebond élastique sur les bords qui fait çà). Vous pouvez représenter longueur et direction à l'instant t par leur projection (dx, dy) sur les axes.
    Vous comprenez que traduire "augmenter la vitesse" par l'ajout de 2 à dx et dy, est faux et produit ce que vous constatez: des fois, çà ralentit, d'autres fois çà change de direction...
    Donc il va falloir revoir tout çà.
    Je dois donc rajouter une variable pour gérer la vitesse?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    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 746
    Par défaut
    Citation Envoyé par JulienVrctr Voir le message
    Je dois donc rajouter une variable pour gérer la vitesse?
    Vous avez besoin de savoir passer d'une vitesse exprimée par (longueur, angle) aux (dx, dy) correspondants et réciproquement.
    note: je suppose que c'est pas pour rien que vous avez importé les fonctions sin et cos du module math...

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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 3
    Par défaut
    J'ai fini par réussir, merci et bonnes fêtes à vous.

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

Discussions similaires

  1. Problème de position d'une balle
    Par ApprentiProgrammeur dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 31/10/2013, 15h25
  2. [Box2D] Problème avec la vitesse d'une balle
    Par Emilie L. dans le forum Physique
    Réponses: 1
    Dernier message: 29/09/2010, 15h29
  3. Problème déplacement d'une balle
    Par Coco4486 dans le forum Ogre
    Réponses: 21
    Dernier message: 09/05/2008, 11h47
  4. [debutant] faire bouger une balle et une raquette problème
    Par jerem721 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 26/11/2007, 20h26
  5. Réponses: 24
    Dernier message: 24/07/2007, 17h48

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