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.

An example of state during runtime:
{

‘deck’: ‘3333444455556666777788889999TTTTJJJJQQQQKKKKAAAA2222BR’, ‘seen_cards’: ‘TQA’, ‘landlord’: 0, ‘self’: 2, ‘initial_hand’: ‘3456677799TJQKAAB’, ‘trace’: [(0, ‘8222’), (1, ‘pass’), (2, ‘pass’), (0, ‘6KKK’),

(1, ‘pass’), (2, ‘pass’), (0, ‘8’), (1, ‘Q’)],

‘played_cards’: [‘6’, ‘8’, ‘8’, ‘Q’, ‘K’, ‘K’, ‘K’, ‘2’, ‘2’, ‘2’], ‘others_hand’: ‘333444555678899TTTJJJQQAA2R’, ‘current_hand’: ‘3456677799TJQKAAB’, ‘actions’: [‘pass’, ‘K’, ‘A’, ‘B’]

}

static get_action_num()

Return the total number of abstract acitons

Returns

the total number of abstract actions of doudizhu

Return type

int

get_player_id()

Return current player’s id

Returns

current player’s id

Return type

int

get_player_num()

Return the number of players in doudizhu

Returns

the number of players in doudizhu

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, 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)

Bases: object

Round can call other Classes’ functions to keep the game running

cards_ndarray_to_list(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