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