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 :

(une autre) Balle qui rebondit - récursivité


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 (une autre) Balle qui rebondit - récursivité
    Bonjour (ou re...),

    Je découvre donc la fonction sympa .after

    Mais ça fait 3 heures que je tente de comprendre où est mon erreur dans ce tout petit script :

    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
    def move() :
        "déplacement de la balle"
        global x1,y1,dx,dy,flag
        x1,y1 = x1 + dx,y1 + dy
        if 125 <= x1 <= 220 and 0 <= y1 <= 95 :
            dx,dy = 5,5
        if 95 <= x1 <= 220 and 95 <= y1 <= 220 :
            dx, dy = -5,5
        if 0 <= x1 <= 95 and 125 <= y1 <= 220 :
            dx,dy = -5,-5
        if 0 <= x1 <= 125 and 0 <= y1 <= 125 :
            dx,dy = 5,-5
        can1.coords(oval1,x1,y1,x1+30,y1+30)
        if flag > 0 :
            fen1.after(50,move)
    
    def stop_it():
        global flag
        flag = 0
    
    def start_it() :
        global flag
        if flag == 0 :
            flag = 1
            move()
    
    x1,y1 = 125,0
    dx,dy = 5,5
    flag = 0
    
    fen1 = Tk()
    fen1.title("Exercice d'animation avec tkinter")
    
    can1 = Canvas(fen1,bg='dark grey',height=250,width=250)
    can1.pack(side=LEFT,padx=5,pady=5)
    oval1 = can1.create_oval(x1,y1,x1+30,y1+30,width=2,fill='pink')
    Button(fen1,text='Quitter',width=8,command=fen1.quit).pack(side=BOTTOM)
    Button(fen1,text='Démarrer',width=8,command=start_it).pack()
    Button(fen1,text='Arrêter',width=8,command=stop_it).pack()
    
    fen1.mainloop()
    
    fen1.destroy()
    J'ai mis des "print" partout, il semble que ce soit entre la fin de la boucle et....elle ne repart pas, puisque mon y1 continue de descendre en-dessous de 0.
    Il est pourtant clairement borné non ?

    Peut-être que des yeux neufs verront...ce que je ne suis pas capable de voir.

    D'avance merci

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

    Citation Envoyé par RowanMayfair Voir le message
    Peut-être que des yeux neufs verront...ce que je ne suis pas capable de voir.
    Faites un print(x1, y1, dx, dy) et regardez ce qu'il se passe.

    note: écrire proprement des if ... elif... else... est quelque chose qu'on doit avoir appris avant de se lancer dans tkinter.

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

  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
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Faites un print(x1, y1, dx, dy) et regardez ce qu'il se passe.

    note: écrire proprement des if ... elif... else... est quelque chose qu'on doit avoir appris avant de se lancer dans tkinter.

    - W
    J'ai vu ce qu'il se passait. Je n'ai pas oublié ce conseil d'afficher ce que fait le programme quand on peut (j'applique les conseils qu'on me donne...du moins j'essaie) Mais je comprends pas pourquoi.

    Et je ne sais toujours pas ce qui cloche avec mes if Je viens de relire le cours concerné, il est succint.....et ne m'éclaire pas.

    Donc si personne ne me le dit, je ne le saurai pas, et continuerai de faire cette erreur.

    M'embarquer seule dans cet apprentissage, alors que je n'ai absolument aucune notion de programmation au départ, et personne dans mon entourage pour m'aider, était peut-être trop ambitieux. Je ne sais pas.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 748
    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 748
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    J'ai vu ce qu'il se passait. Je n'ai pas oublié ce conseil d'afficher ce que fait le programme quand on peut (j'applique les conseils qu'on me donne...du moins j'essaie) Mais je comprends pas pourquoi.
    Si vous avez vu ce qu'il se passait, vous pourriez commencer décrire ce qui ne va pas dans la suite des x1, y1, dx, dy affichés et arriver à vous dire "tiens lorsque les valeurs de x1, y1 sont ... dx dy devraient être....".
    Tant que vous n'avez pas sorti çà, vous ne pourrez pas relire votre code "intelligemment" pour arriver à comprendre le problème.


    - 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
    la dernière ligne de ma boucle continue...avec dx =5 et dy = -5, donc y1 diminue en-dessous de 0 alors qu'il ne devrait pas, sans que je comprenne pourquoi.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 748
    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 748
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    la dernière ligne de ma boucle continue...avec dx =5 et dy = -5, donc y1 diminue en-dessous de 0 alors qu'il ne devrait pas, sans que je comprenne pourquoi.
    Ben vous relisez votre code...
    Dans la suite de tests:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        if 125 <= x1 <= 220 and 0 <= y1 <= 95 :
            dx,dy = 5,5
        if 95 <= x1 <= 220 and 95 <= y1 <= 220 :
            dx, dy = -5,5
        if 0 <= x1 <= 95 and 125 <= y1 <= 220 :
            dx,dy = -5,-5
        if 0 <= x1 <= 125 and 0 <= y1 <= 125 :
            dx,dy = 5,-5
    qu'est ce qui est supposé modifier dx, dy lorsque y1 < 0?

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

Discussions similaires

  1. [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
  2. Réponses: 0
    Dernier message: 04/03/2011, 12h16
  3. Réponses: 3
    Dernier message: 28/11/2008, 08h21
  4. Imprimer une autre page qui est en PHP
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/08/2005, 19h32

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