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 :

Balle qui rebondit [Python 3.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut Balle qui rebondit
    Bonjour

    Nous sommes dans un canevas tkinter : c'est l'histoire d'une balle, qui part vers la droite, et quand elle atteint le bord du canevas elle repart vers la gauche, quand elle atteint le bord elle repart vers la droite, etc.....
    Je suis coincée là-dessus depuis hier après midi. Je ne comprends pas pourquoi mon code ne fonctionne pas.

    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
    from tkinter import *
     
     
     
    def balle(i) :
        global x,y,n
        x[n] = x[n] + i
        can.coords(rond,x[n],y[n],x[n]+20,y[n]+20)
     
     
    def bouge() :
        n=1
        if x[n] > x[n-1] and x[n] <= 380:
            balle(10)
            if x[n] == 380 :
                balle(-10)
        if x[n] < x[n-1] and x[n] >= 0 :
            balle(-10)
            if x[n] == 0 :
                balle(10)
     
            balle(x[n])
     
    n = 1
    x = [180,190]
    y = [190,190]
     
    fen = Tk()
    fen.title('Balle qui rebondit')
     
    can = Canvas(fen,bg='pale goldenrod',width=400,height=400)
    can.pack()
     
    rond = can.create_oval(x[n],y[n],x[n]+20,y[n]+20,outline='firebrick1',fill='firebrick1')
     
    Button(fen,text='Bouge !',bg='pale goldenrod',fg='firebrick1',command=bouge).pack(side=BOTTOM)
     
    fen.mainloop()
    Malheureusement, là elle va bien vers la droite...mais c'est tout, je n'arrive pas à la faire revenir. J'ai tout essayé. Enfin non pas tout puisque ça ne marche pas, donc j'ai tout essayé sauf la bonne solution

    Est-ce que vous pourriez me mettre sur la voie S.V.P. ?

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Regarde les conditions de ta fonction bouge :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def bouge() :
    .....
        if x[n] > x[n-1] and x[n] <= 380:
            ....
        if x[n] < x[n-1] and x[n] >= 0 :
            .....
    Au départ tu bouge vers la droite. Donc x[n] > x[n-1] est toujours vérifié. Lorsque tu atteint le mur, x[n] vaut surement 381, mais x[n-1] vaut 380. Donc tu ne vérifies aucune des 2 conditions

  3. #3
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    Au début j'avais mis while, justement pour cadrer mon X[n], mais ça ne fonctionne pas non plus, encore moins bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def bouge() :
        n=1
        while 0 <= x[n] <=380  : 
            if x[n] > x[n-1] :
                balle(10)
                if x[n] == 380 :
                    balle(-10)
            if x[n] < x[n-1]  :
                balle(-10)
                if x[n] == 0 :
                    balle(10)
     
            balle(x[n])
    Du moins je suis sur la bonne voie non ?
    Parce que je commence à douter là en fait

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

    Quand vous avez ce genre de soucis, l'instruction "print" permet de vous afficher l'état de vos variables et de vous posez des questions lorsque leurs valeurs ne sont pas celles attendues.
    Ajoutez un print (x[n], x[n-1]) juste après l'entrée dans la fonction "bouge"...

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

  5. #5
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    190 et 180. C'est ce que je croyais que c'était

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def bouge() :
        n=1
        while 0 <= x[n] <=380  : 
            if x[n] > x[n-1] :
                balle(10)
                if x[n] == 380 :
                    balle(-10)
            if x[n] < x[n-1]  :
                balle(-10)
                if x[n] == 0 :
                    balle(10)
    Là, moi j'ai l'impression de lui dire :
    Tant que x (190 pour l'instant) est compris entre 0 et 380,
    si x est > au précédent x de la liste alors on continue, on fait +10, jusqu'à 380 maxi
    si x égal à 380, alors on recule, on fait -10
    si x est < au précédent x de la liste, alors on fait -10 jusque 0 maxi
    et si x égal 0, alors on repart dans l'autre sens, on fait +10

    Mais ce n'est pas ce que Python comprend

    Edit : Ah oui, j'ai cliqué plusieurs fois sur mon bouton, j'ai vu l'évolution de mes x, en effet je vois le problème. Enfin je ai pas encore identifié la cause mais j'avance

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par RowanMayfair Voir le message
    si x est > au précédent x de la liste alors on continue, on fait +10, jusqu'à 380 maxi
    si x égal à 380, alors on recule, on fait -10
    Plutôt que d'avancer et de reculer ensuite si tu dépasses, peut-être tu pourrais regarder si tu peux avancer avant d'avancer...
    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]

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

Discussions similaires

  1. [Python 3.X] Balle qui rebondit
    Par RowanMayfair dans le forum Général Python
    Réponses: 3
    Dernier message: 12/04/2019, 14h00
  2. Réponses: 0
    Dernier message: 21/05/2018, 17h13
  3. Balle qui ne bouge que si ej bouge la souris
    Par Thinking dans le forum SFML
    Réponses: 1
    Dernier message: 29/12/2014, 15h39
  4. [CS3] une balle qui rebondit de tout les cotés du document
    Par carasmel dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 08/07/2011, 13h00
  5. pygame ballon qui rebondit
    Par Invité dans le forum GUI
    Réponses: 2
    Dernier message: 23/01/2010, 02h32

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