Class: AcpcPokerTypes::MatchState
- Inherits:
-
Object
- Object
- AcpcPokerTypes::MatchState
- Defined in:
- lib/acpc_poker_types/match_state.rb
Constant Summary collapse
- LABEL =
Returns Label for match state strings.
'MATCHSTATE'
Instance Attribute Summary collapse
-
#betting_sequence ⇒ Array<Array<AcpcPokerTypes::PokerAction>>
readonly
The sequence of betting actions.
-
#board_cards ⇒ AcpcPokerTypes::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<AcpcPokerTypes::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) ⇒ AcpcPokerTypes::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 AcpcPokerTypes::MatchState in raw text form.
-
#users_hole_cards ⇒ AcpcPokerTypes::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 |
# File 'lib/acpc_poker_types/match_state.rb', line 76 def initialize(raw_match_state) raise IncompleteMatchState, raw_match_state if AcpcPokerTypes::MatchState.line_is_comment_or_empty? raw_match_state if raw_match_state.match( /#{LABEL}:(\d+):(\d+):([\d#{AcpcPokerTypes::PokerAction::CONCATONATED_ACTIONS}\/]*):([|#{AcpcPokerTypes::Card::CONCATONATED_CARDS}]+)\/*([\/#{AcpcPokerTypes::Card::CONCATONATED_CARDS}]*)/) @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<AcpcPokerTypes::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 ⇒ AcpcPokerTypes::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<AcpcPokerTypes::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.
106 107 108 |
# File 'lib/acpc_poker_types/match_state.rb', line 106 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
.
161 162 163 164 165 166 167 |
# File 'lib/acpc_poker_types/match_state.rb', line 161 def betting_sequence_string(betting_sequence=@betting_sequence) (round + 1).times.inject('') do |string, i| string += (betting_sequence[i].map { |action| action.to_s }).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.
170 171 172 |
# File 'lib/acpc_poker_types/match_state.rb', line 170 def first_state_of_first_round? (0 == number_of_actions_this_hand) end |
#last_action(betting_sequence = @betting_sequence) ⇒ AcpcPokerTypes::PokerAction
Returns The last action taken.
116 117 118 119 120 121 122 123 124 |
# File 'lib/acpc_poker_types/match_state.rb', line 116 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.
136 137 138 139 140 |
# File 'lib/acpc_poker_types/match_state.rb', line 136 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.
151 152 153 154 155 |
# File 'lib/acpc_poker_types/match_state.rb', line 151 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.
148 |
# File 'lib/acpc_poker_types/match_state.rb', line 148 def number_of_actions_this_round() @betting_sequence[round].length end |
#number_of_players ⇒ Integer
Returns The number of players in this match.
111 |
# File 'lib/acpc_poker_types/match_state.rb', line 111 def number_of_players() @list_of_hole_card_hands.length end |
#player_position_relative_to_self ⇒ Object
174 175 176 |
# File 'lib/acpc_poker_types/match_state.rb', line 174 def player_position_relative_to_self number_of_players - 1 end |
#round ⇒ Integer
Returns The zero indexed current round number.
143 144 145 |
# File 'lib/acpc_poker_types/match_state.rb', line 143 def round @betting_sequence.length - 1 end |
#round_in_which_last_action_taken ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/acpc_poker_types/match_state.rb', line 178 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 AcpcPokerTypes::MatchState in raw text form.
92 93 94 95 96 97 98 99 |
# File 'lib/acpc_poker_types/match_state.rb', line 92 def to_str AcpcPokerTypes::MatchState.build_match_state_string( @position_relative_to_dealer, @hand_number, betting_sequence_string, hole_card_strings, @board_cards ) end |
#users_hole_cards ⇒ AcpcPokerTypes::Hand
Returns The user’s hole cards.
129 130 131 |
# File 'lib/acpc_poker_types/match_state.rb', line 129 def users_hole_cards @list_of_hole_card_hands[@position_relative_to_dealer] end |