L'ane onyme All roads lead to roam | 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 :
- from tkinter import *
- from random import randint
- class Personne:
- """Une personne, caractérisée par une position en x et en y, cercle de rayon 1"""
- def __init__(self,x,y):
- self.x=x
- self.y=y
- self.fx=0#Pas de force au repos
- self.fy=0#Idemn
- def mvtDroite(self):
- self.fx+=1
- def mvtGauche(self):
- self.fx-=1
- def mvtHaut(self):
- self.fy+=1
- def mvtBas(self):
- self.fy-=1
- def deplacement(self):#Sur une salle carrée de 500 unités par 500unités
-
- if(self.x<-2):
- self.mvtDroite
- elif(self.x>2):
- self.mvtGauche
- if(self.y>0):
- self.mvtBas
-
- def collision(self,tableauPersonnes):
- for i in range (len(tableauPersonnes)):
- d2=(self.x-tableauPersonnes[i].x)**2+(self.y-tableauPersonnes[i].y)**2
- if(d2<=4):#La sphère touche la sphère i
- if(self.y>tableauPersonnes[i].y):#Si on est au dessus de i
- if(self.fy<0):#Et que l'on va en bas
- tableauPersonnes[i].y+=self.fy#On pousse i
- self.fy=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
- if(self.y<tableauPersonnes[i].y):#Si on est au dessous de i
- if(self.fy>0):#Et que l'on va en haut
- tableauPersonnes[i].y+=self.fy#On pousse i
- self.fy=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
- if(self.x>tableauPersonnes[i].x):#Si on est à doite de i
- if(self.fx<0):#Et que l'on va à gauche
- tableauPersonnes[i].x+=self.fx#On pousse i
- self.fx=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
- if(self.x<tableauPersonnes[i].x):#Si on est à gauche de i
- if(self.fx>0):#Et que l'on va à droite
- tableauPersonnes[i].x+=self.fx#On pousse i
- self.fx=0#Et on ne bouge pas (on considère que l'on a transmis toute notre force à i)
-
- #Collision contre le mur, qui encadre la scène
- if(self.x==250 and self.fx>0):
- self.fx=0
- if(self.x==-250 and self.fx<0):
- self.fx=0
- if(self.y==250 and self.fy>0):
- self.fy=0
- if(self.y==-250 and self.fy<0):
- self.fy=0
- def bouger(self):
- if(self.fx>0):
- self.x+=1
- self.fx-=1
- elif(self.x<0):
- self.x-=1
- self.fx+=1
- if(self.fy>0):
- self.y+=1
- self.fy-=1
- elif(self.y<0):
- self.y-=1
- self.fy+=1
- def sortir(self):#Porte en bas au milieu laissant passer 5 personnes de front
- if(self.y==0 and self.x>=-2 and self.x<=2):
- return True
- return False
- def main(n=100):#n=100 personnes dans ta salle par défaut. main() pour 100 personnes, main(150) pour 150 personnes, etc...
- C=[]
- a=0
- pers=[]
- ov=[]
- for i in range (n):#On met n personnes dans la salle
- (x,y)=(randint(-250,250),randint(-250,250))
- while((x,y) in C):
- (x,y)=(randint(-250,250),randint(-250,250))
- C.append((x,y))
- pers.append(Personne(x,y))
-
- #On a maintenant rempli nos n personnes dans la salle. Il est temps de les afficher !
- fenetre=Tk()
- fenetre.title("Sortie de salle" )
- can=Canvas(fenetre, bg='white', height=500*2, width=500*2)
- for i in range (n):
- 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'))
- can.pack()#On a tout affiché !
-
- while(len(pers)!=0):#Tant qu'il reste des gens dans la salle
- for i in range (len(pers)):#chacun à leur tour
- pers[i].deplacement()#i décide de ce qu'il fait
- pers[i].collision(pers[0:i]+pers[i+1:])#i pousse les autres au besoin
- pers[i].bouger()#i bouge
- can.coords(ov[i], pers[i].x*2+500, pers[i].y*2+500, pers[i].x*2+504, pers[i].y*2+504)
-
-
- while(a<len(pers)):#On fait sortir ceux qui peuvent
- if(pers[a].sortir()):
- pers.pop(a)
- ov.pop(a)
- else:
- a+=1
|
---------------
Ekke Ekke Ekke Ekke Ptangya Ziiinnggggggg Ni
|