Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

Highendgameversion

rotation2.py — text/python-source, 41 KB (42712 bytes)

Dateiinhalt

# -*- coding: utf-8 -*-
from visual import *
import math
from threading import Thread
from random import *
import time

# Szene-Einstellungen
house_size =5 #Hausgröße
map_size = 50 #Mapgröße
world_size = 10*map_size


class Camera(Thread):
    def __init__(self):
        Thread.__init__(self)
        scene.forward = (0,-1, 1)   # Kameraposition: Vogel
        scene.userspin = True       # Sitzt in Flugzeug
        scene.userzoom = True       # Spezielles Key-Event zuständig
        scene.range = 65            # Ausgangsposition in y
        scene.fullscreen = True     # Fullscreen-Mode
        scene.title = "SimplePlane" # Titel des Spiels
        self.camera = (0,0,0)       # Cameraposition zu Anfang, wird anfangs neu berechnet
        self.radius = 50            # Anfangsradius der Kamerabewegung
        self.geschwindigkeit = .01  # Geschwindigkeit der Kamera
        self.beschleunigung = 1.01  # Beschleunigung um 1%
        self.y = 40                 # Höhe
        self.geschoss = 0           # Geschosszähler
        self.treffer = 0            # Treffer
        scene.show_rendertime = True

        self.endgegner = False
        self.endgegner_treffer = 10
        self.endgegner_killed = False
        self.geschossZaehler = label(pos = (3*map_size, 10, 3*map_size))
        self.zeitanzeige = label(pos = (3*map_size, 20, 3*map_size))
        self.frame = []                         # Alle Frames
        self.objects = []                       # Liste aller abschießbaren Objekte
        self.framenumber = 0
        self.timer = Zeitanzeige(self)          # Zeitanzeige initialisieren

    def run(self):
        x = 0
        ControlScrolling(self, 150)             # User darf nicht unendlich rauszoomen
        self.timer.start()                      # Timer Anzeige
        self.anzahlframes = self.framenumber    # Framenumber um das Ende des Spiels zu erkennen
        self.refreshGeschossZaehler()           # Geschosszähler erneuern
        while self.endgegner_killed == False:
            rate(50)
            if self.framenumber <= 0 and self.endgegner_killed == False:
                self.releaseTheKraken()
            self.newCameraPosition(x)           # Neue Kameraposition ermitteln
            x += self.geschwindigkeit

    def newCameraPosition(self, i):
        # Berechnung der Kameraposition auf einem Kreis mit Radius
        scene.center = (self.radius * sin(i), self.y,self.radius * cos(i))
        self.center = scene.center
        scene.forward = (-1 * self.center.x, -self.y, -2 * self.center.z)
    
    def schiessen(self, sme):
        if self.framenumber > 0 and self.endgegner == False:
            # Schießen
            s = Schuss(self, sme)
            s.start()
        if self.endgegner != False:
            s = Schuss(self, sme, True)
            s.start()

    def releaseTheKraken(self):
        self.framenumber += 1
        self.endgegner_instance = Teufel(c, (random()*map_size, 10, random()* map_size), 10)

    def frameSetzen(self, f):
        self.framenumber += 1
        for o in f.objects:
            if isinstance(o, frame):    # Wenn ein Frame übergeben ist -> rekursiv
                self.frameSetzen(o)
            else:
                self.objects.append(o)  # Alle Objekte des Frames

    def refreshGeschossZaehler(self):
        self.geschossZaehler.text = "Bisher "+ str(self.geschoss) +" mal geschossen bei "+ str(self.anzahlframes) +" erzeugten Objekten."

    def remove(self, f):
        for n in f.objects:
            if isinstance(n, frame):    # Wenn ein Frame übergeben ist -> rekursiv
                self.framenumber -= 1
                self.remove(n)
            else:
                self.objects.remove(n)  # Alle Objekte des Frames entfernen

    def alert(self, text, wait):
        Alert(text, wait)

class ControlScrolling(Thread):
    def __init__(self, camera, limit = 150):
        Thread.__init__(self)
        self.camera = camera
        self.limit = 150                # Höhenlimit für Scrolling
        self.start()                    # Thread starten
    def run(self):
        while True:
            if scene.kb.keys:
                s = scene.kb.getkey()
                if s == 'up' and self.camera.y < self.limit:
                    self.camera.y += 1
                elif s == 'down' and self.camera.y > 10:
                    self.camera.y -= 1


class Alert(Thread):
    def __init__(self, text, wait):
        Thread.__init__(self)
        self.text = text                # Alert Text
        self.wait = wait                # Wartezeit des Alerts
        self.label = label(text = text, pos = scene.mouse.pos)
        self.run()

    def run(self):
        self.started = time.time()
        while (time.time()-self.started) <= self.wait:
            self.label.pos = scene.mouse.pos
        self.label.visible = false



class Schuss(Thread):
    def __init__(self, camera, sme, endgegner_active = False):
        Thread.__init__(self)
        self.camera = camera
        self.sme = sme
        self.endgegner_active = endgegner_active
        
    def run(self):
        geschoss = cone(pos = scene.mouse.camera - (0,3,0), axis = (-scene.mouse.camera + self.sme.pickpos)*0.1, radius = 1)
        self.camera.geschoss += 1                   # Geschosszähler
        self.camera.refreshGeschossZaehler()        # Geschosszähler refresh
        explosion = Explosion(self.sme, geschoss)
        explosion.start()                           # Explosions Thread
        if self.endgegner_active == False:
            for x in range(1,10):
                geschoss.axis = (-self.sme.pickpos + scene.mouse.camera)*0.1*x
                geschoss.opacity -= 0.1
                time.sleep(0.05)
            for o in self.camera.objects:
                if o == self.sme.pick:
                    step = 0.1
                    self.camera.framenumber -= 1
                    self.camera.remove(o.frame)         # Gesamtes Frame versinken lassen und anschließend löschen
                    for n in range(0,100):
                        o.frame.pos.y = o.frame.pos.y - step
                        time.sleep(0.01)
                    o.frame.visible = False
                    self.camera.treffer += 1
                    # Beschleunigung um 5%
                    self.camera.geschwindigkeit *= self.camera.beschleunigung
            time.sleep(0.1)
        elif self.endgegner_active == True and self.camera.endgegner_killed == False:
            self.camera.endgegner_treffer -= 1
            if(self.camera.endgegner_treffer <= 0):
                step = 0.1
                self.camera.endgegner_killed = True
                self.camera.framenumber -= 1
                self.camera.remove(self.camera.endgegner)         # Gesamtes Frame versinken lassen und anschließend löschen
                for n in range(0,1000):
                    self.camera.endgegner.pos.y = self.camera.endgegner.pos.y - step
                    time.sleep(0.01)
                self.camera.endgegner.visible = False
                self.camera.treffer += 1
                time.sleep(0.1)


class Explosion(Thread):
    def __init__(self, sme, geschoss):
        Thread.__init__(self)
        self.sme = sme
        self.geschoss = geschoss
    def run(self):
        explosion = sphere(pos = self.sme.pickpos, radius = 3, color = color.red, opacity = 0.8)
        for j in range(0,10):
            explosion.radius += j
            explosion.opacity -= 0.1
            time.sleep(0.05)
        explosion.visible = false
        self.geschoss.visible = false

class Zeitanzeige(Thread):
    def __init__(self, camera):
        Thread.__init__(self)
        self.camera = camera
        self.started = int(round(time.time()))
        self.camera.zeitanzeige.text = "O Sekunden"
    
    def run(self):
        while self.camera.framenumber > 0 and self.camera.endgegner_killed == False:
            self.camera.zeitanzeige.text = str(int(round(time.time()-self.started))) +" Sekunden"
            time.sleep(1)


class Baum ():
    def __init__ (self,x,y,z,camera):
        baum = frame()
        cylinder(radius=0.5, pos= (0,0,0),frame=baum, axis=(0,7,0),color=(0.5,0.25,0.1))
        sphere(radius=3, pos=(0,7,0),frame=baum,color=(0.1,0.5,0.1), material = materials.marble)
        baum.pos = (x,y,z)
        camera.frameSetzen(baum)

class Fass ():
    def __init__ (self,x,y,z, camera):
        fass = frame()
        cylinder (frame = fass, radius=2,pos= (x,y,z), axis=(0,3.5,0),material=materials.earth)
        camera.frameSetzen(fass)

class Haus ():
    def __init__(self,h,x,y,z, camera):
        f = frame()
        f.pos = (x,y,z)
        box(length=h,height= h,width = h,pos = (0,0.5*h,0),color = (0.7,0.4,0.1),frame=f, material=materials.bricks)
        extrusion(pos=[(0,0,0),(0,0,-0.5*h)],shape=Polygon( [(-0.5*h,h), (0,1.5*h), (h*0.5,h)] ),frame=f, material=materials.rough,color=color.red)
        extrusion(pos=[(0,0,0),(0,0,0.5*h)],shape=Polygon( [(-h*0.5,h), (0,1.5*h), (h*0.5,h)] ),material=materials.rough,frame=f,color=color.red)
        camera.frameSetzen(f)

class Schneemann ():
    def __init__ (self, camera, pos = (0,1,0)):
        schneemann = frame()
        kugel = sphere(pos=(0,1,0),frame=schneemann,radius=1,color= color.white)
        kugel = sphere(pos=(0,2.6,0),frame=schneemann,radius=0.75,color = color.white)
        kugel = sphere(pos=(0,3.7,0),frame=schneemann,radius=0.5,color = color.white)
        arm = sphere(pos=(0.75,2.75,0),frame=schneemann,radius=0.33,color = color.white)
        armr= sphere(pos=(-0.75,2.75,0),frame=schneemann,radius=0.33,color = color.white)
        riing= ring (pos=(0,4.2,0),frame=schneemann,axis=(0,0.1,0),radius=0.27,thickness=0.1,color=color.black)
        hut= cylinder (pos=(0,4.2,0),frame=schneemann,axis=(0,0.6,0),radius=0.2,color=color.black)
        nase= cone (pos=(0,3.7,0.5),frame=schneemann,axis=(0,0,0.15),radius=0.09,color=color.orange)
        knopf = sphere(pos=(0,0.6,0.9),frame=schneemann,radius=0.05,color= color.black)
        knopf = sphere(pos=(0,1,1),frame=schneemann,radius=0.05,color= color.black)
        knopf = sphere(pos=(0,1.4,0.9),frame=schneemann,radius=0.05,color= color.black)
        knopf = sphere(pos=(0,2.2,0.65),frame=schneemann,radius=0.05,color= color.black)
        knopf = sphere(pos=(0,2.6,0.75),frame=schneemann,radius=0.05,color= color.black)
        knopf = sphere(pos=(0,3.0,0.65),frame=schneemann,radius=0.05,color= color.black)
        auge = sphere(pos=(0.25,3.8,0.5),frame=schneemann,radius=0.05,color= color.black)
        auge = sphere(pos=(-0.25,3.8,0.5),frame=schneemann,radius=0.05,color= color.black)
        schneemann.pos = pos
        camera.frameSetzen(schneemann)

class Ente (Thread):
    def __init__(self, camera, pos = (0,1,0)):
        Thread.__init__(self)
        self.frame = frame()
        kopf = sphere(pos=(0,2.5,1),radius=0.5,frame=self.frame,color=color.gray(0.7),material=materials.rough)
        koerper = sphere(pos=(0,1.5,0),radius=1,color=color.gray(0.7),material=materials.rough, frame = self.frame)
        fluegel=ellipsoid(pos=(0,1.5,0),axis=(1,0,0),length=4, height=0.5, width=1,frame=self.frame,color=color.gray(0.7),material=materials.rough)        
        bein1=ellipsoid(pos=(0.3,0.4,0),axis=(0,1,0),length=0.7, height=0.25, width=0.25,frame=self.frame ,color=color.gray(0.7),material=materials.rough)
        bein2=ellipsoid(pos=(-0.3,0.4,0),axis=(0,1,0),length=0.7, height=0.25, width=0.25,frame=self.frame ,color=color.gray(0.7),material=materials.rough)
        fuss1=ellipsoid(pos=(0.3,0,0.3),axis=(0,0,1),length=1, height=0.2, width=0.5,frame=self.frame,color=color.orange)
        fuss2=ellipsoid(pos=(-0.3,0,0.3),axis=(0,0,1),length=1, height=0.2, width=0.5,frame=self.frame,color=color.orange)
        hinten=ellipsoid(pos=(0,1.3,-1),axis=(0,0.5,1),length=2, height=0.2, width=1,frame=self.frame,color=color.gray(0.7))
        schnabel=ellipsoid(pos=(0,2.4,1.5),axis=(0,0,1),length=1, height=0.2, width=0.5,frame=self.frame,color=color.orange)
        auge1=sphere(pos=(-0.15,2.7,1.4),radius=0.1,frame=self.frame,color=color.black,material=materials.plastic)
        auge2=sphere(pos=(0.15,2.7,1.4),radius=0.1,frame=self.frame,color=color.black,material=materials.plastic)
        self.frame.pos = pos
        camera.frameSetzen(self.frame)
        self.start()
        
    def run(self):
        z = 1
        while True:
            y = 100
            timer = 1.0/y
            step = 5.0/y
            geschwindigkeit = random() * 5
            axis = norm(-cross((0,1,0), self.frame.axis)) * geschwindigkeit
            step_x = axis.x / y
            step_z = axis.z / y
            # Bewegen in x und z
            for i in range(0,y):
                self.frame.pos.z += step_z
                self.frame.pos.x += step_x
                self.frame.pos.y += step
                time.sleep(timer)
            for i in range(0,y):
                self.frame.pos.y -= step
                self.frame.pos.x += step_x
                self.frame.pos.z += step_z
                time.sleep(timer)
            time.sleep(1)
            # Drehen in x und z
            y = 100
            r = random() * math.pi
            timer = r/y
            step = r/y
            for i in range(0,y):
                self.frame.rotate(angle = step, axis = (0,1,0), origin = self.frame.pos)
                time.sleep(timer)
            time.sleep(5)
            z += 1

class Flugzeug (Thread):
    def __init__ (self, camera):
        Thread.__init__(self)
        flugzeug= frame()
        flugzeug= frame()
        mitte= box(pos=(0,10,0),frame=flugzeug, length=5, heigth=8, width=3,color=(0.5,1,0.5),material=materials.marble)
        mitte= cylinder(pos=(-2.5,9.5,0),frame=flugzeug, axis=(5,0,0),radius=0.5,color=color.black,material=materials.marble)
        schnauze= cylinder(pos=(2.5,10,0),frame=flugzeug, axis=(3,0,0),radius=1.5,color=color.black)
        schnauze= helix(pos=(2.5,10,0),frame=flugzeug,axis=(3,0,0),radius=1.6,thickness=0.2,material=materials.chrome)
        schnauze= cylinder(pos=(5.5,10,0),frame=flugzeug, axis=(0.5,0,0),radius=0.5,color=color.red)
        propeller= ellipsoid (pos=(5.9,10,0.1),frame=flugzeug, length=0.2,heigth=0.2, width=5,material=materials.wood)
        propeller= ellipsoid (pos=(5.9,10,-0.1),frame=flugzeug, length=0.2,heigth=0.2, width=5,material=materials.wood)
        kuppel= ellipsoid (pos=(0,11,0),frame=flugzeug, length=4.5,heigth=2, width=2,material=materials.ice)
        kuppel= ellipsoid (pos=(0,10.5,0),frame=flugzeug, length=4.5,heigth=2, width=2,material=materials.ice)
        kuppel= ellipsoid (pos=(0,10.6,0),frame=flugzeug, length=4.5,heigth=2, width=2,color=color.black)
        kuppel= ellipsoid (pos=(0,10.7,0),frame=flugzeug, length=4.5,heigth=2, width=2,material=materials.ice)
        kuppel= ellipsoid (pos=(0,10.8,0),frame=flugzeug, length=4.5,heigth=2, width=2,material=materials.ice)
        kuppel= ellipsoid (pos=(0,10.9,0),frame=flugzeug, length=4.5,heigth=2, width=2,material=materials.ice)
        fluegel= ellipsoid (pos=(0,10,0),frame=flugzeug, length=2,heigth=2, width=16,color=(0.6,1,0.6),material=materials.marble)
        kanone= cylinder (pos=(-2.5,10,5),frame=flugzeug, axis=(5,0,0),radius=0.5,color=color.gray(0.5))
        kanone= cylinder (pos=(-2.5,10,-5),frame=flugzeug, axis=(5,0,0),radius=0.5,color=color.gray(0.5))
        kanone= cylinder (pos=(-2.5,10,5),frame=flugzeug, axis=(5.5,0,0),radius=0.25,material=materials.chrome)
        kanone= cylinder (pos=(-2.5,10,-5),frame=flugzeug, axis=(5.5,0,0),radius=0.25,material=materials.chrome)
        heck= cone (pos=(-2,10,0),frame=flugzeug, axis=(-5,0,0),radius=1,color=color.black)
        heck= cylinder (pos=(-6,10,0),frame=flugzeug, axis=(-1,0,0),radius=0.2,color=color.black)
        senkrechterheckfluegel= ellipsoid (pos=(-6,10.5,0),frame=flugzeug, length=2,heigth=0.2, width=0.2,color=color.red)
        heckfluegel= ellipsoid (pos=(-6,10,0),frame=flugzeug, length=1,heigth=0.2, width=4,color=(0.6,1,0.6),material=materials.marble)
        propeller= ring (pos=(5.9,10,0),frame=flugzeug, axis=(0.1,0,0),radius=1.25,thickness=0.01,material=materials.ice)
        propeller= ring (pos=(5.9,10,0),frame=flugzeug, axis=(0.1,0,0),radius=2.5,thickness=0.01,material=materials.ice)
        spitze= cone (pos=(5.9,10,0),frame=flugzeug, axis=(1,0,0),radius=0.3,color=color.black)
        self.frame = flugzeug
        camera.frameSetzen(self.frame)
        
        self.geschwindigkeit = 0.05
        self.radius = 20
        self.start()
    def run(self):
        x = 0
        while True:
            rate(50)
            self.newFlugzeugPosition(x)
            x += self.geschwindigkeit

    def newFlugzeugPosition(self, i):
        self.frame.pos = (self.radius * sin(i), self.frame.y ,self.radius * cos(i))
        self.frame.axis = -cross(self.frame.pos-(0,0,0), vector(0,1,0))

class Hubschrauber (Thread):
    def __init__ (self, camera, pos = (0,0,0)):
        Thread.__init__(self)
        self.camera = camera
        hubschrauber=frame()
        self.propeller = frame()
        
        kugel = sphere(pos=(0,15,0),frame=hubschrauber,radius=3,material=materials.ice,opacity=0.1)
        kugel = sphere(pos=(0,14.95,0),frame=hubschrauber,radius=3,color=color.orange,material=materials.marble)
        kugel = sphere(pos=(0.05,15,0),frame=hubschrauber,radius=3,color=color.black,material=materials.marble)
        kugellampe= local_light(pos=(0,15,0),frame=hubschrauber,radius=3,color=color.green)
        heck= cone (pos=(0,15,0),frame=hubschrauber,axis=(6,0,0),radius=2.9,color=color.orange,material=materials.marble)
        heck=cylinder (pos=(0,16.5,0),frame=hubschrauber,axis=(9,0,0),radius=0.25,color=color.black)
        heck=cylinder (pos=(5,15,0),frame=hubschrauber,axis=(2.5,1.5,0),radius=0.1,color=color.black)
        heck=cylinder (pos=(4,15,0),frame=hubschrauber,axis=(2.5,1.5,0),radius=0.09,color=color.black)
        heck=cylinder (pos=(3,15,0),frame=hubschrauber,axis=(2.5,1.5,0),radius=0.08,color=color.black)
        heck=cylinder (pos=(2,15,0),frame=hubschrauber,axis=(2.5,1.5,0),radius=0.07,color=color.black)
        heck=cylinder (pos=(1,15,0),frame=hubschrauber,axis=(2.5,1.5,0),radius=0.06,color=color.black)
        bein=cylinder (pos=(-1,13.5,1.5),frame=hubschrauber,axis=(-2,-2,0),radius=0.1,color=color.black)
        bein=cylinder (pos=(-1,13.5,-1.5),frame=hubschrauber,axis=(-2,-2,0),radius=0.1,color=color.black)
        bein=cylinder (pos=(-1,13.5,1.5),frame=hubschrauber,axis=(2,-2,0),radius=0.1,color=color.black)
        bein=cylinder (pos=(-1,13.5,-1.5),frame=hubschrauber,axis=(2,-2,0),radius=0.1,color=color.black)
        bein=cylinder (pos=(-3.5,11.5,1.5),frame=hubschrauber,axis=(8,0,0),radius=0.3,color=color.black)
        bein=cylinder (pos=(-3.5,11.5,-1.5),frame=hubschrauber,axis=(8,0,0),radius=0.3,color=color.black)
        bein= sphere(pos=(-3.5,11.5,-1.5),frame=hubschrauber,radius=0.3,color= color.orange,material=materials.marble)
        bein= sphere(pos=(-3.5,11.5,1.5),frame=hubschrauber,radius=0.3,color= color.orange,material=materials.marble)
        bein= sphere(pos=(4.5,11.5,-1.5),frame=hubschrauber,radius=0.3,color= color.orange,material=materials.marble)
        bein= sphere(pos=(4.5,11.5,1.5),frame=hubschrauber,radius=0.3,color= color.orange,material=materials.marble)
        hecknase= cone (pos=(8.5,16.5,0),frame=hubschrauber,axis=(0,0,1),radius=0.5,color=color.orange,material=materials.marble)
        hecknase= cone (pos=(8.5,16.5,0),frame=hubschrauber,axis=(0,0,-0.5),radius=0.5,color=color.orange,material=materials.marble)
        ellipsoid (pos=(9,16.5,0.7),frame=hubschrauber,axis=(0,0.2,0), length=0.2,heigth=2, width=0.2,color=color.black)
        ellipsoid (pos=(8,16.5,0.7),frame=hubschrauber,axis=(0,0.2,0), length=0.2,heigth=2, width=0.2,color=color.black)
        self.propeller_origin = propellernase= cone (pos=(0,18,0),frame=hubschrauber,axis=(0,1,0),radius=0.5,color=color.orange,material=materials.marble)
        self.propeller1= ellipsoid (pos=(0,18.6,3.5),frame=self.propeller,axis=(-0.2,0.5,0), length=0.2,heigth=0.2, width=7,color=color.black)
        self.propeller2= ellipsoid (pos=(0,18.6,-3.5),frame=self.propeller,axis=(0.2,0.5,0), length=0.2,heigth=0.2, width=7,color=color.black)
        lampe=cylinder (pos=(0,13.5,0),frame=hubschrauber,axis=(-1.8,-2,0),radius=0.1,color=color.black)
        lampe= sphere(pos=(-1.8,11.5,0),frame=hubschrauber,radius=0.25,color=color.orange,material=materials.marble,opacity=0.5)
        lampe=cylinder (pos=(-1.8,11.5,0),frame=hubschrauber,axis=(-0.25,-0.1,0),radius=0.25,color=color.black)
        #lampe= local_light(pos=(-2.05,11.4,0),frame=hubschrauber,radius=0.25,color=color.yellow)
        #lampe= local_light(pos=(-1.8,1.5,0),frame=hubschrauber,radius=0.25,color=color.yellow)
        lampe= sphere(pos=(-2.05,11.4,0),frame=hubschrauber,radius=0.25,color=color.yellow,opacity=0.5)
        self.frame = hubschrauber
        self.propeller.frame = self.frame
        self.frame.pos = pos

        
        self.radius = 60
        self.geschwindigkeit = 0.005
        
        camera.frameSetzen(self.frame)
        self.start()
        propeller = Propeller(self.propeller, self.propeller_origin)
        propeller.start()
    def run(self):
        x = 0
        while True:
            rate(50)
            self.newHubschrauberPosition(x)
            x += self.geschwindigkeit
            
    def newHubschrauberPosition(self, i):
        self.frame.pos = (self.radius * sin(i), self.frame.y ,self.radius * cos(i))
        self.frame.axis = cross(self.frame.pos-(0,0,0), vector(0,1,0))

class Propeller(Thread):
    def __init__(self, propeller, propeller_origin):
        Thread.__init__(self)
        self.propeller = propeller
        self.propeller_origin = propeller_origin
        
    def run(self):
        while True:
            y = 100
            r = 2*math.pi
            timer = r/(y*10)
            step = r/y
            for i in range(0,y):
                self.propeller.rotate(angle=step, axis=(0,1,0), origin=self.propeller_origin.pos)
                time.sleep(timer)

class Raketenbatterie (Thread):
    def __init__(self,camera, pos = (0, 2, 0)):
        Thread.__init__(self)
        raketenbatterie=frame()
        self.camera = camera
        self.raketen=frame()
        boden=box(pos=(0,0,0),length=4,width=4,height=0.2,color=(0.5,0.5,0.5),frame=raketenbatterie)
        halterung=box(pos=(0,0.3,0),width=1,lenght=1,height=1,axis=(0,0.5,0),frame=raketenbatterie)
        stange=cylinder(pos=(0,0.3,0),axis=(0,1.2,0),radius=0.2,frame=raketenbatterie)
        raketenb=box(pos=(0.5,1.5,0),axis=(2,0,0),length=1.9,width=2,material=materials.rough,frame=self.raketen)
        self.rak1 = arrow(pos=(1,1.5,0.5),axis=(1,0,0),color=color.black,material=materials.plastic,frame=self.raketen)
        self.rak2 = arrow(pos=(1,1.5,0),axis=(1,0,0),color=color.black,material=materials.plastic,frame=self.raketen)
        self.rak3 = arrow(pos=(1,1.5,-0.5),axis=(1,0,0),radius=0.3,color=color.black,material=materials.plastic,frame=self.raketen)
        self.raketen.frame=raketenbatterie
        self.frame = raketenbatterie
        self.sleeping = 30
        
        self.frame.pos = pos
        self.start()
        abschuss = RaketenAbschuss(self)
        abschuss.start()
    def run(self):
        while True:
            self.raketen.axis = scene.mouse.camera - self.raketen.pos
        
    def startNewRocket(self, rocket):
        timer = 0.005
        visible_rocket = arrow(pos = self.frame.pos, axis = rocket.axis, color = color.black, material = materials.plastic, make_trail = True)
        visible_rocket.trail_object.color = color.red
        while (rocket.visible and round(mag(scene.mouse.camera - rocket.pos)) > 10) and self.camera.framenumber > 0 and self.camera.endgegner_killed == False:
            axis = scene.mouse.camera - rocket.pos
            rocket.axis = norm(axis)*5
            step_z = axis.z / 40
            step_x = axis.x / 40
            step_y = axis.y / 40
            rocket.pos.y += step_y
            rocket.pos.x += step_x
            rocket.pos.z += step_z
            rocket.opacity = 0
            visible_rocket.pos = rocket.pos
            visible_rocket.axis = rocket.axis
            time.sleep(timer)
        visible_rocket.trail_object.visible = False
        rocket.visible = False
        visible_rocket.visible = False
        Alert("Du wurdest getroffen!", 3)
        
class RaketenAbschuss(Thread):
    def __init__(self, raketenbatterie):
        Thread.__init__(self)
        self.raketenbatterie = raketenbatterie
    def run(self):
        # Erste Rakete
        time.sleep(self.raketenbatterie.sleeping)
        self.raketenbatterie.camera.alert("Das Boden-Luft-Geschuetz hat soeben eine Rakete auf dich gestartet.", 5)
        self.raketenbatterie.startNewRocket(self.raketenbatterie.rak1)
        # Zweite Rakete
        time.sleep(self.raketenbatterie.sleeping)
        self.raketenbatterie.camera.alert("Eine weitere Rakete. Versuche das Geschuetz abzuschiessen!", 5)
        self.raketenbatterie.startNewRocket(self.raketenbatterie.rak2)
        # Raketenbatterie kann abgeschossen werden
        self.raketenbatterie.camera.frameSetzen(self.raketenbatterie.frame)
        time.sleep(self.raketenbatterie.sleeping*1.2)
        # Dritte Rakete
        self.raketenbatterie.startNewRocket(self.raketenbatterie.rak3)

class Schiff ():
    def __init__ (self, camera, pos = (20, 2, 30), axis = (1,0,0)):
        schiff=frame()
        self.camera = camera
        haupt= box(pos=(10,1,10),frame=schiff, length=5, width=10,material=materials.wood)
        mast=cylinder (pos=(10,1,10),frame=schiff,axis=(0,8,0),radius=0.5,material=materials.wood)
        mast=cylinder (pos=(6,7,10),frame=schiff,axis=(8,2,0),radius=0.25,material=materials.wood)
        mast=cylinder (pos=(4,6.5,10),frame=schiff,axis=(12 ,3,0),radius=0.15,material=materials.wood)
        mast=cylinder (pos=(10,1,10),frame=schiff,axis=(0,12,0),radius=0.25,material=materials.wood)
        mast=cylinder (pos=(10,1,10),frame=schiff,axis=(0,14,0),radius=0.1,material=materials.wood)
        vordermast=cylinder (pos=(10,1,15),frame=schiff,axis=(0,7,0),radius=0.3,material=materials.wood)
        vordermast=cylinder (pos=(10,4,15),frame=schiff,axis=(0,1,6),radius=0.15,material=materials.wood)
        vordermast=cylinder (pos=(10,1,15),frame=schiff,axis=(0,9,0),radius=0.15,material=materials.wood)
        korb=cylinder (pos=(10,9,10),frame=schiff,axis=(0,2,0),radius=1.5,material=materials.wood)
        korb=cylinder (pos=(11.5,9.25,10),frame=schiff,axis=(0,1.5,0),radius=0.25,color=color.black)
        korb=cylinder (pos=(8.5,9.25,10),frame=schiff,axis=(0,1.5,0),radius=0.25,color=color.black)
        korb=cylinder (pos=(10,9.25,11.5),frame=schiff,axis=(0,1.5,0),radius=0.25,color=color.black)
        korb=cylinder (pos=(10,9.25,8.5),frame=schiff,axis=(0,1.5,0),radius=0.25,color=color.black)
        reling= box(pos=(12.5,2,9.5),frame=schiff, length=2, width=11,axis=(0,5,0),material=materials.wood)
        reling= box(pos=(7.5,2,9.5),frame=schiff, length=2, width=11,axis=(0,5,0),material=materials.wood)
        reling=cylinder (pos=(7.5,3,5),frame=schiff,axis=(0,0,10),radius=0.1,color=color.black)
        reling=cylinder (pos=(12.5,3,5),frame=schiff,axis=(0,0,10),radius=0.1,color=color.black)
        reling=cylinder (pos=(7.5,1,4),frame=schiff,axis=(0,0,11),radius=0.5,material=materials.wood)
        reling=cylinder (pos=(12.5,1,4),frame=schiff,axis=(0,0,11),radius=0.5,material=materials.wood)
        heck= box(pos=(10,1,5),frame=schiff, length=2, width=10,axis=(0,5,0),material=materials.wood)
        heck= box(pos=(10,1,15),frame=schiff, length=2, width=10,axis=(0,5,0),material=materials.wood)
        heck= box(pos=(10,1,5),frame=schiff, length=2, width=10,axis=(5,0,0),material=materials.wood)
        heck= box(pos=(10,2,2),frame=schiff, length=6, width=5,axis=(0,-2,5),material=materials.wood)
        heck= box(pos=(10,4.5,2),frame=schiff, length=6, height=5, width=6,axis=(0,-2,5),material=materials.wood)
        heck= box(pos=(10,3.5,5),frame=schiff, length=6, height=5, width=1,axis=(0,-2,0),material=materials.wood)
        heckreling=cylinder (pos=(12.5,1,5),frame=schiff,axis=(0,6,0),radius=0.5,material=materials.wood)
        heckreling=cylinder (pos=(7.5,1,5),frame=schiff,axis=(0,6,0),radius=0.5,material=materials.wood)
        heckrelinglampe=cylinder (pos=(12.5,1,5),frame=schiff,axis=(0,7.2,0),radius=0.1,color=color.black)
        heckrelinglampe=cylinder (pos=(7.5,1,5),frame=schiff,axis=(0,7.2,0),radius=0.1,color=color.black)
        #heckrelinglampe=local_light (pos=(12.5,7.3,5),frame=schiff,axis=(0,0,0),radius=1,color=color.yellow)
        #heckrelinglampe=local_light (pos=(7.5,7.3,5),frame=schiff,axis=(0,0,0),radius=1,color=color.yellow)
        heckrelinglampe=cylinder (pos=(12.5,7.3,5),frame=schiff,axis=(0,0.5,0),radius=0.5,color=color.yellow,opacity=0.25)
        heckrelinglampe=cylinder (pos=(7.5,7.3,5),frame=schiff,axis=(0,0.5,0),radius=0.5,color=color.yellow,opacity=0.25)
        heckrelinglampe=cylinder (pos=(12.5,7.8,5),frame=schiff,axis=(0,0.1,0),radius=0.5,color=color.black)
        heckrelinglampe=cylinder (pos=(7.5,7.8,5),frame=schiff,axis=(0,0.1,0),radius=0.5,color=color.black)
        heckrelinglampe=cylinder (pos=(12.5,7.2,5),frame=schiff,axis=(0,0.1,0),radius=0.5,color=color.black)
        heckrelinglampe=cylinder (pos=(7.5,7.2,5),frame=schiff,axis=(0,0.1,0),radius=0.5,color=color.black)
        spitzereling=cylinder (pos=(7.5,3,15),frame=schiff,axis=(2.5,0,5),radius=0.1,color=color.black)
        spitzereling=cylinder (pos=(12.5,3,15),frame=schiff,axis=(-2.5,0,5),radius=0.1,color=color.black)
        spitzereling=cylinder (pos=(7.5,1,15),frame=schiff,axis=(2.5,0,5),radius=0.5,material=materials.wood)
        spitzereling=cylinder (pos=(12.5,1,15),frame=schiff,axis=(-2.5,0,5),radius=0.5,material=materials.wood)
        spitzereling= box(pos=(11.4,2,17),frame=schiff, length=1, width=5,height=2,axis=(2.5,0,1.5),material=materials.wood)
        spitzereling= box(pos=(8.6,2,17),frame=schiff, length=1, width=5,height=2,axis=(-2.5,0,1.5),material=materials.wood)
        spitzereling= box(pos=(10,2,20),frame=schiff, length=1.5, width=1,height=1,axis=(0,1,1),material=materials.wood)
        spitzeboden= box(pos=(10,1,15),frame=schiff, length=4, width=4,height=1,axis=(-2.5,0,2.5),material=materials.wood)
        spitzenmast=cylinder (pos=(10,2.75,19),frame=schiff,axis=(0,0,2),radius=0.5,material=materials.wood)
        spitzenmast=cylinder (pos=(10,3,19),frame=schiff,axis=(0,0,6),radius=0.25,material=materials.wood)
        self.camera.frameSetzen(schiff)
        schiff.pos = pos
        schiff.axis = axis

class Uboot (Thread):
    def __init__ (self, camera, pos = (0,0,0), axis = (1,0,0)):
        Thread.__init__(self)
        uboot=frame()
        self.camera = camera
        haupt= ellipsoid(pos=(0,-2.5,0),frame=uboot,length=20, height=4, width=4,material=materials.marble,color=color.gray(0.6))
        mast=cylinder (pos=(0,-2.5,0),frame=uboot,axis=(0,2,0),radius=2,material=materials.marble,color=color.gray(0.6))
        mast=sphere(pos=(0,-1,0),frame=uboot,radius=1.8,material=materials.marble,color=color.gray(0.6))
        mast=cylinder (pos=(0,-2,0),frame=uboot,axis=(0,4.5,0),radius=0.25,material=materials.marble,color=color.gray(0.6))
        mast=sphere(pos=(0,2.5,0),frame=uboot,radius=0.25,material=materials.marble,color=color.gray(0.6))
        mast=cylinder (pos=(0,2.5,0),frame=uboot,axis=(1,0,0),radius=0.25,material=materials.marble,color=color.gray(0.6))
        flosse= ellipsoid(pos=(9.5,-2.5,0),frame=uboot,length=1, height=0.2, width=3,material=materials.marble,color=color.gray(0.6))
        flosse= ellipsoid(pos=(-9,-2.5,0),frame=uboot,length=1, height=0.5, width=6,material=materials.marble,color=color.gray(0.6))
        flosse= ellipsoid(pos=(-9,-2.5,0),frame=uboot,length=1, height=3, width=0.5,material=materials.marble,color=color.gray(0.6))
        flosse= ellipsoid(pos=(0,-2.5,0),frame=uboot,length=2, height=0.5, width=10,material=materials.marble,color=color.gray(0.6))
        motor=cylinder (pos=(-9.5,-2.5,0),frame=uboot,axis=(3,0,0),radius=1,material=materials.marble,color=color.gray(0.6))
        uboot.pos = pos
        uboot.axis = axis
        self.frame = uboot
        self.camera.frameSetzen(uboot)
        self.start()

    def run(self):
        z = 1
        while True:
            y = 100
            timer = 3.0/y
            step = 3.0/y
            geschwindigkeit = random() * 20
            axis = self.frame.axis * geschwindigkeit
            #axis = norm(-cross((0,1,0), self.frame.axis)) * geschwindigkeit
            step_x = axis.x/ y
            step_z = axis.z / y
            # Bewegen in x und z
            for i in range(0,y):
                self.frame.pos.z += step_z
                self.frame.pos.x += step_x
                self.frame.pos.y += step
                time.sleep(timer)
            for i in range(0,y):
                self.frame.pos.y -= step
                self.frame.pos.x += step_x
                self.frame.pos.z += step_z
                time.sleep(timer)
            time.sleep(1)
            # Drehen in x und z
            y = 100
            r = random() * math.pi
            timer = r/y
            step = r/y
            for i in range(0,y):
                self.frame.rotate(angle = step, axis = (0,1,0), origin = self.frame.pos)
                time.sleep(timer)  
            z += 1
            time.sleep(5)

class Teufel (Thread):
    def __init__ (self, camera, pos = (0,0,0), k = 1):
        Thread.__init__(self)
        self.camera = camera
        self.k = k
        teufel=frame ()
        kopf=sphere(pos=(0,3.5*self.k,0),frame=teufel,radius=0.5*self.k,color=color.red)
        augen=sphere(pos=(0.25*self.k,3.5*self.k,0.45*self.k),frame=teufel,radius=0.05*self.k,color=color.black)
        augen=sphere(pos=(-0.25*self.k,3.5*self.k,0.45*self.k),frame=teufel,radius=0.05*self.k,color=color.black)
        horn= arrow(pos=(-0.4*self.k,3.7*self.k,0),frame=teufel, axis=(-0.5*self.k,0.5*self.k,0), shaftwidth=0.25*self.k,color=color.black)
        horn= arrow(pos=(0.4*self.k,3.7*self.k,0), frame=teufel,axis=(0.5*self.k,0.5*self.k,0), shaftwidth=0.25*self.k,color=color.black)
        nase= cone(pos=(0,3.5*self.k,0.5*self.k),frame=teufel, axis=(0,0,0.15*self.k),radius=0.1*self.k,color=color.black)
        bart= cone(pos=(0,3.1*self.k,0.25*self.k),frame=teufel, axis=(0,-0.1*self.k,0.1*self.k),radius=0.01*self.k,color=color.black)
        mund= cylinder(pos=(-0.2*self.k,3.3*self.k,0.42*self.k),frame=teufel, axis=(0.4*self.k,0,0),radius=0.05*self.k,color=color.black)
        braue= cylinder(pos=(-0.3*self.k,3.6*self.k,0.42*self.k),frame=teufel, axis=(0.1*self.k,0,0),radius=0.02*self.k,color=color.black)
        braue= cylinder(pos=(0.2*self.k,3.6*self.k,0.42*self.k),frame=teufel, axis=(0.1*self.k,0,0),radius=0.02*self.k,color=color.black)
        ohr= cylinder(pos=(-0.5*self.k,3.5*self.k,0),frame=teufel, axis=(0.1*self.k,0,0.05*self.k),radius=0.05*self.k,color=color.red)
        ohr= cylinder(pos=(0.4*self.k,3.5*self.k,0),frame=teufel, axis=(0.1*self.k,0,0.05*self.k),radius=0.05*self.k,color=color.red)
        koerper= cylinder(pos=(0,2.7*self.k,0),frame=teufel, axis=(0,-0.8*self.k,0),radius=0.5*self.k,color=color.red)
        koerper=sphere(pos=(0,2.7*self.k,0),frame=teufel,radius=0.5*self.k,color=color.red)
        koerper=sphere(pos=(0,2*self.k,0),frame=teufel,radius=0.5*self.k,color=color.black)
        arm=sphere(pos=(0.5*self.k,2.6*self.k,0),frame=teufel,radius=0.1*self.k,color=color.red)
        arm=sphere(pos=(-0.5*self.k,2.6*self.k,0),frame=teufel,radius=0.1*self.k,color=color.red)
        arm= cylinder(pos=(0.5*self.k,2.6*self.k,0),frame=teufel, axis=(0.3*self.k,-0.3*self.k,0),radius=0.1*self.k,color=color.red)
        arm= cylinder(pos=(-0.5*self.k,2.6*self.k,0),frame=teufel, axis=(-0.3*self.k,0.3*self.k,0),radius=0.1*self.k,color=color.red)
        arm=sphere(pos=(0.8*self.k,2.3*self.k,0),frame=teufel,radius=0.1*self.k,color=color.red)
        arm=sphere(pos=(-0.8*self.k,2.9*self.k,0),frame=teufel,radius=0.1*self.k,color=color.red)
        arm= cylinder(pos=(0.8*self.k,2.3*self.k,0),frame=teufel, axis=(0.2*self.k,-0.2*self.k,0),radius=0.1*self.k,color=color.red)
        arm= cylinder(pos=(-0.8*self.k,2.9*self.k,0),frame=teufel, axis=(-0.1*self.k,0.3*self.k,0),radius=0.1*self.k,color=color.red)
        arm=sphere(pos=(1*self.k,2.1*self.k,0),frame=teufel,radius=0.1*self.k,color=color.red)
        arm=sphere(pos=(-0.9*self.k,3.2*self.k,0),frame=teufel,radius=0.1*self.k,color=color.red)
        lanze= arrow(pos=(0.8*self.k,1*self.k,0),frame=teufel, axis=(0.5*self.k,3*self.k,0), shaftwidth=0.05*self.k,color=color.black)
        lanze= cylinder(pos=(0.95*self.k,3.3*self.k,0),frame=teufel, axis=(0.5*self.k,-0.05*self.k,0),radius=0.05,color=color.black)
        lanze= arrow(pos=(0.95*self.k,3.3*self.k,0),frame=teufel, axis=(0.05*self.k,0.5*self.k,0), shaftwidth=0.05*self.k,color=color.black)
        lanze= arrow(pos=(1.45*self.k,3.25*self.k,0),frame=teufel, axis=(0.05*self.k,0.5*self.k,0), shaftwidth=0.05*self.k,color=color.black)
        lanze= helix(pos=(0.8*self.k,1*self.k,0),frame=teufel,axis=(0.5*self.k,3*self.k,0),radius=0.06*self.k,thickness=0.02*self.k,color=color.red)
        lanze= helix(pos=(0.95*self.k,3.3*self.k,0),frame=teufel,axis=(0.5*self.k,-0.05,0),radius=0.06*self.k,thickness=0.02*self.k,color=color.red)
        lanze= helix(pos=(0.95*self.k,3.3*self.k,0),frame=teufel,axis=(0.05*self.k,0.5*self.k,0),radius=0.06*self.k,thickness=0.02*self.k,color=color.red)
        lanze= helix(pos=(1.45*self.k,3.25*self.k,0),frame=teufel,axis=(0.05*self.k,0.5*self.k,0),radius=0.06*self.k,thickness=0.02*self.k,color=color.red)
        bein= cylinder(pos=(0.4*self.k,2*self.k,0),frame=teufel, axis=(0,-1*self.k,0),radius=0.1*self.k,color=color.red)
        bein= cylinder(pos=(-0.4*self.k,2*self.k,0),frame=teufel, axis=(0,-1*self.k,0),radius=0.1*self.k,color=color.red)
        fuss=sphere(pos=(0.4*self.k,1*self.k,0),frame=teufel,radius=0.2*self.k,color=color.black)
        fuss=sphere(pos=(-0.4*self.k,1*self.k,0),frame=teufel,radius=0.2*self.k,color=color.black)
        fuss= cylinder(pos=(0.4*self.k,1*self.k,0),frame=teufel, axis=(0,0,0.4*self.k),radius=0.2*self.k,color=color.black)
        fuss= cylinder(pos=(-0.4*self.k,1*self.k,0),frame=teufel, axis=(0,0,0.4*self.k),radius=0.2*self.k,color=color.black)
        fuss= cone(pos=(0.4*self.k,1*self.k,0.4*self.k),frame=teufel, axis=(0,0,0.15*self.k),radius=0.2*self.k,color=color.black)
        fuss= cone(pos=(-0.4*self.k,1*self.k,0.4*self.k),frame=teufel, axis=(0,0,0.15*self.k),radius=0.2*self.k,color=color.black)
        schweif=sphere(pos=(0,2*self.k,-0.5*self.k),frame=teufel,radius=0.1*self.k,color=color.red)
        schweif= cylinder(pos=(0,2*self.k,-0.5*self.k),frame=teufel, axis=(0,-0.5*self.k,-0.4*self.k),radius=0.1*self.k,color=color.red)
        schweif=sphere(pos=(0,1.5*self.k,-0.9*self.k),frame=teufel,radius=0.1*self.k,color=color.red)
        schweif= arrow(pos=(0,1.5*self.k,-0.9*self.k),frame=teufel, axis=(0,0.5*self.k,-0.5*self.k), shaftwidth=0.1*self.k,color=color.red)
        guertel= ring (pos=(0,2.5*self.k,0),frame=teufel, axis=(0.5*self.k,0.6*self.k,0),radius=0.55*self.k,thickness=0.1*self.k,color=color.black)
        armreif= ring (pos=(0.55*self.k,2.6*self.k,0),frame=teufel, axis=(0,0.1*self.k,0),radius=0.07*self.k,thickness=0.1*self.k,color=color.black)
        armreif= ring (pos=(-0.85*self.k,3.1*self.k,0),frame=teufel, axis=(0,0.1*self.k,0),radius=0.12*self.k,thickness=0.05*self.k,color=color.black)
        leuchte=local_light (pos=(0,2.5*self.k,0),frame=teufel,axis=(0,0,0),radius=0.0005*self.k,color=color.red)
        teufel.pos = pos
        self.frame = teufel
        self.camera.endgegner = self.frame
        self.camera.frameSetzen(self.frame)
        self.start()

    def run(self):
        step = math.pi/100
        while True:
            self.frame.rotate(angle = step, axis = (0,1,0), origin = self.frame.pos)
            time.sleep(0.01)

if __name__ == '__main__':
    c = Camera()

    Haus(house_size,random()*map_size,0,random()*map_size, c)
    Haus(house_size,random()*-map_size,0,random()*map_size, c)
    Haus(house_size,random()*-map_size,0,random()*-map_size, c)
    Haus(house_size,random()*map_size,0,random()*-map_size, c)
    

    Baum(random()*map_size,0,random()*map_size*-1, c)
    Baum(random()*map_size*-1,0,random()*map_size, c)
    Baum(random()*map_size*-1,0,random()*map_size*-1, c)
    Baum(random()*map_size,0,random()*map_size, c)
    #Baum(random()*map_size,0,random()*map_size*-1, c)
    #Baum(random()*map_size*-1,0,random()*map_size, c)
    #Baum(random()*map_size*-1,0,random()*map_size*-1, c)
    #Baum(random()*map_size,0,random()*map_size, c)

    Raketenbatterie(c)
    Flugzeug(c)
    Hubschrauber(c)

    Schiff(c,pos=((random()+1)*map_size,2,(random()+1)*map_size), axis = (random(),0,random()))
    Schiff(c,pos=(-(random()+1)*map_size,2,(random()+1)*map_size), axis = (random(),0,random()))
    #Schiff(c,pos=((random()+1)*map_size,2,-(random()+1)*map_size), axis = (random(),0,random()))
    #Schiff(c,pos=(-(random()+1)*map_size,2,-(random()+1)*map_size), axis = (random(),0,random()))

    #Uboot(c,pos=((random()+1)*map_size,0,(random()+1)*map_size), axis = (random(),0,random()))
    #Uboot(c,pos=(-(random()+1)*map_size,0,(random()+1)*map_size), axis = (random(),0,random()))
    Uboot(c,pos=((random()+1)*map_size,0,-(random()+1)*map_size), axis = (random(),0,random()))
    Uboot(c,pos=(-(random()+1)*map_size,0,-(random()+1)*map_size), axis = (random(),0,random()))
    
    #Ente(c, pos=(1,1,7))
    #Ente(c, pos=(5,1,5))
    Ente(c, pos = (random()*map_size,2,random()*map_size*-1))
    Ente(c, pos = (random()*map_size,2,random()*map_size*-1))
    
    Fass(random()*map_size,0,random()*map_size, c)
    Fass(random()*map_size*-1,0,random()*map_size, c)
    
    Schneemann = Schneemann(c, pos = (50,2,30))

    boden = cylinder(pos = (0,0.1,0), axis=(0,1,0),radius = 1.5*map_size, material = materials.marble, color = color.yellow)
    welt = box(pos = (0,0,0), axis=(1,0,0), length = world_size, height = 2, width = world_size, material = materials.silver, color = color.blue)
    
    c.start()
    
    while True:
        if scene.mouse.events:
            sme = scene.mouse.getevent()
            if sme.pick and sme.click == 'left':
                c.schiessen(sme)


Funktionsleiste