donut_class.py
donut_class.py — Python Source, 3 KB (3231 bytes)
Dateiinhalt
# -*- coding: cp1252 -*- # 20120702 S. H�ller # Einbinden der Module f�r 3D, Zufall, Nebenl�ufigkeit from visual import * from random import random from threading import Thread # Fenstertitel, Kameraabstand und -winkel und KONSTANTEN scene.title = "Streusel auf den Donut!" # Fenstertitel scene.forward = (0,-.5,-1) # Blickwinkel scene.userspin = False # keine Drehoption m. Maus scene.userzoom = False # keine Zoomoption m. Maus #scene.stereo = "redcyan" # Anaglyphenbrille dabei? MAXSTREUSEL = 50 # Bedingungen f. Spielabbruch class Donut(Thread, frame): "Klasse modelliert Donut" def __init__(self, pos=(0,0,0), axis=(0,1,0)): # Aufruf der Oberklassenkonstruktoren Thread.__init__(self) frame.__init__(self, pos=pos) self.teig = ring(thickness=0.55, color=(.9,.8,.2), axis=axis, frame=self) self.glasur = ring(thickness=0.56, color=(.3,.2,.1),\ material=materials.plastic, y=0.1, axis=axis, frame=self) self.anzeige = label(pos=self.pos, text="Streuselverbrauch", \ box=False, line=False, yoffset=50, height=10) self.streusel=[] self.winkel = 1 # Drehwinkel [�] self.klicks = 0 # Anzahl der Mausklicks def run(self): "Thread starten" while len(self.streusel) < MAXSTREUSEL: rate(50) # 50 Bilder/Sekunde self.rotate(angle=radians(self.winkel), axis=(0,1,0)) # Rotieren self.garnieren() # Streusel aufbringen def garnieren(self): "Donut via Mausklick mit Streuseln versehen ..." # Abfrage: hat sich ein Maus-Event ereignet? if scene.mouse.events: # Maus-Event in Variable speichern sme = scene.mouse.getevent() self.klicks += 1 # Verarbeitung des Maus-Events: Maus �ber Schokoglasur geklickt? if sme.pick == self.glasur and sme.press: # 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) ) # Winkelgeschwindigkeit mit jedem Streusel erh�hen self.winkel += 0.05 # Winkelgeschwindigkeit mit jedem Klick erh�hen self.winkel += 0.05 self.anzeige.text="Verbrauch: "+str(len(self.streusel))+" Streusel\nbei "+\ str(self.klicks/2)+" Klicks" # Abfrage: Tastatur-Event ereignet? if scene.kb.keys: skk = scene.kb.getkey() # ESC-Taste zum Beenden gedr�ckt? if skk=='esc': exit() # wechselt Drehrichtung bei Tastaturanschlag else: self.winkel*=-1 if __name__ == "__main__": d1 = Donut() d1.start()