just_backgammon 0.1.2 → 0.2.0

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: c1ebb2844a2a6fef92a1ce1644cd4a16b984dbc0
4
- data.tar.gz: 29d1a815550ca78b52da80cf48c3b7ab135e92f8
3
+ metadata.gz: 58933064a92751418bd44c9a501b3aa4a3e790c6
4
+ data.tar.gz: 93e0594569139a5c978275a6be3f212ab45aab45
5
5
  SHA512:
6
- metadata.gz: 3d06f071fb46878e406ddfe2bb16707cba385282cfe730d99a8e935f21647bb86212fe14898d247bbf86cab26a6b1f203c5853f725931275db535b492d428721
7
- data.tar.gz: e518b7e4825bb4e88656b301de9740bfa6137701ed3ff675b93d9add0cbf618072ee452e76e3a1ed45a7caefc68ec523a073a73624c4728b64ce63f7d414655d
6
+ metadata.gz: 966ffc0ebe3a5e90887ee6228b792e04ee220a8a4059fd2ee603bb7c17ee3c7cda17329d00992613cae51b784ce7a6aad76802db39bbf37728af3a13a3034b08
7
+ data.tar.gz: f3dcef6231fef144bf81acf90bba38a816798cf5afdf994993a4174f319a8961b42e9f6830f90e74a4dbc4e155e2bdf8e9e29162da15cff9c94767923d0e7c62
data/README.md CHANGED
@@ -34,6 +34,12 @@ Moves can be made by passing in the player number, and an array of moves each co
34
34
  game_state.move(1, [{from: 1, to: 2}]])
35
35
  ```
36
36
 
37
+ The last change with all its details are found in the `last_change` attribute
38
+
39
+ ```ruby
40
+ game_state.last_change
41
+ ```
42
+
37
43
  If something happens errors may be found in the errors attribute
38
44
 
39
45
  ```ruby
@@ -83,7 +83,7 @@ module JustBackgammon
83
83
  # the specified player number.
84
84
  #
85
85
  # @return [Piece,NilClass]
86
- def pop_for_player(player_number)
86
+ def pop(player_number)
87
87
  p = pieces.find { |p| p.owner == player_number }
88
88
  pieces.delete(p)
89
89
  end
@@ -79,6 +79,7 @@ module JustBackgammon
79
79
  @points = JustBackgammon::PointSet.load(points: points)
80
80
  @off_board = JustBackgammon::OffBoard.load(off_board)
81
81
  @errors = []
82
+ @last_change = {}
82
83
  end
83
84
 
84
85
  # Instantiates a new GameState object in the starting position
@@ -147,6 +148,9 @@ module JustBackgammon
147
148
  # @return [Array<Error>] errors if any.
148
149
  attr_reader :errors
149
150
 
151
+ # @return [Hash] the last change made.
152
+ attr_reader :last_change
153
+
150
154
  # Rolls the dice
151
155
  #
152
156
  # Two dice are rolled and returns true on success.
@@ -172,6 +176,7 @@ module JustBackgammon
172
176
  else
173
177
  @dice.roll
174
178
  step
179
+ @last_change = { type: 'roll', data: { player_number: player_number, dice: @dice.as_json } }
175
180
  end
176
181
 
177
182
  @errors.none?
@@ -204,6 +209,7 @@ module JustBackgammon
204
209
  elsif move_valid?(move_list)
205
210
  perform_move(move_list)
206
211
  step
212
+ @last_change = { type: 'move', data: { player_number: player_number, list: list }}
207
213
  end
208
214
 
209
215
  @errors.none?
@@ -261,18 +267,12 @@ module JustBackgammon
261
267
 
262
268
  def perform_move(list) # :nodoc:
263
269
  list.each do |move|
264
- from = find_point(move.from.number)
265
- to = find_point(move.to.number)
266
-
267
- if to.is_a?(JustBackgammon::Point) && to.owned_by_opponent?(current_player_number) && to.blot?
268
- @bar.push(to.pop)
269
- end
270
-
271
- popped = if from.is_a?(JustBackgammon::Bar)
272
- from.pop_for_player(current_player_number)
273
- else
274
- from.pop
275
- end
270
+ from = move.from
271
+ to = move.to
272
+
273
+ @bar.push(to.pop) if to.hittable?(current_player_number)
274
+
275
+ popped = from.pop(current_player_number)
276
276
 
277
277
  to.push(popped)
278
278
  end
@@ -63,6 +63,10 @@ module JustBackgammon
63
63
  @pieces.push(piece)
64
64
  end
65
65
 
66
+ def hittable?(_=nil)
67
+ false
68
+ end
69
+
66
70
  # A hashed serialized representation of off board.
67
71
  #
68
72
  # @return [Hash]
@@ -42,7 +42,7 @@ module JustBackgammon
42
42
  # Removes a piece and returns it.
43
43
  #
44
44
  # @return [Piece,NilClass]
45
- def pop
45
+ def pop(_=nil)
46
46
  @pieces.pop
47
47
  end
48
48
 
@@ -95,6 +95,10 @@ module JustBackgammon
95
95
  end
96
96
  end
97
97
 
98
+ def hittable?(player_number)
99
+ owned_by_opponent?(player_number) && blot?
100
+ end
101
+
98
102
  # A hashed serialized representation of the bar.
99
103
  #
100
104
  # @return [Hash]
@@ -1,4 +1,4 @@
1
1
  module JustBackgammon
2
2
  # :nodoc:
3
- VERSION = "0.1.2"
3
+ VERSION = "0.2.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: just_backgammon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Humphreys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-22 00:00:00.000000000 Z
11
+ date: 2016-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler