Я создаю игру в понг, чтобы мультиплеер мог присоединиться к игре.
Протокол P2P:
После запуска программа отправит число 230. После отправки 220 , он пытается получить целое число. Если никто не слушает во время первой отправки, то возникает исключение повышения.
Как только получено целое число, будет либо 220, либо 221. Если мы равноправны, то отправим 222. Если мы равноправны 2, я нужно отправить 221, затем получить целое число и проверить, что это 222. В противном случае возникает исключение.
Мой код, но его необходимо исправить:
def p2p_connection(sock, addr):
sock.sendto(bytes(220),addr)
data, recvaddr = sock.recvfrom(1024)
if data != 220 or data != 221:
raise Exception("error")
else:
if data == 220:
sock.sendto(bytes(221),addr)
else:
sock.sendto(bytes(222),addr)
def choose_player(sock, addr):
"""
Choosing which player. Both sides in the P2P,(either 0 or
1) and send that to the peer while also receiving an integer from the peer. If our random number
not equal to the peer's number then we have chosen distinct roles for each peer (0 will be for
the right player and 1 will be for the left player). If the numbers are equal however then we
haven't picked distinct roles so each peer will select and send a new random number.
returns the player number we are (0 for right and 1 for left).
"""
data, recvaddr = sock.recvfrom(1024)
if data == 321:
return 1
elif data == 322:
return 0
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('', args.port))
# P2P connection
p2p_connection(sock, addr)
sock.settimeout(0.05)
if choose_player(sock) == 1:
pong = LeftPlayer(window, sock)
else:
pong = PRightPlayer(window, sock)
# updating and drawing the game.
...