Начало реализации игрового цикла и закрытие некоторых гештальтов

This commit is contained in:
Евгений Титаренко 2023-07-11 19:35:15 +03:00
parent a5e3234568
commit 4275036531
3 changed files with 76 additions and 31 deletions

29
game.py
View file

@ -23,7 +23,7 @@ STREETS = []
class GameState(Enum):
WAITING = 0
START = 0
IN_GAME = 1
FINISHED = 2
@ -174,13 +174,15 @@ def get_dict_user_or_none(user: User | None):
class Room:
def __init__(self, password: str = ""):
def __init__(self, socket, password: str = ""):
self.socket = socket
self.room_id = str(uuid4())
self.users = []
self.state = GameState.WAITING
self.state = GameState.START
self.password = password
self.current_player = None
self.streets = copy_streets()
self.ready_users = []
def get_dict(self):
return {
@ -194,12 +196,14 @@ class Room:
def check_color(self, color: Color):
return color not in [user.color for user in self.users]
def add_user(self, user: User):
if len(self.users) == MAX_PLAYERS:
return # TODO
async def send_room_info(self):
await self.socket.emit('roomInfo', self.get_dict(), room=self.room_id)
async def add_user(self, user: User):
available_colors = list(filter(self.check_color, list(DefaultColors)))
user.color = choice_color_from_list(available_colors)
self.users.append(user)
await self.send_room_info()
def sort_players_by_initiative(self):
self.users.sort(key=lambda user: user.initiative, reverse=True)
@ -219,9 +223,20 @@ class Room:
self.current_player = self.users[0]
self.state = GameState.IN_GAME
def remove_user(self, user: User):
async def remove_user(self, user: User):
if user in self.users:
self.users.remove(user)
await self.send_room_info()
def is_empty(self):
return not len(self.users) > 0
def is_full(self):
return len(self.users) == MAX_PLAYERS
async def set_user_ready(self, user):
self.ready_users.append(user)
if len(self.ready_users) == len(self.users):
self.start_game()
else:
await self.send_room_info()