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()