Начало реализации игрового цикла и закрытие некоторых гештальтов
This commit is contained in:
parent
a5e3234568
commit
4275036531
3 changed files with 76 additions and 31 deletions
29
game.py
29
game.py
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue