Kapitel 4

Dr. Bernd Kokavecz

THREADS

Beispielprogramm für die Anwendung des Grafik-Tools


Hier ein Bildschirmphoto der sich unabhängig und i.a.mit unterschiedlicher Geschwindigkeit bewegenden Bälle:

Bälle



Der Quelltext

#! /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()



python zurück zu den anderen Beispielen

Dr. Bernd Kokavecz
Datum: 27.02.2001
dr.bernd@kokavecz.de