Mit Levelausgabe
raumschiff-level.py — text/python-source, 10 KB (10400 bytes)
Dateiinhalt
# astroid
# Einbinden des 3D-Moduls
from visual import *
from math import *
from random import *
import time
# Szene-Einstellungen
scene.userzoom = True # User darf zoomen?
scene.userspin = True # User darf rotieren?
scene.forward = (0,0,-1) # Kameraposition
scene.autoscale = False # Autoskalierung aktiv?
scene.range = 12 # Kameraabstand von scene.center
scene.center = (0,0,0) # Kamerablickpunkt: norm. (0,0,0)
scene.up = (0,1,0) # Rotationsachse Kamera: norm. (0,1,0)
scene.background = color.black # Hintergrundfarbe
scene.fov = 1 # Kamerawinkeloeffnung: norm. 1
scene.fullscreen = true # Vollbild? norm. False
scene.title = "Koordinaten" # Fenstertitel
scene.width = 200 # Fensterbreite: norm. 200
scene.height = 200 # Fensterhoehe: norm 200
scene.x = 50 # x-Koordinate d. Fensters: norm. 0
scene.y = 25 # y-Koordinate d. Fensters: norm. 0
#frame()=gruppe
#class Name: def __init__(varaiblen):
#loeschen von objekten mit: 1. objekt.visible= False
# 2. del Objektname
#
class Munitionskiste(frame):
def __init__ (self, pos=(0,0,0)):
frame.__init__(self, pos=pos)
self.kiste=box(color=(0.2,0.2,1), opacity=(0.4), frame=self)
self.symbol=cylinder(radius=(0.055), pos=(-0.3,-0.3,0.3), length=(1), color=(0.2,1,0.2), material=materials.emissive, frame=self)
self.symbol.rotate(angle=(pi/3.3), axis=(0,1,1), origin=self.symbol.pos)
feuerkugel=sphere(pos=(-10,-10,-100), radius=(30), color=(0.75,0.21,0), material=materials.emissive)
feuerringe=frame()
feuerring=ring(pos=(-10,-10,-100), radius=(35), color=(1,0,0), thickness=(2), material=materials.BlueMarble, frame=feuerringe)
feuerring2=ring(pos=(-10,-10,-100), radius=(37), color=(1,0,0), thickness=(2), material=materials.BlueMarble, frame=feuerringe)
planet=sphere(pos=(15,15,-80), radius=(12), color=(0,1,0), material=materials.earth)
raumschiff=frame()
nase=cone(pos=(0,0,0), axis=(0.5,0,0), radius=(0.1), material=materials.blazed, frame=raumschiff)
rumpf=box(pos=(-0.35,-0.01,0), size=(0.8,0.2,0.4), material=materials.plastic, color=(0.4,0.4,0.4), frame=raumschiff)
cockpit=ellipsoid(pos=(-0.15,0.07,0), size=(0.4,0.2,0.2), color=(0.5,0.8,0), material=materials.chrome, frame=raumschiff)
fluegel1=pyramid(pos=(-0.75,-0.01,0), size=(0.8,1.8,0.005), material=materials.plastic, color=(0.4,0.4,0.4), frame=raumschiff)
fluegel1.rotate(angle=0.65*pi,axis=(1,0,0), origin=(fluegel1.pos))
fluegel2=pyramid(pos=(-0.75,-0.01,0), size=(0.8,1.8,0.005), material=materials.plastic, color=(0.4,0.4,0.4), frame=raumschiff)
fluegel2.rotate(angle=1.35*pi,axis=(1,0,0), origin=(fluegel2.pos))
turbine1=frame(frame=raumschiff)
turbinenfront1=cone(pos=(-0.4,-0.015,0.2), length=(0.15), radius=(0.07), material=materials.blazed, frame=turbine1)
turbinenrohr1=cylinder(pos=(-0.75,-0.015,0.2), length=(0.35), radius=(0.07), material=materials.blazed, frame=turbine1)
turbinenrohrende1=cylinder(pos=(-0.751,-0.015,0.2), length=(0.001),radius=(0.06),material=materials.plastic, color=(0.4,0.4,0.4), frame=turbine1)
turbinenstrahl1=cone(pos=(-0.78,-0.015,0.2), length=(0.1), radius=(0.08), opacity=(0.6), color=(0.3,0.3,1), material=materials.emissive, frame=turbine1)
turbine2=frame(frame=raumschiff)
turbinenfront2=cone(pos=(-0.4,-0.015,-0.2), length=(0.15), radius=(0.07), material=materials.blazed, frame=turbine2)
turbinenrohr2=cylinder(pos=(-0.75,-0.015,-0.2), length=(0.35), radius=(0.07), material=materials.blazed, frame=turbine2)
turbinenrohrende2=cylinder(pos=(-0.751,-0.015,-0.2), length=(0.001),radius=(0.06),material=materials.plastic, color=(0.4,0.4,0.4), frame=turbine2)
turbinenstrahl2=cone(pos=(-0.78,-0.015,-0.2), length=(0.1), radius=(0.08), opacity=(0.6), color=(0.3,0.3,1), material=materials.emissive, frame=turbine2)
#raumschiff richtig drehen
raumschiff.rotate(angle=pi/2, axis=(0,1,0), origin=(rumpf.pos))
raumschiff.pos=(0,0,12)
class Asteroid (frame):#
def __init__ (self,n=0,g=1,x=0,y=0,z=-50):
frame.__init__(self,pos=(x,y,z))
self.objekt1=sphere(frame=self,color=(0.5,0.5,0.5),radius=(g/1.4))
self.objekt2=box(frame=self,color=(0.5,0.5,0.5),length=g, height=g, width=g)
self.objekt3=box(frame=self,color=(0.5,0.5,0.5),length=g, height=g, width=g)
self.objekt3.rotate(angle=pi/4, axis=(1,0,0), origin=(0,0,0))
self.objekt3.rotate(angle=pi/4, axis=(0,1,0), origin=(0,0,0))
self.entfernung=g+0.2#
class Gegner(frame):
def __init__ (self,x=0,y=0,z=-50):
frame.__init__(self,pos=(x,y,z))
self.maxi=ellipsoid(frame=self,length=4*0.7, height=1*0.7, width=4*0.7,material=materials.chrome)
self.boe=ellipsoid(frame=self,length=2.5*0.8*0.8, height=2*0.8*0.8, width=2.5*0.8*0.8,color=(0.2,0.4,1))
'''
test1=Asteroid(z=12,x=3,g=2.5)
test2=Gegner(z=12,x=-3)
'''
scharfesS=0
zeit=0
liste =[]
listenlaenge=0
f=frame()
i=0
d=0
p=0
b=0.1
zaehler=0
punkte=0
jakob=0
adolf=0
liste2=[]
listenlaenge2=0
label2=label(pos=(0,0,0),height=50,text=" verloren \n nochmal spielen: 1 \n beenden: Esc")
label2.visible=False
label1 = label(pos = (4,4,12))
label1.height=100
label3=label(height=50, visible=False, text=("Name eingeben und mit Enter bestaetigen"))
label4=label(height=50, visible=False)
restart=1
munitionszaehler=0#
label6=label(pos=(4,-4,12), height=30, text=("Munition: "+str(munitionszaehler)))#
level=1#
label7=label(pos=(-4,-4,12), height=30, text=("Level: "+str(level)))#
while scharfesS==0:
if restart==1:
restart=0
p=0
name=[]
namein=0
label3.visible=True
while namein==0:
if scene.kb.keys:
key = scene.kb.getkey()
if key=="\n":
namein=1
else:
name.append(key)
label3.visible=False
label4.visible=True
label4.text=(str(name))
time.sleep(2)
label4.visible=False
while 0<listenlaenge:
liste[listenlaenge-1].visible=False
del liste[listenlaenge-1]
listenlaenge=listenlaenge-1
while 0<listenlaenge2:
liste2[listenlaenge2-1].visible=False
del liste2[listenlaenge2-1]
listenlaenge2=listenlaenge2-1
punkte=0
zeit=0
while p==0:
zaehler=zaehler+0.001
punkte=punkte+1
label1.text= (str(punkte))
#hintergrund
planet.rotate(angle=pi/450, axis=(0.3,1,0), origin=planet.pos)
feuerringe.rotate(angle=pi/800, axis=(1,0,0), origin=feuerring.pos)
feuerringe.rotate(angle=pi/750, axis=(0,1,0), origin=feuerring.pos)
feuerringe.rotate(angle=pi/4000, axis=(0,0,1), origin=feuerring.pos)
###
time.sleep(0.001)
zeit=zeit+0.01
#Bewegung
mauspos = scene.mouse.project(normal=(0,0,1), point=(0,0,13))
raumschiffx=(mauspos.x-raumschiff.x)*0.02
raumschiffy=(mauspos.y-raumschiff.y)*0.02
raumschiff.pos=(raumschiff.x+raumschiffx,raumschiff.y+raumschiffy,12)
###
#Asteroid erzeugen
if zeit > b:
jakob=random()
if jakob>=adolf:
a=Asteroid(x=(random()-0.5)*16,y=(random()-0.5)*14,z=-50,g=2.0)
liste.append(a)
listenlaenge=(listenlaenge+1)
else:
a=Gegner(x=(random()-0.5)*16,y=(random()-0.5)*14)
liste2.append(a)
listenlaenge2=(listenlaenge2+1)
zeit=0
###
#die komplette liste nach vorne verschieben
i=0
while i < listenlaenge:
i=i+1
liste[i-1].pos=(liste[i-1].x,liste[i-1].y,(liste[i-1].z+0.25))
i=0
while i < listenlaenge2:
i=i+1
liste2[i-1].pos=(liste2[i-1].x,liste2[i-1].y,(liste2[i-1].z+0.25))
###
#Asteroiden, die nicht mehr gesehen werden, loeschen
if listenlaenge==1:
if liste[0].z>40:
liste[0].visible=False
del liste[0]
listenlaenge=listenlaenge-1
else:
if listenlaenge>1:
if liste[0].z>40:
d=0
while d<(listenlaenge-1):
liste [d].pos=(liste[d+1].x,liste[d+1].y,liste[d+1].z)
d=d+1
liste[listenlaenge-1].visible=False
del liste[listenlaenge-1]
listenlaenge=listenlaenge-1
#Gegner loeschen
if listenlaenge2==1:
if liste2[0].z>40:
liste2[0].visible=False
del liste2[0]
listenlaenge2=listenlaenge2-1
else:
if listenlaenge2>1:
if liste2[0].z>40:
d=0
while d<(listenlaenge2-1):
liste2 [d].pos=(liste2[d+1].x,liste2[d+1].y,liste2[d+1].z)
d=d+1
liste2[listenlaenge2-1].visible=False
del liste2[listenlaenge2-1]
listenlaenge2=listenlaenge2-1
#Kollision berechnen
d=0
if listenlaenge>0:
while liste[d].z>11:
if liste[d].z<13:
if mag(liste[d].pos-raumschiff.pos)<1.9:
p=1
print punkte
print "verloren"
break
d=d+1
if d==listenlaenge:
break
#Gegner kollision
d=0
if listenlaenge2>0:
while liste2[d].z>11:
if liste2[d].z<13:
if mag(liste2[d].pos-raumschiff.pos)<1:
p=1
print punkte
print "verloren"
break
d=d+1
if d==listenlaenge2:
break
# punkte und leveln
if zaehler>3:
b=b*0.8
print "Level up"#
level=level+1#
label7.text=("Level: "+str(level))#
zaehler=0
###
label2.visible=True
if scene.kb.keys:
key = scene.kb.getkey()
if key=="1":
restart=1
else:
scharfesS=1
label2.visible=False