def step(self, action): ''' Perform one draw of the game Args: action (str): specific action of doudizhu. Eg: '33344' Returns: dict: next player's state int: next player's id ''' if self.allow_step_back: # TODO: don't record game.round, game.players, game.judger if allow_step_back not set pass # perfrom action player = self.players[self.round.current_player] self.round.proceed_round(player, action) if (action != 'pass'): self.judger.calc_playable_cards(player) if self.judger.judge_game(self.players, self.round.current_player): self.winner_id = self.round.current_player next_id = get_downstream_player_id(player, self.players) self.round.current_player = next_id # get next state state = self.get_state(next_id) self.state = state return state, next_id
def _get_others_current_hand(self, player): player_up = self.players[get_upstream_player_id(player, self.players)] player_down = self.players[get_downstream_player_id( player, self.players)] others_hand = merge(player_up.current_hand, player_down.current_hand, key=functools.cmp_to_key(doudizhu_sort_card)) return cards2str(others_hand)