summaryrefslogtreecommitdiff
path: root/swiftstory/game.py
diff options
context:
space:
mode:
Diffstat (limited to 'swiftstory/game.py')
-rw-r--r--swiftstory/game.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/swiftstory/game.py b/swiftstory/game.py
index c46df4b..b2ec493 100644
--- a/swiftstory/game.py
+++ b/swiftstory/game.py
@@ -1,3 +1,5 @@
+""" Module that defines the main component of the game. """
+
from enum import Enum, auto
import random
from typing import List, Optional, Tuple
@@ -9,12 +11,14 @@ from swiftstory.status import error, success
class GameState(Enum):
+ """ Enumeration of the different game states. """
WAITING_NEW_JUDGE = auto(),
WAITING_COLLECTION = auto(),
WAITING_DESIGNATION = auto(),
class Game:
+ """ Represent a game, including the board, players and state. """
def __init__(self, white_desc: List[str], black_desc: List[str]) -> None:
self.state = GameState.WAITING_NEW_JUDGE
@@ -31,6 +35,7 @@ class Game:
random.shuffle(self.board.black_pick)
def try_join(self, player: Player) -> str:
+ """ Attempt to join the game. Return an answer. """
if len(self.players) >= 10:
raise JoinError('too many players in this game')
@@ -64,6 +69,7 @@ class Game:
def try_become_judge(self, player: Player) -> str:
+ """ Attempt to become the judge of the game. Return an answer. """
if self.state is not GameState.WAITING_NEW_JUDGE:
# TODO what if the judge has quit ?
raise WrongAction('Someone is judge already')
@@ -81,6 +87,7 @@ class Game:
def try_play_card(self, player: Player, card_id: int) -> str:
+ """ Attempt to play a card. Return an answer. """
if self.state is not GameState.WAITING_COLLECTION:
raise WrongAction('Who asked you to play now ?!')
@@ -106,6 +113,8 @@ class Game:
def try_collect_cards(self, player: Player) -> str:
+ """ Attempt to collect the cards play in the current round. Return an
+ answer. """
if self.state is not GameState.WAITING_COLLECTION:
raise WrongAction("Do you think it's the moment for collection !?")
@@ -125,6 +134,7 @@ class Game:
def try_designate_card(self, player: Player, card_id: Optional[int]) -> str:
+ """ Attempt to designate the best card. Return an answer. """
if self.state is not GameState.WAITING_DESIGNATION:
raise WrongAction('Not now, moron !')
@@ -177,15 +187,19 @@ class Game:
return move_on()
def try_view_player_cards(self, player: Player) -> str:
+ """ Attempt to view the cards of the given player. Return an answer. """
return success([(idx, desc) for idx, (_, desc) in player.cards.items()])
def try_view_played_cards(self, player: Player) -> str:
+ """ Attempt to view the cards that have been played. Return an answer.
+ """
if self.state is not GameState.WAITING_DESIGNATION:
raise WrongAction('Not now, moron !')
return success([desc for (_, desc), _ in self.board.played_cards])
def try_view_black_card(self, player: Player) -> str:
+ """ Attempt to view the black card. Return an answer. """
card = self.board.current_black_card
if card is not None:
@@ -194,6 +208,7 @@ class Game:
raise WrongAction('The black card has not been revealed yet')
def disconnect(self, player: Player) -> None:
+ """ Deatch a player from the game. """
if self.judge is player:
self.judge = None