Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1877 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Animation en Python

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Animation en Python

n°2258129
L'ane onym​e
All roads lead to roam
Posté le 14-05-2015 à 18:34:31  profilanswer
 

J'ai un soucis avec des animations : j'aimerai que l'image s'update à chaque passage dans le while, or, aucune image ne s'affiche. Par contre, quand je tue le programme, une image statique apparait.
Une idée de l'origine du problème ? Merci !
 

Code :
  1. from tkinter import *
  2. from random import randint
  3. class Personne:
  4.     """Une personne, caractérisée par une position en x et en y, cercle de rayon 1"""
  5.     def __init__(self,x,y):
  6.         self.x=x
  7.         self.y=y
  8.         self.fx=0#Pas de force au repos
  9.         self.fy=0#Idemn
  10.     def mvtDroite(self):
  11.         self.fx+=1
  12.     def mvtGauche(self):
  13.         self.fx-=1
  14.     def mvtHaut(self):
  15.         self.fy+=1
  16.     def mvtBas(self):
  17.         self.fy-=1
  18.     def deplacement(self):#Sur une salle carrée de 500 unités par 500unités
  19.        
  20.         if(self.x<-2):
  21.             self.mvtDroite
  22.         elif(self.x>2):
  23.             self.mvtGauche
  24.         if(self.y>0):
  25.             self.mvtBas
  26.      
  27.     def collision(self,tableauPersonnes):
  28.         for i in range (len(tableauPersonnes)):
  29.             d2=(self.x-tableauPersonnes[i].x)**2+(self.y-tableauPersonnes[i].y)**2
  30.             if(d2<=4):#La sphère touche la sphère i
  31.                 if(self.y>tableauPersonnes[i].y):#Si on est au dessus de i
  32.                     if(self.fy<0):#Et que l'on va en bas
  33.                         tableauPersonnes[i].y+=self.fy#On pousse i
  34.                         self.fy=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
  35.                 if(self.y<tableauPersonnes[i].y):#Si on est au dessous de i
  36.                     if(self.fy>0):#Et que l'on va en haut
  37.                         tableauPersonnes[i].y+=self.fy#On pousse i
  38.                         self.fy=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
  39.                 if(self.x>tableauPersonnes[i].x):#Si on est à doite de i
  40.                     if(self.fx<0):#Et que l'on va à gauche
  41.                         tableauPersonnes[i].x+=self.fx#On pousse i
  42.                         self.fx=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
  43.                 if(self.x<tableauPersonnes[i].x):#Si on est à gauche de i
  44.                     if(self.fx>0):#Et que l'on va à droite
  45.                         tableauPersonnes[i].x+=self.fx#On pousse i
  46.                         self.fx=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
  47.                        
  48.                 #Collision contre le mur, qui encadre la scène
  49.                 if(self.x==250  and self.fx>0):
  50.                     self.fx=0
  51.                 if(self.x==-250 and self.fx<0):
  52.                     self.fx=0
  53.                 if(self.y==250 and self.fy>0):
  54.                     self.fy=0
  55.                 if(self.y==-250 and self.fy<0):
  56.                     self.fy=0
  57.     def bouger(self):
  58.         if(self.fx>0):
  59.             self.x+=1
  60.             self.fx-=1
  61.         elif(self.x<0):
  62.             self.x-=1
  63.             self.fx+=1
  64.         if(self.fy>0):
  65.             self.y+=1
  66.             self.fy-=1
  67.         elif(self.y<0):
  68.             self.y-=1
  69.             self.fy+=1
  70.     def sortir(self):#Porte en bas au milieu laissant passer 5 personnes de front
  71.         if(self.y==0 and self.x>=-2 and self.x<=2):
  72.             return True
  73.         return False
  74. def main(n=100):#n=100 personnes dans ta salle par défaut. main() pour 100 personnes, main(150) pour 150 personnes, etc...
  75.     C=[]
  76.     a=0
  77.     pers=[]
  78.     ov=[]
  79.     for i in range (n):#On met n personnes dans la salle
  80.         (x,y)=(randint(-250,250),randint(-250,250))
  81.         while((x,y) in C):
  82.             (x,y)=(randint(-250,250),randint(-250,250))
  83.         C.append((x,y))
  84.         pers.append(Personne(x,y))
  85.        
  86.     #On a maintenant rempli nos n personnes dans la salle. Il est temps de les afficher !
  87.     fenetre=Tk()
  88.     fenetre.title("Sortie de salle" )
  89.     can=Canvas(fenetre, bg='white', height=500*2, width=500*2)
  90.     for i in range (n):
  91.         ov.append(can.create_oval((pers[i].x+250)*2, (pers[i].y+250)*2,(pers[i].x+252)*2, (pers[i].y+252)*2, width=2, fill='red'))
  92.     can.pack()#On a tout affiché !
  93.    
  94.     while(len(pers)!=0):#Tant qu'il reste des gens dans la salle
  95.         for i in range (len(pers)):#chacun à leur tour
  96.             pers[i].deplacement()#i décide de ce qu'il fait
  97.             pers[i].collision(pers[0:i]+pers[i+1:])#i pousse les autres au besoin
  98.             pers[i].bouger()#i bouge
  99.             can.coords(ov[i], pers[i].x*2+500, pers[i].y*2+500, pers[i].x*2+504, pers[i].y*2+504)
  100.        
  101.            
  102.         while(a<len(pers)):#On fait sortir ceux qui peuvent
  103.             if(pers[a].sortir()):
  104.                 pers.pop(a)
  105.                 ov.pop(a)
  106.             else:
  107.                 a+=1


---------------
Ekke Ekke Ekke Ekke Ptangya Ziiinnggggggg Ni
mood
Publicité
Posté le 14-05-2015 à 18:34:31  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Animation en Python

 

Sujets relatifs
Python[Python] Tetris, besoin d'aide pour élimination d'une ligne complète
Problème de sortie d'une boucle while en PYTHONCréer un classement en python 2.7
programmation score de tennis python pygame[python] 2048 intelligence artificielle
aide pour programme python !Débutant python dictionnaire sérialisé
[Python] Occurence d'une listeCréer une animation en python
Plus de sujets relatifs à : Animation en Python


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR