, поэтому я пытаюсь сделать эту игру для 2 игроков, поэтому я закодировал, чтобы отправить положение змеи первого клиента на сервер, а сервер отправил эти данные второму клиенту и сделал то же самое для второго клиента. но когда клиент получает позицию, клиент получает более одной позиции.
Чтобы было понятно, я объясню с кодом
all_sprite = pg.sprite.Group()
class Opponent(pg.sprite.Sprite):
def __init__(self):
self.group = all_sprite
pg.sprite.Sprite.__init__(self, self.group)
self.image = pg.Surface((TILESIZE, TILESIZE))
self.image.fill((155,155,155))
self.rect = self.image.get_rect()
tLock = threading.Lock()
#to recieve the data
def recv():
while True:
with tLock:
data = str(sock.recv(1024), 'utf-8')
try:
a,b = map(int, data.split())
print(a,b)
o.rect.x = a
o.rect.y = b
except:
if data == "ok":
o = Opponent()
else:
print(data)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 6666))
sThread = threading.Thread(target=recv)
sThread.daemon = True
sThread.start()
# To send the data
class Sending(threading.Thread):
def __init__(self,s):
self.x = 0
self.y = 0
self.lock = threading.RLock()
self.socket = s
super(Sending, self).__init__()
def setxny(self,x,y):
with self.lock:
self.x = x
self.y = y
def run(self):
while True:
with self.lock:
a,b= str(self.x),str(self.y)
self.socket.send(bytes(a+" "+b, 'utf-8'))
send_thread = Sending(sock)
send_thread.daemon=True
send_thread.start()
while RUNNING:
send_thread.setxny(snakehead.rect.x,snakehead.rect.y )
clock.tick(1)
for event in pg.event.get():
if event.type == pg.QUIT:
RUNNING = False
.....after this it's all about pygame so i will not include it
чтобы проверить, получает ли клиент правильную позицию змеи, я закодировал печать данных, когда клиент получит данные, и на выходе получится это
100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100 480100
и это то, что я хотел увидеть ...
100 480
как я могу решить эту проблему?