61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
from pywerwolf import models
|
|
import typing as t
|
|
import uuid
|
|
|
|
|
|
class Game(object):
|
|
state: models.GameState
|
|
|
|
def __init__(self, game_id: t.Union[str, uuid.UUID] = None):
|
|
if game_id is None:
|
|
self.create_new_game_state()
|
|
else:
|
|
self.load_game_state(game_id)
|
|
|
|
def create_new_game_state(self):
|
|
pass
|
|
|
|
def load_game_state(self, game_id: t.Union[str, uuid.UUID]):
|
|
pass
|
|
|
|
def valid_game(self):
|
|
# check if game has been created or loaded
|
|
return True
|
|
|
|
def check_victory(self):
|
|
"""check for a winner of the current game"""
|
|
if not self.valid_game():
|
|
return None
|
|
|
|
if self.state.currentPhase == models.GamePhase.Award:
|
|
return True
|
|
|
|
if sum(1 for _ in self.werewolfes) > 0:
|
|
if sum(1 for _ in self.villagers) <= 0:
|
|
return models.RoleGroup.Werewolfs
|
|
pass
|
|
else:
|
|
return models.RoleGroup.Villagers
|
|
|
|
if sum(1 for _ in self.player_alive) == 2:
|
|
living = list(self.player_alive)
|
|
if living[0].lovedOne == living[1]:
|
|
return models.RoleGroup.LovedOnes
|
|
|
|
return None
|
|
|
|
@property
|
|
def player_alive(self):
|
|
"""Generator for players still alive"""
|
|
return filter(lambda x: x.alive, self.state.players)
|
|
|
|
@property
|
|
def werewolfes(self):
|
|
"""Generator for players that are werewolfes"""
|
|
return filter(models.Player.isWerwolf, self.player_alive)
|
|
|
|
@property
|
|
def villagers(self):
|
|
"""Generator for players that are villagers"""
|
|
return filter(not (models.Player.isWerwolf), self.player_alive)
|