software_challenge_client 20.2.2 → 21.0.2
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/.rubocop.yml +1 -0
- data/.ruby-version +1 -1
- data/.vscode/launch.json +41 -0
- data/.vscode/settings.json +10 -0
- data/Dockerfile +1 -1
- data/Gemfile +1 -0
- data/Guardfile +1 -0
- data/README.md +4 -3
- data/RELEASES.md +20 -0
- data/Rakefile +4 -4
- data/example/client.rb +6 -9
- data/example/main.rb +9 -9
- data/lib/software_challenge_client.rb +26 -23
- data/lib/software_challenge_client/board.rb +99 -34
- data/lib/software_challenge_client/client_interface.rb +1 -0
- data/lib/software_challenge_client/color.rb +16 -0
- data/lib/software_challenge_client/condition.rb +4 -1
- data/lib/software_challenge_client/coordinate_set.rb +92 -0
- data/lib/software_challenge_client/coordinates.rb +45 -0
- data/lib/software_challenge_client/debug_hint.rb +1 -0
- data/lib/software_challenge_client/field.rb +21 -53
- data/lib/software_challenge_client/game_rule_logic.rb +257 -332
- data/lib/software_challenge_client/game_state.rb +86 -68
- data/lib/software_challenge_client/has_hints.rb +1 -1
- data/lib/software_challenge_client/invalid_move_exception.rb +1 -0
- data/lib/software_challenge_client/logging.rb +1 -0
- data/lib/software_challenge_client/network.rb +1 -1
- data/lib/software_challenge_client/piece.rb +43 -14
- data/lib/software_challenge_client/piece_shape.rb +109 -0
- data/lib/software_challenge_client/player.rb +7 -6
- data/lib/software_challenge_client/player_type.rb +14 -0
- data/lib/software_challenge_client/protocol.rb +83 -75
- data/lib/software_challenge_client/rotation.rb +22 -0
- data/lib/software_challenge_client/runner.rb +2 -1
- data/lib/software_challenge_client/set_move.rb +13 -4
- data/lib/software_challenge_client/skip_move.rb +5 -0
- data/lib/software_challenge_client/util/constants.rb +3 -4
- data/lib/software_challenge_client/version.rb +2 -1
- data/lib/update_client_module.sh +15 -0
- data/software_challenge_client.gemspec +15 -13
- metadata +54 -36
- data/lib/software_challenge_client/cube_coordinates.rb +0 -23
- data/lib/software_challenge_client/direction.rb +0 -55
- data/lib/software_challenge_client/drag_move.rb +0 -19
- data/lib/software_challenge_client/line_direction.rb +0 -15
- data/lib/software_challenge_client/piece_type.rb +0 -18
- 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:
|
4
|
+
version: 21.0.2
|
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:
|
13
|
+
date: 2020-11-27 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
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:
|
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:
|
58
|
+
name: fuubar
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
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: '
|
70
|
+
version: '0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: guard
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0
|
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
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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/
|
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/
|
300
|
+
- lib/software_challenge_client/piece_shape.rb
|
286
301
|
- lib/software_challenge_client/player.rb
|
287
|
-
- lib/software_challenge_client/
|
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:
|
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
|
-
|
315
|
-
|
331
|
+
rubyforge_project:
|
332
|
+
rubygems_version: 2.7.6.2
|
333
|
+
signing_key:
|
316
334
|
specification_version: 4
|
317
|
-
summary:
|
318
|
-
|
335
|
+
summary: Provides functions to build a client for the coding competition Software-Challenge
|
336
|
+
Germany.
|
319
337
|
test_files: []
|
@@ -1,23 +0,0 @@
|
|
1
|
-
class CubeCoordinates
|
2
|
-
|
3
|
-
attr_reader :x, :y, :z
|
4
|
-
|
5
|
-
def initialize(x, y, z = nil)
|
6
|
-
@x = x
|
7
|
-
@y = y
|
8
|
-
@z = z.nil? ? -x - y : z
|
9
|
-
throw InvalidArgumentException("sum of coordinates #{@x}, #{@y}, #{@z} have to be equal 0") if @x + @y + @z != 0
|
10
|
-
end
|
11
|
-
|
12
|
-
def ==(other)
|
13
|
-
x == other.x && y == other.y && z == other.z
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
"(#{x}, #{y}, #{z})"
|
18
|
-
end
|
19
|
-
|
20
|
-
def inspect
|
21
|
-
to_s
|
22
|
-
end
|
23
|
-
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#inside_bounds?} geprüft
|
26
|
-
# werden.
|
27
|
-
# @param coordinates [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,19 +0,0 @@
|
|
1
|
-
require_relative 'has_hints'
|
2
|
-
|
3
|
-
class DragMove
|
4
|
-
|
5
|
-
include HasHints
|
6
|
-
|
7
|
-
attr_reader :start
|
8
|
-
attr_reader :destination
|
9
|
-
|
10
|
-
def initialize(start, destination)
|
11
|
-
@start = start
|
12
|
-
@destination = destination
|
13
|
-
@hints = []
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
"[Move: Drag from #{start} to #{destination}]"
|
18
|
-
end
|
19
|
-
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
|