summaryrefslogtreecommitdiff
path: root/swiftstory/game.py
diff options
context:
space:
mode:
authorOlivier Gayot <olivier.gayot@sigexec.com>2021-12-29 17:05:21 +0100
committerOlivier Gayot <olivier.gayot@sigexec.com>2021-12-29 17:06:29 +0100
commit95ca11e98c47c3e8e57093c37134a6f51bcb6f30 (patch)
tree4c10504aee30dab96e6d5836f0f35f9d6a6a9810 /swiftstory/game.py
parent8d242a5e6c090ee8165b36fea6520d533269518e (diff)
Add type hinting everywhere so we can enable strict mypy options
Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
Diffstat (limited to 'swiftstory/game.py')
-rw-r--r--swiftstory/game.py71
1 files changed, 37 insertions, 34 deletions
diff --git a/swiftstory/game.py b/swiftstory/game.py
index 4569a5c..c46df4b 100644
--- a/swiftstory/game.py
+++ b/swiftstory/game.py
@@ -124,59 +124,62 @@ class Game:
return self.try_view_played_cards(player)
- def try_designate_card(self, player: Player, card_id: int) -> str:
+ def try_designate_card(self, player: Player, card_id: Optional[int]) -> str:
if self.state is not GameState.WAITING_DESIGNATION:
raise WrongAction('Not now, moron !')
if self.judge is not player:
raise WrongAction('Who do you think you are !?')
- if card_id is None and len(self.board.played_cards) > 0:
- raise WrongAction('There are cards on the board, pick one !')
+ def move_on() -> str:
+ self.judge = None
- if card_id is not None or len(self.board.played_cards) > 0:
- # if there are cards on the board
- # TODO check exception
- try:
- card, winner = self.board.played_cards[card_id]
- except IndexError:
- return error('Invalid card')
+ for p in self.players:
+ if p is not player:
+ p.register_notification({'op': 'judge_needed'})
- winner.inc_score()
+ self.state = GameState.WAITING_NEW_JUDGE
+ return success(None)
- # put the cards back in the deck
- self.board.recycle_played_cards()
+ if not self.board.played_cards:
+ return move_on()
- # reset the state of the players
- for p in self.players:
- if p.has_played:
- idx = p.receive_card(self.board.pick_white_card())
-
- p.register_notification({
- 'op': 'received_card',
- 'content': {
- 'card': {
- 'id': idx,
- 'desc': p.cards[idx][1],
- },
- },
- })
- p.has_played = False
+ if card_id is None:
+ raise WrongAction('There are cards on the board, pick one !')
+
+ # TODO check exception
+ try:
+ card, winner = self.board.played_cards[card_id]
+ except IndexError:
+ return error('Invalid card')
+
+ winner.inc_score()
- self.judge = None
+ # put the cards back in the deck
+ self.board.recycle_played_cards()
+ # reset the state of the players
for p in self.players:
- if p is not player:
- p.register_notification({'op': 'judge_needed'})
+ if p.has_played:
+ idx = p.receive_card(self.board.pick_white_card())
- self.state = GameState.WAITING_NEW_JUDGE
+ p.register_notification({
+ 'op': 'received_card',
+ 'content': {
+ 'card': {
+ 'id': idx,
+ 'desc': p.cards[idx][1],
+ },
+ },
+ })
+ p.has_played = False
- return success(None)
+ return move_on()
def try_view_player_cards(self, player: Player) -> str:
return success([(idx, desc) for idx, (_, desc) in player.cards.items()])
- def try_view_played_cards(self, player: Player):
+ def try_view_played_cards(self, player: Player) -> str:
if self.state is not GameState.WAITING_DESIGNATION:
raise WrongAction('Not now, moron !')