acpc_poker_types 7.2.1 → 7.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e7db77dcac1bb6a8abf691890b233c4989f3a3e
4
- data.tar.gz: 7c5962907fc4347379e80c716207efb468db404c
3
+ metadata.gz: d88ee4899d3a352a88bc92a6add13b04bcff7c4e
4
+ data.tar.gz: 03d3de874c31a5c45e6d53bcd025d889d061ace9
5
5
  SHA512:
6
- metadata.gz: cbf955f892695ed3ef36e87b61cb374e01869429decd6b0c78611269f21c5a6a12e668ef91542460a185668edea981ad81da7b8c86bf77add96f77322ebba389
7
- data.tar.gz: d284cf1b711a6ea1d4100a9903cf949a6f62a85b9121d701b0d43935dbe3a187b336636ff060fd10b44d60bfcaa02999037d98e10d1fe8802a7faa59636933a4
6
+ metadata.gz: 309d18632e6b28b1d850dac0e88809c98bc8c1c1d004a97bd091026c1ec4830759ff7b72b545a425e9b8478273cbb86cfd258852c885ee910b6a19bc057ca6b8
7
+ data.tar.gz: 7a33b1e92659f5b660670c267f6ad5250d752af4da132a5c2231bef6938aa2eb6c010cb4aac06bfa25346c2e58be0ab31b1823dfb325d4949b87c848e0805712
@@ -97,6 +97,14 @@ module AcpcPokerTypes
97
97
  :@number_of_board_cards => 'numBoardCards'
98
98
  }
99
99
 
100
+ ALL_PLAYER_ALL_ROUND_DEFS = [
101
+ DEFINITIONS[:@number_of_players],
102
+ DEFINITIONS[:@number_of_rounds],
103
+ DEFINITIONS[:@number_of_suits],
104
+ DEFINITIONS[:@number_of_ranks],
105
+ DEFINITIONS[:@number_of_hole_cards]
106
+ ]
107
+
100
108
  def self.default_first_player_positions(number_of_rounds)
101
109
  number_of_rounds.to_i.times.inject([]) do |list, i|
102
110
  list << 0
@@ -118,12 +126,6 @@ module AcpcPokerTypes
118
126
  end
119
127
  end
120
128
 
121
- # @param [Array] array The array to flatten into a single element.
122
- # @return +array+ if +array+ has more than one element, the single element in +array+ otherwise.
123
- def self.flatten_if_single_element_array(array)
124
- if 1 == array.length then array[0] else array end
125
- end
126
-
127
129
  # Checks if the given line is a comment beginning with '#' or ';', or empty.
128
130
  #
129
131
  # @param [String] line
@@ -132,7 +134,7 @@ module AcpcPokerTypes
132
134
  line.nil? || line.match(/^\s*[#;]/) || line.empty?
133
135
  end
134
136
 
135
- # Checks a given line from a game definition file for a game
137
+ # Checks a given line frcom a game definition file for a game
136
138
  # definition name and returns the given default value unless there is a match.
137
139
  #
138
140
  # @param [String, #match] line A line from a game definition file.
@@ -142,11 +144,12 @@ module AcpcPokerTypes
142
144
  # referred to by +definition_name+, +nil+ otherwise.
143
145
  def self.check_game_def_line_for_definition(line, definition_name)
144
146
  if line.match(/^\s*#{definition_name}\s*=\s*([\d\s]+)/i)
145
- values = $1.chomp.split(/\s+/)
146
- (0..values.length-1).each do |i|
147
- values[i] = values[i].to_i
147
+ value = $1.chomp.split(/\s+/).map{ |elem| elem.to_i }
148
+ if ALL_PLAYER_ALL_ROUND_DEFS.include? definition_name
149
+ value.shift
150
+ else
151
+ value
148
152
  end
149
- flatten_if_single_element_array values
150
153
  end
151
154
  end
152
155
 
@@ -143,8 +143,16 @@ class MatchState < DelegateClass(String)
143
143
  end.call
144
144
  end
145
145
 
146
+ # @param game_def [GameDefinition] A game definition by which the actions can be interpreted
147
+ # and made more precise (bets marked by 'r' are converted into 'b' and checks marked by 'c'
148
+ # are converted to 'k').
146
149
  # @return [Array<Array<PokerAction>>] The sequence of betting actions.
147
- def betting_sequence
150
+ def betting_sequence(game_def=nil)
151
+ if game_def
152
+ every_action(game_def) unless @precise_betting_sequence
153
+ return @precise_betting_sequence
154
+ end
155
+
148
156
  @betting_sequence ||= if @betting_sequence_string.empty?
149
157
  [[]]
150
158
  else
@@ -270,6 +278,7 @@ class MatchState < DelegateClass(String)
270
278
 
271
279
  @next_to_act = game_def.first_player_positions.first
272
280
  @player_acting_sequence = []
281
+ @precise_betting_sequence = []
273
282
  @min_wager_by = game_def.min_wagers.first
274
283
 
275
284
  walk_over_betting_sequence!(game_def)
@@ -344,6 +353,7 @@ class MatchState < DelegateClass(String)
344
353
  game_def.first_player_positions[current_round]
345
354
  )
346
355
  @player_acting_sequence << []
356
+ @precise_betting_sequence << []
347
357
  last_round = current_round
348
358
 
349
359
  walk_over_actions!(actions_per_round, game_def, last_round, current_round)
@@ -365,7 +375,7 @@ class MatchState < DelegateClass(String)
365
375
  game_def.min_wagers[current_round]
366
376
  )
367
377
 
368
- action = PokerAction.new(
378
+ @precise_betting_sequence.last << PokerAction.new(
369
379
  action.to_s(
370
380
  pot_gained_chips: @players.inject(0) { |sum, player| sum += player.contributions[current_round].to_i } > 0,
371
381
  player_sees_wager: @players.amount_to_call(acting_player_position) > 0
@@ -373,11 +383,11 @@ class MatchState < DelegateClass(String)
373
383
  cost: cost
374
384
  )
375
385
 
376
- adjust_min_wager!(action, acting_player_position)
386
+ adjust_min_wager!(@precise_betting_sequence.last.last, acting_player_position)
377
387
 
378
- @players[acting_player_position].append_action!(action, current_round)
388
+ @players[acting_player_position].append_action!(@precise_betting_sequence.last.last, current_round)
379
389
 
380
- yield action, current_round, acting_player_position if block_given?
390
+ yield @precise_betting_sequence.last.last, current_round, acting_player_position if block_given?
381
391
  end
382
392
 
383
393
  self
@@ -1,3 +1,3 @@
1
1
  module AcpcPokerTypes
2
- VERSION = '7.2.1'
2
+ VERSION = '7.2.2'
3
3
  end
@@ -295,6 +295,42 @@ describe MatchState do
295
295
  )
296
296
  end
297
297
  end
298
+ it 'works with a game definition and provides more a precise result' do
299
+ MatchState.parse(
300
+ "#{MatchState::LABEL}:0:0:ccr20cc/r50fr100c/cc/cc:AhKs||"
301
+ ).betting_sequence(
302
+ GameDefinition.new(
303
+ first_player_positions: [3, 2, 2, 2],
304
+ chip_stacks: [200, 200, 200],
305
+ blinds: [10, 0, 5],
306
+ raise_sizes: [10]*4,
307
+ number_of_ranks: 3
308
+ )
309
+ ).must_equal [
310
+ [
311
+ PokerAction.new(PokerAction::CALL),
312
+ PokerAction.new(PokerAction::CHECK),
313
+ PokerAction.new("#{PokerAction::RAISE}20"),
314
+ PokerAction.new(PokerAction::CALL),
315
+ PokerAction.new(PokerAction::CALL)
316
+ ],
317
+ [
318
+ PokerAction.new("#{PokerAction::BET}50"),
319
+ PokerAction.new(PokerAction::FOLD),
320
+ PokerAction.new("#{PokerAction::RAISE}100"),
321
+ PokerAction.new(PokerAction::CALL)
322
+
323
+ ],
324
+ [
325
+ PokerAction.new(PokerAction::CHECK),
326
+ PokerAction.new(PokerAction::CHECK)
327
+ ],
328
+ [
329
+ PokerAction.new(PokerAction::CHECK),
330
+ PokerAction.new(PokerAction::CHECK)
331
+ ]
332
+ ]
333
+ end
298
334
  end
299
335
  describe '#players_at_hand_start' do
300
336
  it 'returns HandPlayers with states set at the beginning of the hand' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acpc_poker_types
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.1
4
+ version: 7.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Morrill
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-09 00:00:00.000000000 Z
11
+ date: 2013-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: process_runner