PvPshooter1.py
PvPshooter1.py — text/python-source, 7 KB (7952 bytes)
Dateiinhalt
#-*- coding: utf-8 -*- # Teststadt für Rundgang # 2010-03-08 from visual import * from visual.text import * from random import * import socket PORT=8007 service = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #service.bind(("", PORT)) HOST="localhost" scene.title = "Shooter" # Fenstertitel scene.x = 0 # Fensterpos v. links scene.y = 0 # Fensterpos v. oben scene.height =1000 # Fensterhöhe scene.width = 1500 # Fensterbreite scene.range = (1,1,1) # Abstand scene.center = (0,5,50) # Festlegung Blickziel scene.userspin = False # Blickwechsel abgeschaltet scene.userzoom = False # Benutzerzoom abgeschaltet scene.fov = 1.5 # Kamerawinkel scene.background = (0.8,0.85,1) # Farbe Hintergrund scene.stereodepth = 2 # Stereotiefe scene.show_rendertime = True # Anzeige der Berechnungszeiten scene.fullscreen = False # Vollbildmodus haus_anzahl = 12 # Konstante: Anzahl der Häuser haeuser=[] #Feld for i in range(haus_anzahl): #Feldfüllung für hauskoordinaten haeuser.append(i) #Feld um i Feldpots erweitern # graue Bodenplatte floor = box(pos=(0,0,0), width=200, height=1, length=200, color=color.gray(0.4),material=materials.rough) Kaefig = box (pos=(0,15,0),width=200,height=30,length=200,material=materials.wood)#Kaefig um Spieler herum Gebilde=frame()#Zielfläche für Schüsse Figur1=pyramid(pos=(0,5,53.8),axis=(0,0,-1),size=(4, 5, 5),color=color.red, material=materials.emissive) #Spielfigur =) Figur2=pyramid(pos=(0,5,53.8)) Figuren=[Figur1,Figur2] text(pos=(0, 20, -104), string="SPIELERPUNKTZAHL", color=color.blue, depth=1, height=5, justify="center") #Schriftzug text(pos=(0, 12.5, -104), string="SPIELER 1: SPIELER 2:", color=color.blue, depth=1, height=5, justify="center") #Schriftzug ScoreSpieler1=0 Score1='%s' %(ScoreSpieler1) Score2='NICHT DEFINIERT' punkteanzeige=text(pos=(0, 5, -104), string=Score1+" ", color=color.red, depth=1, height=5, justify="center") #Punkte Sp1+2 for i in range(haus_anzahl): # Häuser durch Zufall generieren zufallsvariable = random() haeuser[i]=cylinder \ (pos=(random()*200-100, 0,random()*200-100),\ axis=(0,30,0),radius=(8) ,\ color=color.gray(float(i/2)/10),material=materials.wood,\ frame=Gebilde) rhairs = 0.025 # half-length of crosshairs dhairs = 2 # how far away the crosshairs are maxcosine = dhairs/sqrt(rhairs**2+dhairs**2) # if ray inside crosshairs, don't move haircolor = color.black roam=False #-Zweitfenster für topview--- #zweitfenster = display(width=300,height=320, title="Minimap",\ # center=(0,5,0), forward=(0,-5,0), x=700, y=0,\ # background=(0.8,0.85,1)) #zweitfenster.range = 75 #zweitfenster.select() #for obj in scene.objects: # try: # obj.__copy__(display=zweitfenster).opacity=0.5 # except: # pass #walker = sphere(radius=2, color=color.white, pos=scene.center, material=materials.emissive) # walker.trail = curve(opacity=1)#farbe Treffer=0 anzeige = label(pos=(30,0,30), text="Abgefeuerte Schuesse", \ box=False, line=False, yoffset=150, height=10) while True: rate(50) Figur1.axis=scene.forward#Figurfolgt dem Spieler die ganze Zeit Figur1.pos = scene.center-scene.forward*2*mag(scene.center-scene.mouse.camera) # Toggle roam option #if scene.mouse.events: # m = scene.mouse.getevent() roam = True # If in roaming mode, change center and forward according to mouse position if roam: ray = scene.mouse.ray if abs(dot(ray,scene.forward)) < maxcosine: # do something only if outside crosshairs newray = norm(vector(ray.x, 0, ray.z)) angle = arcsin(dot(cross(scene.forward,newray),scene.up)) newforward = rotate(scene.forward, axis=scene.up, angle=angle/25) # scene.center = scene.mouse.camera+newforward*mag(scene.center-scene.mouse.camera) scene.forward = newforward #scene.center = scene.center+scene.forward*ray.y/2. #zweitfenster.select() #walker.pos = scene.center #walker.trail.append(pos=walker.pos, retain=5000) # Falls Tastatur gedrückt... if scene.kb.keys: s = scene.kb.getkey() if s == 'w': # vorwärtsgehen naheshaus=haeuser[0] for i in range (haus_anzahl): if(mag(scene.center-naheshaus.pos)>=mag(scene.center-haeuser[i].pos)): naheshaus=haeuser[i] if (mag(scene.center-naheshaus.pos)-12)<(mag(scene.center-scene.center+scene.forward*mag(scene.center-scene.mouse.camera))): #entfernung Radius<entfernung die mit schritt zurückgelegt wird pass else: scene.center = scene.center+scene.forward*mag(scene.center-scene.mouse.camera) elif s == 's': # rückwärtsgehen naheshaus=haeuser[0] for i in range (haus_anzahl): if(mag(scene.center-naheshaus.pos)>=mag(scene.center-haeuser[i].pos)): naheshaus=haeuser[i] if (mag(scene.center-naheshaus.pos)<12): scene.center = (scene.center+scene.forward*mag(scene.center-scene.mouse.camera)) else: scene.center = scene.center-scene.forward*mag(scene.center-scene.mouse.camera) elif s == 'a': # links gehen naheshaus=haeuser[0] for i in range (haus_anzahl): if(mag(scene.center-naheshaus.pos)>=mag(scene.center-haeuser[i].pos)): naheshaus=haeuser[i] if (mag(scene.center-naheshaus.pos)<12): scene.center+=cross(scene.forward,scene.up)#rightbackpush else: scene.center-=cross(scene.forward,scene.up) elif s == 'd': # rechtsgehen gehen naheshaus=haeuser[0] for i in range (haus_anzahl): if(mag(scene.center-naheshaus.pos)>=mag(scene.center-haeuser[i].pos)): naheshaus=haeuser[i] if (mag(scene.center-naheshaus.pos)-12)<(mag(scene.center-(scene.center+cross(scene.forward,scene.up)))): #entfernung Radius<entfernung die mit schritt zurückgelegt wird pass #scene.center-=cross(scene.forward,scene.up)#leftbackpush else: scene.center+=cross(scene.forward,scene.up) #Schuss:!!!!!!!!!! if scene.mouse.events: # Maus-Event in Variable speichern Linksklick = scene.mouse.getevent() # zielen auf Gebilde try: if Linksklick.pick.radius and Linksklick.press:# in haeuser[]:# and Linksklick Treffer += 1 #Treffer landen auf Gebilde sphere(pos=Gebilde.world_to_frame(Linksklick.pickpos), color=color.white, \ radius=0.2, material=materials.emissive) anzeige.text="Du hast"+str(Treffer)+ "Schuesse abgefeuert!! " ScoreSpieler1=ScoreSpieler1+1 punkteanzeige.visible=False del punkteanzeige Score1='%s' %(ScoreSpieler1) punkteanzeige=text(pos=(0, 5, -104), string=Score1+" ", color=color.red, depth=1, height=5, justify="center") except: pass #service.sendto("Figur1.pos=(%s,%s,%s),Figur1.axis=(%s)"%(Figur1.x,Figur1.y,Figur1.z,scene.forward),(HOST,PORT)) #Sendedaten #try: # data,HOST = service.recvfrom(100) # exec(data) #except: # pass