Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

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


Funktionsleiste