РАКЕТА | ПИТОН | как получить одно сообщение (?) за раз - PullRequest
0 голосов
/ 04 мая 2018

, поэтому я пытаюсь сделать эту игру для 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

как я могу решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...