Spielen übers Netz: Client-Server-Variante
Beide Spieler starten dasselbe Skript, es müssen nur die Ports und die Adresse des anderen übernommen werden sowie .
spieleclient-server_simpel3.py — text/python-source, 2 KB (2799 bytes)
Dateiinhalt
# -*- coding: utf-8 -*- # Client und Server gleichzeitig import socket # Modul für Netzwerkverbindung from threading import Thread # Modul für Nebenläufigkeit from visual import * # 3D-Modul # Portnummer und Hostadresse des Servers: bei Bedarf aendern FremdPORT=8001 HOST="192.168.178.20" EigenPORT=8000 objekte = [sphere(pos=(1,0,0), color=color.yellow, opacity=0.8),\ sphere(pos=(-1,0,0), color=color.green, opacity=0.8)] class Client(Thread): """Schnelle Verbindung zu Server""" def __init__(self, host=HOST, fport=FremdPORT, eport=EigenPORT): Thread.__init__(self) self.host = host self.fport = fport self.eport = eport # UDP-Socket für Clientfunktion self.f = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP-Socket für Eigenserver self.e = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.e.bind(("",eport)) def run(self): # interne Startmethode des Threads while 1: # Endlosschleife der Serverausgabe (50 Zeichen) try: # Info vom Server hören und umsetzen #print self.f.recvfrom(50)[0] info = self.e.recvfrom(50)[0] exec(info) except: print "Fehler beim Ausführen von Serveranweisung" def action(self,obj): # startet den Client, indem self.start() # der Thread aufgerufen wird while True: # Endlosschleife bis Nachricht versandt rate(50) if scene.kb.keys: s = scene.kb.getkey() print s if s == 'left': # links objekte[obj].x += -1 elif s == 'right': # right objekte[obj].x += 1 elif s == 'up': # vor objekte[obj].z -= 1 elif s == 'down': # zurück objekte[obj].z += 1 elif s == '0': # zurück auf Ursprung setzen; Geschw. null; Kamera ran objekte[obj].pos = (0,0,0) self.f.sendto("objekte[%s].pos=(%s,%s,%s)"\ %(obj,objekte[obj].x,objekte[obj].y,objekte[obj].z),\ (self.host, self.fport)) if mag(objekte[0].pos-objekte[1].pos)<2: objekte[0].color=color.orange objekte[1].color=color.cyan else: objekte[0].color=color.yellow objekte[1].color=color.green # Hier Hostadresse, FremdPort, Eigenport dem Konstruktor übergeben c = Client() # 0 = gelbe Kugel, 1 = grüne c.action(1)