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 +4 -4
- data/lib/just_go/game_state.rb +10 -9
- data/lib/just_go/player_stat.rb +36 -0
- data/lib/just_go/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3568fe557bc13eac0b6624be0f70c8868daf9f44
|
4
|
+
data.tar.gz: 0c1602d15cd4f2ded0a9f60f0ffd4d0dd47d3cd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e88f9f93b01f2c9580609fc4ff3d56d4d1826af09c5ff0bd927cdd287fdabcb0adaed5f067a5f007fb22a52f13af57c911645096d6edef4ed8e81ce94d955755
|
7
|
+
data.tar.gz: f73808ab7000e09f88e862624654922d5fd61d4c32bef8e47f421169fd05c6a9e28a0c90711bb0eda550390107e4d61b5644acd62496d9ac6be1f2d97e2f5279
|
data/lib/just_go/game_state.rb
CHANGED
@@ -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:
|
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
|
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
|
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 { |
|
102
|
-
next_player_passed = @player_stats.detect { |
|
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
|
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 { |
|
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
|
data/lib/just_go/version.rb
CHANGED
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.
|
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-
|
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
|