just_go 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9e75ebd41948471c4f4ca768b14afa0151840af
4
- data.tar.gz: f199d796daf821fc9fa7d0a656dfbe687e87d466
3
+ metadata.gz: 3568fe557bc13eac0b6624be0f70c8868daf9f44
4
+ data.tar.gz: 0c1602d15cd4f2ded0a9f60f0ffd4d0dd47d3cd2
5
5
  SHA512:
6
- metadata.gz: 4c165f3cd84e3646dcc53988490b4af3ac1e6144181b8e343c04722975000e76271cc0b64c2d85dd17bbced347840f1fe3a2eab3a5d7f190270f835b45aa809c
7
- data.tar.gz: 5d07ae4529f1a95cd4e113fc5e9300bad9e14c2e81bcd6877e7ca6c14656bd4e115a2b6b8eaa85a0c5eb72ac29f1130d76fe48593d50ef062350b298b35eb4f9
6
+ metadata.gz: e88f9f93b01f2c9580609fc4ff3d56d4d1826af09c5ff0bd927cdd287fdabcb0adaed5f067a5f007fb22a52f13af57c911645096d6edef4ed8e81ce94d955755
7
+ data.tar.gz: f73808ab7000e09f88e862624654922d5fd61d4c32bef8e47f421169fd05c6a9e28a0c90711bb0eda550390107e4d61b5644acd62496d9ac6be1f2d97e2f5279
@@ -1,4 +1,5 @@
1
1
  require 'just_go/point_set'
2
+ require 'just_go/player_stat'
2
3
  require 'just_go/errors/not_players_turn_error'
3
4
  require 'just_go/errors/point_not_empty_error'
4
5
  require 'just_go/errors/point_not_found_error'
@@ -13,11 +14,11 @@ module JustGo
13
14
  class GameState
14
15
  BOARD_SIZE = 19
15
16
 
16
- def initialize(current_player_number: , points: , previous_state: nil, player_stats: nil)
17
+ def initialize(current_player_number: , points: , previous_state: nil, player_stats: [])
17
18
  @current_player_number = current_player_number
18
19
  @points = JustGo::PointSet.new(points: points)
19
20
  @previous_state = previous_state
20
- @player_stats = player_stats
21
+ @player_stats = player_stats.map { |ps| JustGo::PlayerStat.new(ps) }
21
22
  @errors = []
22
23
  @last_change = {}
23
24
  end
@@ -55,7 +56,7 @@ module JustGo
55
56
  current_player_number: current_player_number,
56
57
  points: points.as_json,
57
58
  previous_state: previous_state,
58
- player_stats: player_stats
59
+ player_stats: player_stats.map(&:as_json)
59
60
  }
60
61
  end
61
62
 
@@ -79,13 +80,13 @@ module JustGo
79
80
  if dupped.minify == @previous_state
80
81
  @errors.push JustGo::KoRuleViolationError.new
81
82
  else
82
- @player_stats.detect { |p| p[:player_number] == next_player_number }[:passed] = false
83
+ @player_stats.detect { |p| p.player_number == next_player_number }.mark_as_continuing
83
84
 
84
85
  @previous_state = points.minify
85
86
 
86
87
  stone_count = points.perform_move(point, player_number)
87
88
 
88
- @player_stats.detect { |pc| pc[:player_number] == player_number }[:prisoner_count] += stone_count
89
+ @player_stats.detect { |pc| pc.player_number == player_number }.add_to_prisoner_count(stone_count)
89
90
 
90
91
  pass_turn
91
92
  end
@@ -98,8 +99,8 @@ module JustGo
98
99
  if current_player_number != player_number
99
100
  @errors.push JustGo::NotPlayersTurnError.new
100
101
  else
101
- @player_stats.detect { |p| p[:player_number] == player_number }[:passed] = true
102
- next_player_passed = @player_stats.detect { |p| p[:player_number] == next_player_number }[:passed]
102
+ @player_stats.detect { |ps| ps.player_number == player_number }.mark_as_passed
103
+ next_player_passed = @player_stats.detect { |ps| ps.player_number == next_player_number }.passed
103
104
  if next_player_passed
104
105
  points.mark_territories
105
106
  else
@@ -118,7 +119,7 @@ module JustGo
118
119
  end
119
120
 
120
121
  def winner
121
- if @player_stats.map { |ps| ps[:passed] }.all?
122
+ if @player_stats.map { |ps| ps.passed }.all?
122
123
  score.max_by { |_player, score| score }.first
123
124
  else
124
125
  nil
@@ -132,7 +133,7 @@ module JustGo
132
133
  end
133
134
 
134
135
  def prisoner_count(player_number)
135
- player_stats.detect { |pc| pc[:player_number] == player_number }[:prisoner_count]
136
+ player_stats.detect { |ps| ps.player_number == player_number }.prisoner_count
136
137
  end
137
138
 
138
139
  def territory_count(player_number)
@@ -0,0 +1,36 @@
1
+ module JustGo
2
+ # = PlayerStat
3
+ #
4
+ # Place to store a players statistics
5
+ class PlayerStat
6
+ def initialize(player_number: , prisoner_count: 0, passed: false)
7
+ @player_number = player_number
8
+ @prisoner_count = prisoner_count
9
+ @passed = passed
10
+ end
11
+
12
+ attr_reader :player_number
13
+ attr_reader :prisoner_count
14
+ attr_reader :passed
15
+
16
+ def as_json
17
+ {
18
+ player_number: player_number,
19
+ prisoner_count: prisoner_count,
20
+ passed: passed
21
+ }
22
+ end
23
+
24
+ def mark_as_passed
25
+ @passed = true
26
+ end
27
+
28
+ def mark_as_continuing
29
+ @passed = false
30
+ end
31
+
32
+ def add_to_prisoner_count(number)
33
+ @prisoner_count += number
34
+ end
35
+ end
36
+ end
@@ -1,4 +1,4 @@
1
1
  module JustGo
2
2
  # :nodoc:
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: just_go
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Humphreys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-18 00:00:00.000000000 Z
11
+ date: 2019-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,6 +78,7 @@ files:
78
78
  - lib/just_go/errors/point_not_empty_error.rb
79
79
  - lib/just_go/errors/point_not_found_error.rb
80
80
  - lib/just_go/game_state.rb
81
+ - lib/just_go/player_stat.rb
81
82
  - lib/just_go/point.rb
82
83
  - lib/just_go/point_set.rb
83
84
  - lib/just_go/stone.rb