Class: MatchState
- Inherits:
-
Object
- Object
- MatchState
- Defined in:
- lib/acpc_poker_types/match_state.rb
Overview
Model to parse and manage information from a given match state string.
Constant Summary collapse
- LABEL =
Returns Label for match state strings.
'MATCHSTATE'
Instance Attribute Summary collapse
-
#betting_sequence ⇒ Array<Array<PokerAction>>
readonly
The sequence of betting actions.
-
#board_cards ⇒ BoardCards
readonly
All visible community cards on the board.
-
#first_seat_in_each_round ⇒ Array<Integer>
readonly
The list of first seats for each round.
-
#hand_number ⇒ Integer
readonly
The hand number.
-
#list_of_hole_card_hands ⇒ Array<Hand>
readonly
The list of visible hole card sets for each player.
-
#position_relative_to_dealer ⇒ Integer
readonly
The position relative to the dealer of the player that received the match state string, indexed from 0, modulo the number of players.
Class Method Summary collapse
-
.build_match_state_string(position_relative_to_dealer, hand_number, betting_sequence, all_hole_cards, board_cards) ⇒ String
Builds a match state string from its given component parts.
-
.line_is_comment_or_empty?(line) ⇒ Boolean
Checks if the given line is a comment beginning with ‘#’ or ‘;’, or empty.
Instance Method Summary collapse
-
#==(another_match_state) ⇒ Boolean
true
if this match state string is equivalent toanother_match_state
,false
otherwise. -
#betting_sequence_string(betting_sequence = @betting_sequence) ⇒ String
The ACPC string created by the given betting sequence,
betting_sequence
. -
#first_state_of_first_round? ⇒ Boolean
Reports whether or not it is the first state of the first round.
-
#initialize(raw_match_state) ⇒ MatchState
constructor
A new instance of MatchState.
-
#last_action(betting_sequence = @betting_sequence) ⇒ PokerAction
The last action taken.
-
#list_of_opponents_hole_cards ⇒ Array
The list of opponent hole cards that are visible.
-
#number_of_actions_this_hand ⇒ Integer
The number of actions in the current hand.
-
#number_of_actions_this_round ⇒ Integer
The number of actions in the current round.
-
#number_of_players ⇒ Integer
The number of players in this match.
- #player_position_relative_to_self ⇒ Object
-
#round ⇒ Integer
The zero indexed current round number.
- #round_in_which_last_action_taken ⇒ Object
-
#to_str ⇒ String
(also: #to_s)
The MatchState in raw text form.
-
#users_hole_cards ⇒ Hand
The user’s hole cards.
Constructor Details
#initialize(raw_match_state) ⇒ MatchState
Returns a new instance of MatchState.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/acpc_poker_types/match_state.rb', line 76 def initialize(raw_match_state) raise IncompleteMatchState, raw_match_state if MatchState.line_is_comment_or_empty? raw_match_state all_actions = PokerAction::LEGAL_ACPC_CHARACTERS.to_a.join all_ranks = (Rank::DOMAIN.map { |rank, properties| properties[:acpc_character] }).join all_suits = (Suit::DOMAIN.map { |suit, properties| properties[:acpc_character] }).join all_card_tokens = all_ranks + all_suits if raw_match_state.match( /#{LABEL}:(\d+):(\d+):([\d#{all_actions}\/]*):([|#{all_card_tokens}]+)\/*([\/#{all_card_tokens}]*)/) @position_relative_to_dealer = $1.to_i @hand_number = $2.to_i @betting_sequence = parse_betting_sequence $3 @list_of_hole_card_hands = parse_list_of_hole_card_hands $4 @board_cards = parse_board_cards $5 end raise IncompleteMatchState, raw_match_state if incomplete_match_state? end |
Instance Attribute Details
#betting_sequence ⇒ Array<Array<PokerAction>> (readonly)
Returns The sequence of betting actions.
28 29 30 |
# File 'lib/acpc_poker_types/match_state.rb', line 28 def betting_sequence @betting_sequence end |
#board_cards ⇒ BoardCards (readonly)
Returns All visible community cards on the board.
34 35 36 |
# File 'lib/acpc_poker_types/match_state.rb', line 34 def board_cards @board_cards end |
#first_seat_in_each_round ⇒ Array<Integer> (readonly)
Returns The list of first seats for each round.
37 38 39 |
# File 'lib/acpc_poker_types/match_state.rb', line 37 def first_seat_in_each_round @first_seat_in_each_round end |
#hand_number ⇒ Integer (readonly)
Returns The hand number.
25 26 27 |
# File 'lib/acpc_poker_types/match_state.rb', line 25 def hand_number @hand_number end |
#list_of_hole_card_hands ⇒ Array<Hand> (readonly)
Returns The list of visible hole card sets for each player.
31 32 33 |
# File 'lib/acpc_poker_types/match_state.rb', line 31 def list_of_hole_card_hands @list_of_hole_card_hands end |
#position_relative_to_dealer ⇒ Integer (readonly)
Returns The position relative to the dealer of the player that received the match state string, indexed from 0, modulo the number of players.
22 23 24 |
# File 'lib/acpc_poker_types/match_state.rb', line 22 def position_relative_to_dealer @position_relative_to_dealer end |
Class Method Details
.build_match_state_string(position_relative_to_dealer, hand_number, betting_sequence, all_hole_cards, board_cards) ⇒ String
Builds a match state string from its given component parts.
52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/acpc_poker_types/match_state.rb', line 52 def self.build_match_state_string( position_relative_to_dealer, hand_number, betting_sequence, all_hole_cards, board_cards ) string = LABEL + ":#{position_relative_to_dealer}:#{hand_number}:#{betting_sequence}:#{all_hole_cards}" string += board_cards.to_acpc if board_cards && !board_cards.empty? string end |
.line_is_comment_or_empty?(line) ⇒ Boolean
Checks if the given line is a comment beginning with ‘#’ or ‘;’, or empty.
70 71 72 |
# File 'lib/acpc_poker_types/match_state.rb', line 70 def self.line_is_comment_or_empty?(line) line.nil? || line.match(/^\s*[#;]/) || line.empty? end |
Instance Method Details
#==(another_match_state) ⇒ Boolean
Returns true
if this match state string is equivalent to another_match_state
, false
otherwise.
110 111 112 |
# File 'lib/acpc_poker_types/match_state.rb', line 110 def ==(another_match_state) another_match_state.to_s == to_s end |
#betting_sequence_string(betting_sequence = @betting_sequence) ⇒ String
Returns The ACPC string created by the given betting sequence, betting_sequence
.
165 166 167 168 169 170 171 |
# File 'lib/acpc_poker_types/match_state.rb', line 165 def betting_sequence_string(betting_sequence=@betting_sequence) (round + 1).times.inject('') do |string, i| string += (betting_sequence[i].map { |action| action.to_acpc }).join('') string += '/' unless i == round string end end |
#first_state_of_first_round? ⇒ Boolean
Returns Reports whether or not it is the first state of the first round.
174 175 176 |
# File 'lib/acpc_poker_types/match_state.rb', line 174 def first_state_of_first_round? (0 == number_of_actions_this_hand) end |
#last_action(betting_sequence = @betting_sequence) ⇒ PokerAction
Returns The last action taken.
120 121 122 123 124 125 126 127 128 |
# File 'lib/acpc_poker_types/match_state.rb', line 120 def last_action(betting_sequence=@betting_sequence) if betting_sequence.nil? || betting_sequence.empty? nil elsif betting_sequence.last.last betting_sequence.last.last else last_action(betting_sequence.reject{ |elem| elem.equal?(betting_sequence.last) }) end end |
#list_of_opponents_hole_cards ⇒ Array
Returns The list of opponent hole cards that are visible.
140 141 142 143 144 |
# File 'lib/acpc_poker_types/match_state.rb', line 140 def list_of_opponents_hole_cards local_list_of_hole_card_hands = @list_of_hole_card_hands.dup local_list_of_hole_card_hands.delete_at @position_relative_to_dealer local_list_of_hole_card_hands end |
#number_of_actions_this_hand ⇒ Integer
Returns The number of actions in the current hand.
155 156 157 158 159 |
# File 'lib/acpc_poker_types/match_state.rb', line 155 def number_of_actions_this_hand @betting_sequence.inject(0) do |sum, sequence_per_round| sum += sequence_per_round.length end end |
#number_of_actions_this_round ⇒ Integer
Returns The number of actions in the current round.
152 |
# File 'lib/acpc_poker_types/match_state.rb', line 152 def number_of_actions_this_round() @betting_sequence[round].length end |
#number_of_players ⇒ Integer
Returns The number of players in this match.
115 |
# File 'lib/acpc_poker_types/match_state.rb', line 115 def number_of_players() @list_of_hole_card_hands.length end |
#player_position_relative_to_self ⇒ Object
178 179 180 |
# File 'lib/acpc_poker_types/match_state.rb', line 178 def player_position_relative_to_self number_of_players - 1 end |
#round ⇒ Integer
Returns The zero indexed current round number.
147 148 149 |
# File 'lib/acpc_poker_types/match_state.rb', line 147 def round @betting_sequence.length - 1 end |
#round_in_which_last_action_taken ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/acpc_poker_types/match_state.rb', line 182 def round_in_which_last_action_taken unless number_of_actions_this_hand > 0 nil else if number_of_actions_this_round < 1 round - 1 else round end end end |
#to_str ⇒ String Also known as: to_s
Returns The MatchState in raw text form.
96 97 98 99 100 101 102 103 |
# File 'lib/acpc_poker_types/match_state.rb', line 96 def to_str MatchState.build_match_state_string( @position_relative_to_dealer, @hand_number, betting_sequence_string, hole_card_strings, @board_cards ) end |
#users_hole_cards ⇒ Hand
Returns The user’s hole cards.
133 134 135 |
# File 'lib/acpc_poker_types/match_state.rb', line 133 def users_hole_cards @list_of_hole_card_hands[@position_relative_to_dealer] end |