Pacman 3D
Pacman3DGeister.py — text/python-source, 12 KB (12388 bytes)
Dateiinhalt
# -*- coding: cp1252 -*- # Pacman ################################## from visual import * from threading import * from random import * ##from time import * geschwindigkeit=1 Score=0 wandPos =[ [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3], [0,3,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3], [0,3,2,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,2,3], [0,3,2,2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,2,3], [0,3,1,2,1,2,1,2,1,1,1,1,1,2,1,2,1,2,1,3], [0,3,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,3], [0,3,2,1,1,2,1,1,1,2,1,2,1,1,1,2,1,1,2,3], [0,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3], [0,3,1,2,1,2,1,2,1,1,1,1,1,2,1,2,1,1,2,3], [0,3,1,2,1,2,1,2,2,2,2,2,2,2,1,2,1,1,2,3], [0,3,1,2,1,2,1,2,1,1,1,1,1,2,1,2,1,1,2,3], [0,3,2,2,2,2,2,2,1,4,4,4,1,2,2,2,2,2,2,3], [0,3,2,1,1,2,1,2,1,1,0,1,1,2,1,2,1,2,1,3], [0,3,2,1,1,2,1,2,2,2,2,2,2,2,1,2,1,2,1,3], [0,3,2,1,1,2,1,1,1,2,1,2,1,1,1,2,1,2,1,3], [0,3,2,2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,2,3], [0,3,2,1,1,2,1,2,1,1,1,1,1,2,1,2,1,1,2,3], [0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3], [0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3], ] class Gespenst (Thread): def __init__(self,x=0,y=0,z=0,rx=1,rz=0,farbe=color.white): Thread.__init__(self) self.rahmen = frame(pos=(x,y,z), axis=(rx,0,rz)) self.kopf = sphere(frame=self.rahmen,pos=(0,1.5,0), color=farbe, radius=1.5) self.koerper = cone(frame=self.rahmen,pos=(0,0,0),color=farbe, axis =(0,3,0),radius=1.8) self.rAuge = sphere(frame=self.rahmen,pos=(0.9,2.5,0.4),color=color.white,radius=0.4) self.lAuge = sphere(frame=self.rahmen,pos=(0.85,2.5,-0.4),color=color.gray(0.5),radius=0.3) self.rPupille = sphere(frame=self.rahmen,pos=(1.2,2.5,0.4),color=color.black,radius=0.15) self.lPupille = sphere(frame=self.rahmen,pos=(0.97,2.65,-0.58),color=color.red,radius=0.08) self.last=(x,z) def run(self): while True: time.sleep(2) self.x=int((self.rahmen.x+2.5)/5) self.z=int((self.rahmen.z+2.5)/5) self.go=[] if wandPos[self.x][self.z+1] != 3 and wandPos[self.x][self.z+1] != 1: self.go.append((self.x,self.z+1)) if wandPos[self.x+1][self.z] != 3 and wandPos[self.x+1][self.z] != 1: self.go.append((self.x+1,self.z)) if wandPos[self.x][self.z-1] != 3 and wandPos[self.x][self.z-1] != 1: self.go.append((self.x,self.z-1)) if wandPos[self.x-1][self.z] != 3 and wandPos[self.x-1][self.z] != 1: self.go.append((self.x-1,self.z)) self.c=choice(self.go) self.rahmen.x=self.c[0]*5-2.5 self.rahmen.z=self.c[1]*5-2.5 class Ebene(object): def __init__(self, y=0, s=95, m=materials.wood): self.block = frame() ##Alle W�nde+Boden self.ball = frame() ##Alle Kugeln self.geist = frame() ##Alle Geister self.boden = box(pos=(s/2,y-0.5,s/2), size=(s,1,s), material=m, frame=self.block) y=(y+1)*2.5 self.geist = 1 for i in range(len(wandPos)): for j in range(len(wandPos[i])): ##Boxen und Ecken if wandPos[i][j] == 1: b=box(pos=(i*5-2.5,y,j*5-2.5),size=(5,5,5),opacity=0.3, frame=self.block) ##Wand if wandPos[i][j-1]!=3 and wandPos[i][j-1]!=1: ##Ist -x frei -> Oben r=cylinder(pos=(i*5-5,y+2.5,j*5-5), length=5, axis=(1,0,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i+1][j]!=3 and wandPos[i+1][j]!=1: ## und +z frei -> Ausen r=cylinder(pos=(i*5,y+2.5,j*5-5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i-1][j]!=3 and wandPos[i-1][j]!=1: ## und -z frei -> Ausen r=cylinder(pos=(i*5-5,y+2.5,j*5-5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) else: if wandPos[i+1][j]!=0 and wandPos[i+1][j]!=2 and wandPos[i+1][j-1]!=3 and wandPos[i+1][j-1]!=1: ##NICHT und +z belegt und -x+z frei -> Innen r=cylinder(pos=(i*5-5,y+2.5,j*5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i-1][j]!=0 and wandPos[i-1][j]!=2 and wandPos[i-1][j-1]!=3 and wandPos[i-1][j-1]!=1: ##NICHT und -z belegt und -x-z frei -> Innen r=cylinder(pos=(i*5-5,y+2.5,j*5-5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i][j+1]!=3 and wandPos[i][j+1]!=1: ##Ist +x frei -> Oben r=cylinder(pos=(i*5-5,y+2.5,j*5), length=5, axis=(1,0,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i-1][j]!=3 and wandPos[i-1][j]!=1: ##und -z frei -> Ausen r=cylinder(pos=(i*5-5,y+2.5,j*5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i+1][j]!=3 and wandPos[i+1][j]!=1: ##und +z frei -> Ausen r=cylinder(pos=(i*5,y+2.5,j*5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) else: if wandPos[i-1][j]!=0 and wandPos[i-1][j]!=2 and wandPos[i+1][j-1]!=3 and wandPos[i+1][j-1]!=1: ##NICHT und -z belegt und +x-z frei -> Innen r=cylinder(pos=(i*5,y+2.5,j*5-5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i+1][j]!=0 and wandPos[i+1][j]!=2 and wandPos[i+1][j+1]!=3 and wandPos[i+1][j+1]!=1: ##NICHT und +z belegt und +x+z frei -> Innen r=cylinder(pos=(i*5,y+2.5,j*5), length=5, axis=(0,-1,0), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i+1][j]!=3 and wandPos[i+1][j]!=1: ##Ist +z -> Oben r=cylinder(pos=(i*5,y+2.5,j*5-5), length=5, axis=(0,0,1), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) if wandPos[i-1][j]!=3 and wandPos[i-1][j]!=1: ##Ist -z frei -> Oben r=cylinder(pos=(i*5-5,y+2.5,j*5-5), length=5, axis=(0,0,1), radius=0.1, opacity=0.5, material=materials.emissive, color=color.red) ##Kugeln elif wandPos[i][j] == 2: k=sphere(pos=(i*5-2.5,y,j*5-2.5), radius=0.3, color=color.yellow, material = materials.rough, frame=self.ball) ##Ausenboxen elif wandPos[i][j] == 3: b=box(pos=(i*5-2.5,y,j*5-2.5),size=(5,5,5), material = materials.rough, color=color.red, frame=self.block) ##Geister elif wandPos[i][j] == 4 and self.geist ==1: G1=Gespenst(i*5-2.5,y-1.5,j*5-2.5, farbe=color.red) self.geist+=1 G1.start() elif wandPos[i][j] == 4 and self.geist ==2: G2=Gespenst(i*5-2.5,y-1.5,j*5-2.5, farbe=color.green) self.geist+=1 G2.start() elif wandPos[i][j] == 4 and self.geist ==3: G3=Gespenst(i*5-2.5,y-1.5,j*5-2.5, farbe=color.yellow) G3.start() scene.range = (geschwindigkeit,1,1) # Schrittweite scene.center = (7.5,2.5,7.5) # Festlegung Blickziel scene.userspin = False # Blickwechsel abgeschaltet scene.userzoom = False # Benutzerzoom abgeschaltet scene.fov = 1 # Kamerawinkel scene.fullscreen = True scene.background=(0,0,0) scene.title="Pacman - 3D" scene.cursor.visible = False ausgabe=label(pos=scene.center, text=str(Score), xoffset=-scene.width/2+50, yoffset=scene.height/2-12, height=20, border=0.5, box=False, line=False) e = Ebene() while True: rate(100) # Falls Tastatur gedr�ckt... if scene.kb.keys : for i in range(scene.kb.keys): s = scene.kb.getkey() ##print s if s == 'up': # vorw�rts ##print scene.center x=int((scene.center[0]+2.5)/5) z=int((scene.center[2]+2.5)/5) ##print x,z, scene.forward if (int(scene.forward[0]),int(scene.forward[1]),int(scene.forward[2])) == (0,0,1) and (wandPos[x][z+1]==3 or wandPos[x][z+1] ==1): ##print "STOP!!!" pass elif (int(scene.forward[0]),int(scene.forward[1]),int(scene.forward[2])) == (0,0,-1) and (wandPos[x][z-1]==3 or wandPos[x][z-1] ==1): ##print "STOP!!!" pass elif (int(scene.forward[0]),int(scene.forward[1]),int(scene.forward[2])) == (1,0,0) and (wandPos[x+1][z]==3 or wandPos[x+1][z] ==1): ##print "STOP!!!" pass elif (int(scene.forward[0]),int(scene.forward[1]),int(scene.forward[2])) == (-1,0,0) and (wandPos[x-1][z]==3 or wandPos[x-1][z] ==1): ##print "STOP!!!" pass else: scene.center = scene.center+scene.forward ausgabe.pos=scene.center time.sleep(0.05) scene.center = scene.center+scene.forward ausgabe.pos=scene.center time.sleep(0.05) scene.center = scene.center+scene.forward ausgabe.pos=scene.center time.sleep(0.05) scene.center = scene.center+scene.forward ausgabe.pos=scene.center time.sleep(0.05) scene.center = scene.center+scene.forward ausgabe.pos=scene.center time.sleep(0.05) if wandPos[int((scene.center[0]+2.5)/5)][int((scene.center[2]+2.5)/5)]==2: wandPos[int((scene.center[0]+2.5)/5)][int((scene.center[2]+2.5)/5)]=0 Score+=10 for i in e.ball.objects: if i.pos==scene.center: i.visible=False del i ausgabe.text=str(Score) break ##print scene.center ##elif s == 'down': # r�ckw�rts ## scene.center = scene.center-scene.forward*mag(scene.center-scene.mouse.camera) elif s == 'left': scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(18)) time.sleep(0.05) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(18)) time.sleep(0.05) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(18)) time.sleep(0.05) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(18)) time.sleep(0.5) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(18)) time.sleep(0.05) elif s == 'right': scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(-18)) time.sleep(0.05) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(-18)) time.sleep(0.05) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(-18)) time.sleep(0.05) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(-18)) time.sleep(0.05) scene.forward = rotate(scene.forward, axis=scene.up, angle=radians(-18)) time.sleep(0.05)