multiplayer
schach_multiplayer.py — text/python-source, 8 KB (8388 bytes)
Dateiinhalt
# -*- coding: utf-8 -*- from visual import * import socket from Figuren import * from threading import Thread scene.userzoom=False scene.userspin=False scene.forward=(0,-1,-1) scene.autoscale = False scene.range = 62 scene.center = (40,0,40) scene.up = (0,1,0) scene.background = color.black scene.fov = 1 scene.fullscreen = False scene.title = "Koordinaten" scene.width = 610 scene.height = 700 scene.x = 0 scene.y = 0 scene.lights = [distant_light(direction=(0.22, 0.44, 0.88), color=color.gray(0.8)), distant_light(direction=(-0.88, -0.22, -0.44), color=color.gray(0.3))] pick=None BauerW=[] BauerS=[] TurmW=[] TurmS=[] SpringerW=[] SpringerS=[] LaeuferW=[] LaeuferS=[] DameW=[] DameS=[] KoenigW=[] KoenigS=[] Sboxen=[] pick=None server=True #Für 2. Spieler auf False setzen PORT = 8500 # EPORT und PORT für 2.Spieler tauschen HOST = '141.84.220.101' # 141.84.220.90 EPORT = 8501 if server==False: scene.forward=(0,-1,1) scene.lights = [distant_light(direction=(0.22, 0.44, -0.88), color=color.gray(0.8)), distant_light(direction=(-0.88, -0.22, 0.44), color=color.gray(0.3))] service= socket.socket(socket.AF_INET,socket.SOCK_DGRAM) service.bind(("", EPORT)) sender=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) print "Starte Server auf Port", EPORT #FeldListe class Spielfeld(frame): def __init__(self, pos=(0,0,0)): self.feld=0 frame.__init__(self, pos=pos) self.feld = [] self.groesse=10 i=0 farbe=True while i<8: e=0 while e<8: if farbe: color=(.8,.6,.5) farbe=False else: color=(.6,.4,.3) farbe=True g = self.groesse + 0.0 self.feld.append(box( pos= (g/2 +g*e,0,g/2 + g*i), height=.1, width=g, length=g, color=color, material=materials.wood, frame=self)) e=e+1 i=i+1 if farbe: farbe=False else: farbe=True def get_pos(self, x, y): return self.feld[x+y*8].pos + (0,.01,0) def gfeld(self,x,y): return self.feld[x+y*8] def get_x(self, objekt): f=0 for i in self.feld: if objekt.pos==i.pos: a=f a=a%8 return a f=f+1 def get_y(self,objekt): f=0 for i in self.feld: if objekt.pos==i.pos: a= f - self.get_x(objekt) a= a/8 return a f=f+1 def r_color(self, objekt): Farbe=False f=0 for i in self.feld: if Farbe: Farbe=False else: Farbe = True if i==objekt: if Farbe: objekt.color=(.8,.6,.5) else: objekt.color=(.6,.4,.3) if (f+1)%8==0: if Farbe: Farbe=False else: Farbe = True f=f+1 def check(self, objekt): a=True for i in BauerW: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in BauerS: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in TurmW: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in TurmS: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in LaeuferW: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in LaeuferS: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in SpringerW: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in SpringerS: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in DameW: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in DameS: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in KoenigW: if i.pos==objekt.pos + (0,.01,0): a=False return i for i in KoenigS: if i.pos==objekt.pos + (0,.01,0): a=False return i if a: return None def spielfiguren(sfeld): i=0 while i<8: BauerW.append(Bauer(pos=sfeld.get_pos(i,1))) i = i+1 i=0 while i<8: BauerS.append(Bauer2(pos=sfeld.get_pos(i,6))) i = i+1 #Turm TurmW.append(Turm(pos=sfeld.get_pos(0,0))) TurmW.append(Turm(pos=sfeld.get_pos(7,0))) TurmS.append(Turm2(pos=sfeld.get_pos(0,7))) TurmS.append(Turm2(pos=sfeld.get_pos(7,7))) #Springer SpringerW.append(Pferdchen(pos=sfeld.get_pos(1,0))) SpringerW.append(Pferdchen(pos=sfeld.get_pos(6,0))) SpringerS.append(Pferdchen2(pos=sfeld.get_pos(1,7))) SpringerS.append(Pferdchen2(pos=sfeld.get_pos(6,7))) #Läufer LaeuferW.append(Laeufer(pos=sfeld.get_pos(2,0))) LaeuferW.append(Laeufer(pos=sfeld.get_pos(5,0))) LaeuferS.append(Laeufer2(pos=sfeld.get_pos(2,7))) LaeuferS.append(Laeufer2(pos=sfeld.get_pos(5,7))) #Dame DameW.append(Dame(pos=sfeld.get_pos(4,0))) DameS.append(Dame2(pos=sfeld.get_pos(4,7))) #Koenig KoenigW.append(Koenig(pos=sfeld.get_pos(3,0))) KoenigS.append(Koenig2(pos=sfeld.get_pos(3,7))) def collisionSphere(obj1,obj2): m=mag(obj1.pos-obj2.pos) r=obj1.radius+obj2.radius if m<=r: return true else: return false class Active(Thread): "Das Aktive Objekt handeln)" def __init__(self, pick): Thread.__init__(self) self.pick=pick self.active=None Thread.start(self) def run(self): while true: if self.active == None: self.active = self.pick else: self.active.color = color.white c = s.check(self.active) if c != None and self.pick != self.active and self.pick!=None: if s.check(self.pick): s.check(self.pick).pos=(-1,0,-1) sender.sendto(str(s.get_x(self.active)) + '-' + str(s.get_y(self.active))+'-'+str(s.get_x(self.pick))+'-'+str(s.get_y(self.pick)), (HOST,PORT)) print str(s.get_x(self.active)) + '-' + str(s.get_y(self.active))+'-'+str(s.get_x(self.pick))+'-'+str(s.get_y(self.pick)), (HOST,PORT) c.pos=s.get_pos(s.get_x(self.pick),s.get_y(self.pick)) s.r_color(self.active) self.pick=None if c==None: self.pick=None if self.pick == None: s.r_color(self.active) self.active=self.pick class empf(Thread): "Server-Client" def __init__(self): Thread.__init__(self) Thread.start(self) def run(self): while True: data, self.client = service.recvfrom(30) print "Verbindung von", self.client, "schreibt:", data text= data.split('-') i1 = int(text[0]) i2 = int(text[1]) i3 = int(text[2]) i4 = int(text[3]) if s.check(s.gfeld(i3,i4)): s.check(s.gfeld(i3,i4)).pos=(-1,0,-1) obj = s.gfeld(i1,i2) s.check(obj).pos=s.get_pos(i3,i4) if __name__ == "__main__": s=Spielfeld() spielfiguren(s) thread = Active(pick) e = empf() while True: rate(50) if scene.mouse.events: m1 = scene.mouse.getevent() if m1.click=='left': a=True for i in s.feld: if m1.pick == i: thread.pick=i a=False print pick if a: pick=None print pick