fix: python client not reconginizng end conditions
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
FROM rust:1.91.1 as build
|
||||
FROM rust:1.91.1 AS build
|
||||
|
||||
RUN rustup target add x86_64-unknown-linux-musl && \
|
||||
apt update && \
|
||||
|
||||
@@ -2,11 +2,13 @@ import asyncio
|
||||
import websockets
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class Slot(Enum):
|
||||
NONE = 0
|
||||
RED = 1
|
||||
BLUE = 2
|
||||
|
||||
|
||||
def calculate_move(opponent_move, board, our_color, opponent_color):
|
||||
if opponent_move is not None:
|
||||
print(f"Opponent played column {opponent_move}")
|
||||
@@ -14,13 +16,13 @@ def calculate_move(opponent_move, board, our_color, opponent_color):
|
||||
# Use the board variable to see and set the current state of the board
|
||||
return int(input("Column: "))
|
||||
|
||||
|
||||
async def gameloop(socket):
|
||||
board = [[Slot.NONE] * 5 for _ in range(6)]
|
||||
our_color = Slot.NONE
|
||||
opponent_color = Slot.NONE
|
||||
while True: # While game is active, continually anticipate messages
|
||||
message = (await socket.recv()).split(':') # Receive message from server
|
||||
print(f"Received message: {message}")
|
||||
|
||||
match message[0]:
|
||||
case 'CONNECT':
|
||||
@@ -31,23 +33,23 @@ async def gameloop (socket):
|
||||
if message[2] == '1':
|
||||
our_color = Slot.RED
|
||||
opponent_color = Slot.BLUE
|
||||
col = calculate_move(None, board, our_color, opponent_color) # calculate_move is some arbitrary function you have created to figure out the next move
|
||||
col = calculate_move(None, board, our_color,
|
||||
opponent_color) # calculate_move is some arbitrary function you have created to figure out the next move
|
||||
await socket.send(f'PLAY:{col}') # Send your move to the sever
|
||||
else:
|
||||
our_color = Slot.BLUE
|
||||
opponent_color = Slot.RED
|
||||
|
||||
case 'OPPONENT': # Opponent has gone; calculate next move
|
||||
col = calculate_move(message[1], board, our_color, opponent_color) # Give your function your opponent's move
|
||||
await socket.send(f'PLAY:{col}') # Send your move to the sever
|
||||
|
||||
case 'WIN' | 'LOSS' | 'DRAW' | 'TERMINATED': # Game has ended
|
||||
if (message[1] == 'WINS') | (message[1] == 'LOSS') | (message[1] == 'DRAW') | (message[1] == 'TERMINATED'): # Game has ended
|
||||
print(message[0])
|
||||
board = [[Slot.NONE] * 5 for _ in range(6)]
|
||||
our_color = None
|
||||
opponent_color = None
|
||||
await socket.send('READY')
|
||||
|
||||
case 'OPPONENT': # Opponent has gone; calculate next move
|
||||
col = calculate_move(message[1], board, our_color, opponent_color) # Give your function your opponent's move
|
||||
await socket.send(f'PLAY:{col}') # Send your move to the sever
|
||||
|
||||
case 'KICK':
|
||||
print("You have been kicked from the game")
|
||||
break
|
||||
@@ -58,11 +60,13 @@ async def gameloop (socket):
|
||||
|
||||
await socket.close()
|
||||
|
||||
|
||||
async def join_server(username):
|
||||
async with websockets.connect(f'wss://connect4.abunchofknowitalls.com') as socket: # Establish websocket connection
|
||||
await socket.send(f'CONNECT:{username}')
|
||||
await gameloop(socket)
|
||||
|
||||
|
||||
if __name__ == '__main__': # Program entrypoint
|
||||
username = input("Enter username: ")
|
||||
asyncio.run(join_server(username))
|
||||
Reference in New Issue
Block a user