software_challenge_client 20.2.4 → 21.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.ruby-version +1 -1
  4. data/.vscode/launch.json +41 -0
  5. data/.vscode/settings.json +10 -0
  6. data/Dockerfile +1 -1
  7. data/Gemfile +1 -0
  8. data/Guardfile +1 -0
  9. data/README.md +4 -3
  10. data/RELEASES.md +20 -0
  11. data/Rakefile +4 -3
  12. data/example/client.rb +6 -9
  13. data/example/main.rb +9 -9
  14. data/lib/software_challenge_client.rb +26 -23
  15. data/lib/software_challenge_client/board.rb +94 -37
  16. data/lib/software_challenge_client/client_interface.rb +1 -0
  17. data/lib/software_challenge_client/color.rb +16 -0
  18. data/lib/software_challenge_client/condition.rb +2 -0
  19. data/lib/software_challenge_client/coordinate_set.rb +92 -0
  20. data/lib/software_challenge_client/coordinates.rb +45 -0
  21. data/lib/software_challenge_client/debug_hint.rb +1 -0
  22. data/lib/software_challenge_client/field.rb +21 -56
  23. data/lib/software_challenge_client/game_rule_logic.rb +258 -335
  24. data/lib/software_challenge_client/game_state.rb +106 -68
  25. data/lib/software_challenge_client/has_hints.rb +1 -1
  26. data/lib/software_challenge_client/invalid_move_exception.rb +1 -0
  27. data/lib/software_challenge_client/logging.rb +1 -0
  28. data/lib/software_challenge_client/network.rb +1 -1
  29. data/lib/software_challenge_client/piece.rb +71 -13
  30. data/lib/software_challenge_client/piece_shape.rb +109 -0
  31. data/lib/software_challenge_client/player.rb +7 -6
  32. data/lib/software_challenge_client/player_type.rb +14 -0
  33. data/lib/software_challenge_client/protocol.rb +81 -74
  34. data/lib/software_challenge_client/rotation.rb +22 -0
  35. data/lib/software_challenge_client/runner.rb +2 -1
  36. data/lib/software_challenge_client/set_move.rb +13 -4
  37. data/lib/software_challenge_client/skip_move.rb +5 -0
  38. data/lib/software_challenge_client/util/constants.rb +3 -4
  39. data/lib/software_challenge_client/version.rb +2 -1
  40. data/lib/update_client_module.sh +15 -0
  41. data/software_challenge_client.gemspec +15 -13
  42. metadata +54 -36
  43. data/lib/software_challenge_client/cube_coordinates.rb +0 -25
  44. data/lib/software_challenge_client/direction.rb +0 -55
  45. data/lib/software_challenge_client/drag_move.rb +0 -22
  46. data/lib/software_challenge_client/line_direction.rb +0 -15
  47. data/lib/software_challenge_client/piece_type.rb +0 -18
  48. data/lib/software_challenge_client/player_color.rb +0 -25
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: software_challenge_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 20.2.4
4
+ version: 21.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 'kwollw '
8
8
  - 'Ralf-Tobias Diekert '
9
9
  - 'Sven Koschnicke '
10
- autorequire:
10
+ autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2020-01-15 00:00:00.000000000 Z
13
+ date: 2020-12-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: typesafe_enum
16
+ name: builder
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
@@ -27,7 +27,7 @@ dependencies:
27
27
  - !ruby/object:Gem::Version
28
28
  version: '0'
29
29
  - !ruby/object:Gem::Dependency
30
- name: builder
30
+ name: typesafe_enum
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - ">="
@@ -55,35 +55,35 @@ dependencies:
55
55
  - !ruby/object:Gem::Version
56
56
  version: '1.10'
57
57
  - !ruby/object:Gem::Dependency
58
- name: rake
58
+ name: fuubar
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: '10.0'
63
+ version: '0'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
- version: '10.0'
70
+ version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
- name: yard
72
+ name: guard
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
- version: '0.8'
77
+ version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
- version: '0.8'
84
+ version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
- name: rspec
86
+ name: guard-rspec
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - ">="
@@ -97,7 +97,7 @@ dependencies:
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
- name: fuubar
100
+ name: guard-rubocop
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - ">="
@@ -111,7 +111,7 @@ dependencies:
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  - !ruby/object:Gem::Dependency
114
- name: rubocop
114
+ name: pry
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - ">="
@@ -125,7 +125,7 @@ dependencies:
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  - !ruby/object:Gem::Dependency
128
- name: rubocop-rspec
128
+ name: pry-byebug
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
131
  - - ">="
@@ -139,7 +139,7 @@ dependencies:
139
139
  - !ruby/object:Gem::Version
140
140
  version: '0'
141
141
  - !ruby/object:Gem::Dependency
142
- name: guard
142
+ name: pry-coolline
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
145
  - - ">="
@@ -153,7 +153,7 @@ dependencies:
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  - !ruby/object:Gem::Dependency
156
- name: guard-rspec
156
+ name: pry-rescue
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
159
  - - ">="
@@ -167,21 +167,21 @@ dependencies:
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  - !ruby/object:Gem::Dependency
170
- name: guard-rubocop
170
+ name: rake
171
171
  requirement: !ruby/object:Gem::Requirement
172
172
  requirements:
173
173
  - - ">="
174
174
  - !ruby/object:Gem::Version
175
- version: '0'
175
+ version: '10.0'
176
176
  type: :development
177
177
  prerelease: false
178
178
  version_requirements: !ruby/object:Gem::Requirement
179
179
  requirements:
180
180
  - - ">="
181
181
  - !ruby/object:Gem::Version
182
- version: '0'
182
+ version: '10.0'
183
183
  - !ruby/object:Gem::Dependency
184
- name: pry
184
+ name: rspec
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
187
  - - ">="
@@ -195,7 +195,7 @@ dependencies:
195
195
  - !ruby/object:Gem::Version
196
196
  version: '0'
197
197
  - !ruby/object:Gem::Dependency
198
- name: pry-rescue
198
+ name: rubocop
199
199
  requirement: !ruby/object:Gem::Requirement
200
200
  requirements:
201
201
  - - ">="
@@ -209,7 +209,7 @@ dependencies:
209
209
  - !ruby/object:Gem::Version
210
210
  version: '0'
211
211
  - !ruby/object:Gem::Dependency
212
- name: pry-coolline
212
+ name: rubocop-rspec
213
213
  requirement: !ruby/object:Gem::Requirement
214
214
  requirements:
215
215
  - - ">="
@@ -223,7 +223,7 @@ dependencies:
223
223
  - !ruby/object:Gem::Version
224
224
  version: '0'
225
225
  - !ruby/object:Gem::Dependency
226
- name: pry-byebug
226
+ name: solargraph
227
227
  requirement: !ruby/object:Gem::Requirement
228
228
  requirements:
229
229
  - - ">="
@@ -236,6 +236,20 @@ dependencies:
236
236
  - - ">="
237
237
  - !ruby/object:Gem::Version
238
238
  version: '0'
239
+ - !ruby/object:Gem::Dependency
240
+ name: yard
241
+ requirement: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: '0.8'
246
+ type: :development
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - ">="
251
+ - !ruby/object:Gem::Version
252
+ version: '0.8'
239
253
  description: ''
240
254
  email:
241
255
  - kwollw@users.noreply.github.com
@@ -250,6 +264,8 @@ files:
250
264
  - ".rubocop.yml"
251
265
  - ".ruby-version"
252
266
  - ".stickler.yml"
267
+ - ".vscode/launch.json"
268
+ - ".vscode/settings.json"
253
269
  - AUTHORS
254
270
  - CODE_OF_CONDUCT.md
255
271
  - Dockerfile
@@ -268,35 +284,36 @@ files:
268
284
  - lib/software_challenge_client.rb
269
285
  - lib/software_challenge_client/board.rb
270
286
  - lib/software_challenge_client/client_interface.rb
287
+ - lib/software_challenge_client/color.rb
271
288
  - lib/software_challenge_client/condition.rb
272
- - lib/software_challenge_client/cube_coordinates.rb
289
+ - lib/software_challenge_client/coordinate_set.rb
290
+ - lib/software_challenge_client/coordinates.rb
273
291
  - lib/software_challenge_client/debug_hint.rb
274
- - lib/software_challenge_client/direction.rb
275
- - lib/software_challenge_client/drag_move.rb
276
292
  - lib/software_challenge_client/field.rb
277
293
  - lib/software_challenge_client/game_rule_logic.rb
278
294
  - lib/software_challenge_client/game_state.rb
279
295
  - lib/software_challenge_client/has_hints.rb
280
296
  - lib/software_challenge_client/invalid_move_exception.rb
281
- - lib/software_challenge_client/line_direction.rb
282
297
  - lib/software_challenge_client/logging.rb
283
298
  - lib/software_challenge_client/network.rb
284
299
  - lib/software_challenge_client/piece.rb
285
- - lib/software_challenge_client/piece_type.rb
300
+ - lib/software_challenge_client/piece_shape.rb
286
301
  - lib/software_challenge_client/player.rb
287
- - lib/software_challenge_client/player_color.rb
302
+ - lib/software_challenge_client/player_type.rb
288
303
  - lib/software_challenge_client/protocol.rb
304
+ - lib/software_challenge_client/rotation.rb
289
305
  - lib/software_challenge_client/runner.rb
290
306
  - lib/software_challenge_client/set_move.rb
291
307
  - lib/software_challenge_client/skip_move.rb
292
308
  - lib/software_challenge_client/util/constants.rb
293
309
  - lib/software_challenge_client/version.rb
310
+ - lib/update_client_module.sh
294
311
  - release.sh
295
312
  - software_challenge_client.gemspec
296
313
  homepage: http://www.software-challenge.de
297
314
  licenses: []
298
315
  metadata: {}
299
- post_install_message:
316
+ post_install_message:
300
317
  rdoc_options: []
301
318
  require_paths:
302
319
  - lib
@@ -304,16 +321,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
304
321
  requirements:
305
322
  - - ">="
306
323
  - !ruby/object:Gem::Version
307
- version: '2.3'
324
+ version: 2.5.5
308
325
  required_rubygems_version: !ruby/object:Gem::Requirement
309
326
  requirements:
310
327
  - - ">="
311
328
  - !ruby/object:Gem::Version
312
329
  version: '0'
313
330
  requirements: []
314
- rubygems_version: 3.0.3
315
- signing_key:
331
+ rubyforge_project:
332
+ rubygems_version: 2.7.6.2
333
+ signing_key:
316
334
  specification_version: 4
317
- summary: This gem provides functions to build a client for the coding competition
318
- Software-Challenge 2017.
335
+ summary: Provides functions to build a client for the coding competition Software-Challenge
336
+ Germany.
319
337
  test_files: []
@@ -1,25 +0,0 @@
1
- # CubeCoordinates erleichtern viele Berechnungen auf einem hexagonalen Spielfeld. Siehe
2
- # https://www.redblobgames.com/grids/hexagons/#coordinates-cube
3
- class CubeCoordinates
4
-
5
- attr_reader :x, :y, :z
6
-
7
- def initialize(x, y, z = nil)
8
- @x = x
9
- @y = y
10
- @z = z.nil? ? -x - y : z
11
- throw InvalidArgumentException("sum of coordinates #{@x}, #{@y}, #{@z} have to be equal 0") if @x + @y + @z != 0
12
- end
13
-
14
- def ==(other)
15
- x == other.x && y == other.y && z == other.z
16
- end
17
-
18
- def to_s
19
- "(#{x}, #{y}, #{z})"
20
- end
21
-
22
- def inspect
23
- to_s
24
- end
25
- end
@@ -1,55 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'typesafe_enum'
4
-
5
- # Die sechs möglichen Bewegungsrichtungen auf dem Spielbrett. Die Richtungen sind:
6
- #
7
- # - UP_RIGHT
8
- # - RIGHT
9
- # - DOWN_RIGHT
10
- # - DOWN_LEFT
11
- # - LEFT
12
- # - UP_LEFT
13
- #
14
- # Zugriff erfolgt z.B. durch Direction::UP_RIGHT.
15
- class Direction < TypesafeEnum::Base
16
- new :UP_RIGHT
17
- new :RIGHT
18
- new :DOWN_RIGHT
19
- new :DOWN_LEFT
20
- new :LEFT
21
- new :UP_LEFT
22
-
23
- # Verschiebt den durch das Koordinatenpaar angegebenen Punkt in die
24
- # entsprechende Richtung. Der resultierende Punkt kann ausserhalb des
25
- # Spielbrettes liegen. Dies kann mit {GameRuleLogic.is_on_board} geprüft
26
- # werden.
27
- # @param start [CubeCoordinates] Das zu verschiebende Koordinatenpaar.
28
- # @param distance [Integer] Um wieviele Felder in die Richtung verschoben werden soll.
29
- def translate(start, distance = 1)
30
- shiftX = start.x
31
- shiftY = start.y
32
- shiftZ = start.z
33
- case self.key
34
- when :RIGHT
35
- shiftX = start.x + distance
36
- shiftY = start.y - distance
37
- when :LEFT
38
- shiftX = start.x - distance
39
- shiftY = start.y + distance
40
- when :UP_RIGHT
41
- shiftX = start.x + distance
42
- shiftZ = start.z - distance
43
- when :UP_LEFT
44
- shiftY = start.y + distance
45
- shiftZ = start.z - distance
46
- when :DOWN_RIGHT
47
- shiftY = start.y - distance
48
- shiftZ = start.z + distance
49
- when :DOWN_LEFT
50
- shiftX = start.x - distance
51
- shiftZ = start.z + distance
52
- end
53
- return CubeCoordinates.new(shiftX, shiftY, shiftZ)
54
- end
55
- end
@@ -1,22 +0,0 @@
1
- require_relative 'has_hints'
2
-
3
- # Ein Zug, der einen auf dem Spielbrett befindlichen Spielstein bewegt.
4
- class DragMove
5
-
6
- include HasHints
7
-
8
- attr_reader :start
9
- attr_reader :destination
10
-
11
- # @param start [CubeCoordinates]
12
- # @param destination [CubeCoordinates]
13
- def initialize(start, destination)
14
- @start = start
15
- @destination = destination
16
- @hints = []
17
- end
18
-
19
- def to_s
20
- "[Move: Drag from #{start} to #{destination}]"
21
- end
22
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'typesafe_enum'
4
- # Ausrichtung einer Linie auf dem Spielbrett. Mögliche Werte sind:
5
- # - HORIZONTAL
6
- # - VERTICAL
7
- # - RISING_DIAGONAL
8
- # - FALLING_DIAGONAL
9
-
10
- class LineDirection < TypesafeEnum::Base
11
- new :HORIZONTAL
12
- new :VERTICAL
13
- new :RISING_DIAGONAL
14
- new :FALLING_DIAGONAL
15
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'typesafe_enum'
4
- # Der Typ eines Spielsteins. Es gibt folgende Typen:
5
- # - BEE
6
- # - BEETLE
7
- # - GRASSHOPPER
8
- # - SPIDER
9
- # - ANT
10
- #
11
- # Zugriff z.B. mit PieceType::BEE
12
- class PieceType < TypesafeEnum::Base
13
- new :BEE, 'Q'
14
- new :BEETLE, 'B'
15
- new :GRASSHOPPER, 'G'
16
- new :SPIDER, 'S'
17
- new :ANT, 'A'
18
- end
@@ -1,25 +0,0 @@
1
- # encoding: utf-8
2
- # player color constants
3
- require 'typesafe_enum'
4
-
5
- # Die Spielerfarben. RED oder BLUE
6
- class PlayerColor < TypesafeEnum::Base
7
- new :RED, 'R'
8
- new :BLUE, 'B'
9
-
10
- # @param color [PlayerColor]
11
- # @return [PlayerColor] Farbe des Gegenspielers
12
- def self.opponent_color(color)
13
- case color
14
- when PlayerColor::RED
15
- PlayerColor::BLUE
16
- when PlayerColor::BLUE
17
- PlayerColor::RED
18
- end
19
- end
20
-
21
- def opponent
22
- PlayerColor.opponent_color(self)
23
- end
24
-
25
- end