jakob
jakob5.py — text/python-source, 12 KB (13049 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 # 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 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) 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 laserliste=[] laserlistenlaenge=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),box=False) label1.height=100 label3=label(height=50, visible=False, text=("Name mit maximal 5 Zeichen eingeben \n und mit Enter bestaetigen")) label4=label(height=50, visible=False) restart=1 highscore=0 label5=label(pos=(-4,3.5,12),height=40) name=[] level=1 label7=label(pos=(-4,-4,12), height=30, text=("Level: "+str(level))) while scharfesS==0: if restart==1: restart=0 b=0.1 if highscore<punkte: highscore=punkte label5.text=(str (highscore)+"\n"+str(name) ) 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: #laser abschiesen if scene.mouse.clicked: m = scene.mouse.getclick() a=cylinder(radius=(0.055), length=(0.35), color=(0.2,1,0.2), material=materials.emissive, opacity=0.7,x=raumschiff.x,y=raumschiff.y,z=12) laserliste.append(a) laserliste[laserlistenlaenge].rotate(angle=pi/2, axis=(0,1,0), origin=laserliste[laserlistenlaenge].pos) laserlistenlaenge=laserlistenlaenge+1 if laserlistenlaenge>10: laserliste[10].visible=False del laserliste[10] laserlistenlaenge=laserlistenlaenge-1 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)) i=0 while i < laserlistenlaenge: i=i+1 laserliste[i-1].pos=(laserliste[i-1].x,laserliste[i-1].y,(laserliste[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 #Laserstrahlern loeschen if laserlistenlaenge==1: if laserliste[0].z<-40: laserliste[0].visible=False del laserliste[0] laserlistenlaenge=laserlistenlaenge-1 else: if laserlistenlaenge>1: if laserliste[0].z<-40: d=0 while d<(laserlistenlaenge-1): laserliste [d].pos=(laserliste[d+1].x,laserliste[d+1].y,laserliste[d+1].z) d=d+1 laserliste[laserlistenlaenge-1].visible=False del laserliste[laserlistenlaenge-1] laserlistenlaenge=laserlistenlaenge-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 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 # Laserkollision d=0 sepp=0 if laserlistenlaenge>0: while d<laserlistenlaenge: sepp=0 while sepp < listenlaenge: if laserliste[d].z==liste[sepp].z: if mag(laserliste[d].pos-liste[sepp].pos)<3.3: liste[sepp].x=50 ''' liste[sepp].visible=False andi=sepp while andi<listenlaenge-1: liste[andi].pos=(liste[andi+1].x,liste[andi+1].y,liste[andi+1].z) andi=andi+1 liste[listenlaenge-1].visible=False del liste[listenlaenge-1] listenlaenge=listenlaenge-1 ''' sepp=sepp+1 d=d+1 # 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: # event waiting to be processed? key = scene.kb.getkey() # get keyboard info if key=="1": restart=1 else: scharfesS=1 label2.visible=False