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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
from Tkinter import *
from Balle import *
def marche():
calculer()
dessiner()
global marche
marche=1
def arret():
global marche
marche=0
def calculer():
global ballesPassees
ballesPassees=[ Balle(_x=derniereBalle.mPosition.x,\
_y=derniereBalle.mPosition.y,\
_rayon=derniereBalle.mRayon,\
_masse=derniereBalle.mMasse,\
_xVitesse=derniereBalle.mVitesse.x,\
_yVitesse=derniereBalle.mVitesse.y)]
global fGravite, iIntervalleTempsMS, fIntervalleTemps
fGravite=-9.8
iIntervalleTempsMS=100
fIntervalleTemps=iIntervalleTempsMS * 0.001
global iIndexTemps
iIndexTemps=0
while derniereBalle.mPosition.x < fResolutionHorizontale \
and derniereBalle.mPosition.x > 0.0 \
and derniereBalle.mPosition.y > 0.0 \
and iIndexTemps < 10000:
derniereBalle.mVitesse.y += fGravite * fIntervalleTemps
tempVitesseAAppliquer = Vecteur(derniereBalle.mVitesse.x, derniereBalle.mVitesse.y)
tempVitesseAAppliquer.mulScalaire(fIntervalleTemps)
derniereBalle.mPosition.addVecteur(tempVitesseAAppliquer)
ajoutduneBalle = Balle(_x=derniereBalle.mPosition.x,\
_y=derniereBalle.mPosition.y,\
_rayon=derniereBalle.mRayon,\
_masse=derniereBalle.mMasse,\
_xVitesse=derniereBalle.mVitesse.x,\
_yVitesse=derniereBalle.mVitesse.y)
ballesPassees.append(ajoutduneBalle)
fenetre.coords(cercleDessinee, ballesPassees[iIndexTemps].mPosition.x - ballesPassees[iIndexTemps].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTemps].mPosition.y) - ballesPassees[iIndexTemps].mRayon,\
ballesPassees[iIndexTemps].mPosition.x + ballesPassees[iIndexTemps].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTemps].mPosition.y) + ballesPassees[iIndexTemps].mRayon)
iIndexTemps += 1
def dessiner():
dessinerUneTrame(1)
#L AFFICHAGE DE LA BALLE NE SE MET A JOUR QU A LA FIN et pas entre chaque appel d'after, POURQUOI ?
def dessinerUneTrame(iIndexTempsAffichage):
global iIntervalleTempsMS, cercleDessinee, ballesPassees, marche
fenetre.coords(cercleDessinee, ballesPassees[iIndexTempsAffichage].mPosition.x - ballesPassees[iIndexTempsAffichage].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) - ballesPassees[iIndexTempsAffichage].mRayon,\
ballesPassees[iIndexTempsAffichage].mPosition.x + ballesPassees[iIndexTempsAffichage].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) + ballesPassees[iIndexTempsAffichage].mRayon)
print(ballesPassees[iIndexTempsAffichage].mPosition.x)
print(fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) + ballesPassees[iIndexTempsAffichage].mRayon) #l'impression des coordonnes donne bien les bonnes valeurs
if ( iIndexTempsAffichage < iIndexTemps and marche > 0): #si on change iIndexTemps pour par exemple arreter l'affichage de la simu a la moitie, la balle est bien affichee au bon endroit
fenetre.after(iIntervalleTempsMS, dessinerUneTrame(iIndexTempsAffichage+1))
global fResolutionVerticale, fResolutionHorizontale
fResolutionVerticale=480.0
fResolutionHorizontale=640.0
interface=Tk()
global fenetre
fenetre=Canvas(interface,width=fResolutionHorizontale,height=fResolutionVerticale,bg='ivory')
fenetre.pack(side=TOP,padx=5,pady=5)
global derniereBalle
derniereBalle=Balle(_x=50.0, _y=430.0, _rayon=10.0)
global cercleDessinee
cercleDessinee = fenetre.create_oval(derniereBalle.mPosition.x-derniereBalle.mRayon,fResolutionVerticale - (derniereBalle.mPosition.y)-derniereBalle.mRayon,\
derniereBalle.mPosition.x+derniereBalle.mRayon,fResolutionVerticale - (derniereBalle.mPosition.y)+derniereBalle.mRayon,outline='black')
bouton1=Button(interface,text='marche',command=marche)
bouton1.pack(side=LEFT,padx=5,pady=5)
bouton2=Button(interface,text='arret',command=arret)
bouton2.pack(side=LEFT,padx=20,pady=5)
interface.mainloop |
Partager