donut_1.py
donut_1.py — text/python-source, 2 KB (2872 bytes)
Dateiinhalt
# Ein Donut soll mit Streuseln belegt werden...
# Einbinden der Module fuer 3D, Zufall, Nebenlaeufigkeit
from visual import *
from random import random
from threading import Thread
# Fenstertitel, Kameraabstand und -winkel
scene.title = "Streusel auf den Donut"
scene.forward = (0,-.5,-1)
class Donut(Thread, frame):
"Klasse modelliert Donut"
def __init__(self, pos=(0,0,0), axis=(0,1,0), streuselMax=25):
# Aufruf der Oberklassenkonstruktoren fuer Nebenlaeufigkeit und Objektcontainer
Thread.__init__(self)
frame.__init__(self, pos=pos)
self.teig = ring(thickness=0.55, color=(.9,.8,.2), axis=(0,1,0), frame=self)
self.glasur = ring(thickness=0.56, color=(.3,.2,.1),\
material=materials.plastic, y=0.1, axis=(0,1,0), frame=self)
self.streusel = []
self.winkel = 1
self.streuselMax = streuselMax
self.anzeige = label(pos=self.pos, text="Streuselverbrauch", \
box=False, line=False, yoffset=50, height=10)
def run(self):
"Thread starten"
while len(self.streusel)<self.streuselMax:
rate(50)
# Rotation um y-Achse durch Mittelpunkt
self.rotate(angle=radians(self.winkel), axis=(0,1,0))
def garnieren(self,sme):
"Donut via Mausevent (sme) mit Streuseln versehen"
# ist die Schokoglasur angeklickt worden?
if sme.pick == self.glasur and len(self.streusel) < self.streuselMax:
# erzeuge Streusel und f�ge in Liste ein
self.streusel.append(sphere(pos=self.world_to_frame(sme.pickpos), \
color=color.hsv_to_rgb((random(),1,1)), \
radius=0.05, material=materials.plastic, \
frame=self) )
self.anzeige.text="Verbrauch "+str(len(self.streusel))+" Streusel"
# Erhoehung der Drehgeschwindigkeit
self.winkel*=1.2
# Streuselprotokoll
print len(self.streusel)
if __name__ == "__main__":
d1 = Donut(pos=(-2,0,0))
d2 = Donut(pos=(2,0,0))
d1.start()
d2.start()
while True:
# falls Maus-Taste gedrueckt...
if scene.mouse.events:
# Maus-Event in Variable speichern
sme = scene.mouse.getevent()
# Verarbeitung des Maus-Events: Maus auf Objekt gedrueckt?
if sme.pick and sme.press:
d1.garnieren(sme)
d2.garnieren(sme)
# Verarbeitung von Tastatur-Events:
if scene.kb.keys:
skk = scene.kb.getkey()
# ESC-Taste gedrueckt? Dann Programm beenden
if skk=='esc':
exit()
# wechselt Drehrichtung bei Tastaturanschlag
else:
d1.winkel*=-1
d2.winkel*=-1