#! /usr/bin/python
# Threads: 2 unterschiedliche Bälle, die an den Wänden reflektiert werden.
from grafik import *
import math
import thread
class Ball(TKreis):
def __init__(self, startx, starty, Durchmesser, Masse, Farbe, Welt):
TKreis.__init__(self)
self.m=Masse # g
self.vx=0 # cm/s
self.vy=0
self.x=startx
self.y=starty
self.w=Welt
self.d=Durchmesser
TKreis.setFarbe(self,Farbe)
TKreis.setFuellfarbe(self,Farbe)
TKreis.setRadius(self,self.d/2)
TKreis.setMPos(self,self.x,self.y)
TKreis.zeigen(self)
def bewegen(self):
TKreis.loeschen(self)
if TKreis.getXPos(self) > self.w.get_Breite()-self.d:
self.vx=-self.vx
if TKreis.getXPos(self) < 0:
self.vx=-self.vx
if TKreis.getYPos(self) > self.w.get_Hoehe()-self.d:
self.vy=-self.vy
if TKreis.getYPos(self) < 0:
self.vy=-self.vy
TKreis.pos_versetzen_um(self,self.vx,self.vy) # physikalisch: *dt (=1)
TKreis.zeigen(self)
def gibImpuls(self,alpha):
# immer gleicher Impuls (1), nur unterschiedl. Richt.
self.vx=math.cos(alpha)/self.m
self.vy=math.sin(alpha)/self.m
if __name__=="__main__":
mein_Bild=TZeichenblatt()
mein_Bild.Init("linux.gif")
def task1():
mein_Ball=Ball(10,10,20,0.2,"gelb",mein_Bild)
mein_Ball.gibImpuls(0.7)
while 1:
mein_Ball.bewegen()
mein_Bild.refresh()
def task2():
mein_Ball=Ball(20,20, 20,1,"rot",mein_Bild)
mein_Ball.gibImpuls(0.2)
while 1:
mein_Ball.bewegen()
mein_Bild.refresh()
thread.start_new_thread(task1,())
thread.start_new_thread(task2,())
Tkinter.mainloop()
zurück zu den anderen Beispielen
Dr. Bernd Kokavecz