rlcard.games.doudizhu¶
rlcard.games.doudizhu.dealer¶
Implement Doudizhu Dealer class
- class rlcard.games.doudizhu.dealer.DoudizhuDealer(np_random)¶
Bases:
object
Dealer will shuffle, deal cards, and determine players’ roles
- deal_cards(players)¶
Deal cards to players
- Parameters:
players (list) – list of DoudizhuPlayer objects
- determine_role(players)¶
Determine landlord and peasants according to players’ hand
- Parameters:
players (list) – list of DoudizhuPlayer objects
- Returns:
landlord’s player_id
- Return type:
int
- shuffle()¶
Randomly shuffle the deck
rlcard.games.doudizhu.game¶
Implement Doudizhu Game class
- class rlcard.games.doudizhu.game.DoudizhuGame(allow_step_back=False)¶
Bases:
object
Provide game APIs for env to run doudizhu and get corresponding state information.
- static get_num_actions()¶
Return the total number of abstract acitons
- Returns:
the total number of abstract actions of doudizhu
- Return type:
int
- get_num_players()¶
Return the number of players in doudizhu
- Returns:
the number of players in doudizhu
- Return type:
int
- get_player_id()¶
Return current player’s id
- Returns:
current player’s id
- Return type:
int
- get_state(player_id)¶
Return player’s state
- Parameters:
player_id (int) – player id
- Returns:
The state of the player
- Return type:
(dict)
- init_game()¶
Initialize players and state.
- Returns:
first state in one game int: current player’s id
- Return type:
dict
- is_over()¶
Judge whether a game is over
- Returns:
True(over) / False(not over)
- Return type:
Bool
- step(action)¶
Perform one draw of the game
- Parameters:
action (str) – specific action of doudizhu. Eg: ‘33344’
- Returns:
next player’s state int: next player’s id
- Return type:
dict
- step_back()¶
Return to the previous state of the game
- Returns:
True if the game steps back successfully
- Return type:
(bool)
rlcard.games.doudizhu.judger¶
Implement Doudizhu Judger class
- class rlcard.games.doudizhu.judger.DoudizhuJudger(players, np_random)¶
Bases:
object
Determine what cards a player can play
- calc_playable_cards(player)¶
Recalculate all legal cards the player can play according to his current hand.
- Parameters:
player (DoudizhuPlayer object) – object of DoudizhuPlayer
init_flag (boolean) – For the first time, set it True to accelerate the preocess.
- Returns:
list of string of playable cards
- Return type:
list
- static chain_indexes(indexes_list)¶
Find chains for solos, pairs and trios by using indexes_list
- Parameters:
indexes_list – the indexes of cards those have the same count, the count could be 1, 2, or 3.
- Returns:
[(start_index1, length1), (start_index1, length1), …]
- Return type:
list of tuples
- get_playable_cards(player)¶
Provide all legal cards the player can play according to his current hand.
- Parameters:
player (DoudizhuPlayer object) – object of DoudizhuPlayer
init_flag (boolean) – For the first time, set it True to accelerate the preocess.
- Returns:
list of string of playable cards
- Return type:
list
- static judge_game(players, player_id)¶
Judge whether the game is over
- Parameters:
players (list) – list of DoudizhuPlayer objects
player_id (int) – integer of player’s id
- Returns:
True if the game is over
- Return type:
(bool)
- static judge_payoffs(landlord_id, winner_id)¶
- classmethod pair_attachments(cards_count, chain_start, chain_length, size)¶
Find pair attachments for trio_chain_pair_x and four_two_pair
- Parameters:
cards_count –
chain_start – the index of start card of the trio_chain or trio or four
chain_length – the size of the sequence of the chain, 1 for trio_pair or four_two_pair
size – count of pairs for the attachments
- Returns:
- [attachment1, attachment2, …]
Each attachment has two elemnts, the first one contains indexes of attached cards smaller than the index of chain_start, the first one contains indexes of attached cards larger than the index of chain_start
- Return type:
list of tuples
- static playable_cards_from_hand(current_hand)¶
Get playable cards from hand
- Returns:
set of string of playable cards
- Return type:
set
- restore_playable_cards(player_id)¶
restore playable_cards for judger for game.step_back().
- Parameters:
player_id – The id of the player whose playable_cards need to be restored
- classmethod solo_attachments(hands, chain_start, chain_length, size)¶
Find solo attachments for trio_chain_solo_x and four_two_solo
- Parameters:
hands –
chain_start – the index of start card of the trio_chain or trio or four
chain_length – the size of the sequence of the chain, 1 for trio_solo or four_two_solo
size – count of solos for the attachments
- Returns:
- [attachment1, attachment2, …]
Each attachment has two elemnts, the first one contains indexes of attached cards smaller than the index of chain_start, the first one contains indexes of attached cards larger than the index of chain_start
- Return type:
list of tuples
rlcard.games.doudizhu.player¶
Implement Doudizhu Player class
- class rlcard.games.doudizhu.player.DoudizhuPlayer(player_id, np_random)¶
Bases:
object
Player can store cards in the player’s hand and the role, determine the actions can be made according to the rules, and can perfrom corresponding action
- available_actions(greater_player=None, judger=None)¶
Get the actions can be made based on the rules
- Parameters:
greater_player (DoudizhuPlayer object) – player who played
- current biggest cards.
judger (DoudizhuJudger object): object of DoudizhuJudger
- Returns:
list of string of actions. Eg: [‘pass’, ‘8’, ‘9’, ‘T’, ‘J’]
- Return type:
list
- property current_hand¶
- get_state(public, others_hands, num_cards_left, actions)¶
- play(action, greater_player=None)¶
Perfrom action
- Parameters:
action (string) – specific action
greater_player (DoudizhuPlayer object) – The player who played current biggest cards.
- Returns:
If there is a new greater_player, return it, if not, return None
- Return type:
object of DoudizhuPlayer
- play_back()¶
Restore recorded cards back to self._current_hand
- set_current_hand(value)¶
rlcard.games.doudizhu.round¶
Implement Doudizhu Round class
- class rlcard.games.doudizhu.round.DoudizhuRound(np_random, played_cards)¶
Bases:
object
Round can call other Classes’ functions to keep the game running
- static cards_ndarray_to_str(ndarray_cards)¶
- find_last_greater_player_id_in_trace()¶
Find the last greater_player’s id in trace
- Returns:
The last greater_player’s id in trace
- find_last_played_cards_in_trace(player_id)¶
Find the player_id’s last played_cards in trace
- Returns:
The player_id’s last played_cards in trace
- initiate(players)¶
Call dealer to deal cards and bid landlord.
- Parameters:
players (list) – list of DoudizhuPlayer objects
- proceed_round(player, action)¶
Call other Classes’s functions to keep one round running
- Parameters:
player (object) – object of DoudizhuPlayer
action (str) – string of legal specific action
- Returns:
player who played current biggest cards.
- Return type:
object of DoudizhuPlayer
- step_back(players)¶
Reverse the last action
- Parameters:
players (list) – list of DoudizhuPlayer objects
- Returns:
The last player id and the cards played
- update_public(action)¶
Update public trace and played cards
- Parameters:
action (str) – string of legal specific action