From 89160d2454a16999f1469874c154d1423d0dda0d Mon Sep 17 00:00:00 2001 From: Neuron Teckid Date: Fri, 10 Feb 2012 13:49:59 +0800 Subject: [PATCH] add characters and skills --- core/src/event.py | 10 ++++++++++ core/src/game_control.py | 6 ++++-- ext/src/characters.py | 26 ++++++++++++++++++++++++++ ext/src/players_control.py | 14 ++++++++++++++ gateway/wsgi/game.py | 18 ++++++++++++------ 5 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 ext/src/characters.py diff --git a/core/src/event.py b/core/src/event.py index 763f69c..1a6787a 100644 --- a/core/src/event.py +++ b/core/src/event.py @@ -26,6 +26,16 @@ def as_log(self): def add(self, event): self.events.append(event) +class GameStarted(Event): + def __init__(self, players): + self.players = players + + def _as_log(self): + return { 'characters': map(lambda p: { + 'player_id': p.player_id, + 'character': p.character_name, + }, self.players) } + def card_to_msg(c): return { 'name': c.name, diff --git a/core/src/game_control.py b/core/src/game_control.py index 2541fed..558ac51 100644 --- a/core/src/game_control.py +++ b/core/src/game_control.py @@ -10,10 +10,12 @@ def __init__(self, event_list, card_pool, players_control, action_stack): self.action_stack = action_stack def start(self): - for player in self.players_control.players: - player.start(self) + self.players_control.start(self) self.players_control.current_player().round(self) + def characters_selected(self, players): + self._add_event(event.GameStarted(players)) + def next_round(self): self.players_control.next_player() self.players_control.current_player().round(self) diff --git a/ext/src/characters.py b/ext/src/characters.py new file mode 100644 index 0000000..3971327 --- /dev/null +++ b/ext/src/characters.py @@ -0,0 +1,26 @@ +from ext.src.skills import bequeathed_strategy, merciless, dragon_heart, \ + martial_saint, prodigy, horsemanship, fury_pith, \ + heavenly_scent + +class Character: + def __init__(self, name, character_skills): + self.name = name + self.skills = character_skills + + def select(self, player): + player.character_name = self.name + for s in self.skills: s.add_to(player) + +GUO_JIA = Character('Guo Jia', [bequeathed_strategy]) +ZHANG_CHUNHUA = Character('Zhang Chunhua', [merciless]) + +ZHAO_YUN = Character('Zhao Yun', [dragon_heart]) +GUAN_YU = Character('Guan Yu', [martial_saint]) +HUANG_YUEYING = Character('Huang Yueying', [prodigy]) +MA_CHAO = Character('Ma Chao', [horsemanship]) +WEI_YAN = Character('Wei Yan', [fury_pith]) + +JUNIOR_QIAO = Character('Junior Qiao', [heavenly_scent]) + +MA_CHAO_SP = Character('Ma Chao SP', [horsemanship]) +PAND_DE = Character('Pang De', [horsemanship]) diff --git a/ext/src/players_control.py b/ext/src/players_control.py index e8c79d8..6707c04 100644 --- a/ext/src/players_control.py +++ b/ext/src/players_control.py @@ -45,6 +45,20 @@ class PlayersControl(CorePlayersControl): def __init__(self): CorePlayersControl.__init__(self) + def add_player(self, player): + if 8 == len(self.players): + raise ValueError('Room is full') + return CorePlayersControl.add_player(self, player) + + def start(self, game_control): + from ext.src.characters import * + CHARACTERS = [GUO_JIA, ZHANG_CHUNHUA, ZHAO_YUN, GUAN_YU, HUANG_YUEYING, + HUANG_YUEYING, MA_CHAO, WEI_YAN] + for i in range(0, len(self.players)): + CHARACTERS[i].select(self.players[i]) + game_control.characters_selected(self.players) + for player in self.players: player.start(game_control) + def next_player(self): self.current_pid = (self.current_pid + 1) % len(self.players) if None == self.current_player(): diff --git a/gateway/wsgi/game.py b/gateway/wsgi/game.py index 07f6753..49dbf39 100644 --- a/gateway/wsgi/game.py +++ b/gateway/wsgi/game.py @@ -45,12 +45,18 @@ def after_game_start(self, path, request_body): } def add_player(self, time, name): - token = sha256(name + str(time)).hexdigest() - self.players_tokens.append(token) - return { - 'code': ret_code.OK, - 'token': token, - } + try: + token = sha256(name + str(time)).hexdigest() + self.players_tokens.append(token) + return { + 'code': ret_code.OK, + 'token': token, + } + except ValueError, e: + return { + 'code': ret_code.BAD_REQUEST, + 'reason': e.message, + } def start(self): if len(self.players_tokens) < 2: