software_challenge_client 20.2.4 → 21.0.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 +4 -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 +23 -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 +255 -332
  24. data/lib/software_challenge_client/game_state.rb +86 -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 +43 -14
  30. data/lib/software_challenge_client/piece_shape.rb +83 -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 -75
  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 +14 -12
  42. metadata +52 -35
  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
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'typesafe_enum'
4
+
5
+ # Erster oder zweiter Spieler:
6
+ #
7
+ # ONE
8
+ # TWO
9
+ #
10
+ # Zugriff z.B. mit PlayerType::ONE
11
+ class PlayerType < TypesafeEnum::Base
12
+ new :ONE
13
+ new :TWO
14
+ end
@@ -3,7 +3,6 @@
3
3
  require 'socket'
4
4
  require_relative 'board'
5
5
  require_relative 'set_move'
6
- require_relative 'drag_move'
7
6
  require_relative 'skip_move'
8
7
  require_relative 'player'
9
8
  require_relative 'network'
@@ -41,7 +40,7 @@ class Protocol
41
40
  #
42
41
  # @param text [String] the xml-string that will be parsed
43
42
  def process_string(text)
44
- logger.debug "Parse XML:\n#{text}\n----END XML"
43
+ #logger.debug "Parse XML:\n#{text}\n----END XML"
45
44
  begin
46
45
  REXML::Document.parse_stream(text, self)
47
46
  rescue REXML::ParseException => e
@@ -50,7 +49,6 @@ class Protocol
50
49
  end
51
50
  end
52
51
 
53
-
54
52
  # called when text is encountered
55
53
  def text(text)
56
54
  @context[:last_text] = text
@@ -63,6 +61,33 @@ class Protocol
63
61
  case name
64
62
  when 'board'
65
63
  logger.debug @gamestate.board.to_s
64
+ when 'color'
65
+ if @context[:color] == :ordered_colors
66
+ @gamestate.ordered_colors << Color.to_a.find {|s| s.key == @context[:last_text].to_sym }
67
+ end
68
+ when 'shape'
69
+ case @context[:piece_target]
70
+ when :blue_shapes
71
+ last = @context[:last_text]
72
+ arr = PieceShape.to_a
73
+ shape = arr.find {|s| s.key == @context[:last_text].to_sym }
74
+ @gamestate.undeployed_blue_pieces << shape
75
+ when :yellow_shapes
76
+ shape = PieceShape.to_a.find {|s| s.key == @context[:last_text].to_sym }
77
+ @gamestate.undeployed_yellow_pieces << shape
78
+ when :red_shapes
79
+ shape = PieceShape.to_a.find {|s| s.key == @context[:last_text].to_sym }
80
+ @gamestate.undeployed_red_pieces << shape
81
+ when :green_shapes
82
+ shape = PieceShape.to_a.find {|s| s.key == @context[:last_text].to_sym }
83
+ @gamestate.undeployed_green_pieces << shape
84
+ end
85
+ when 'yellowShapes'
86
+
87
+ when 'redShapes'
88
+
89
+ when 'greenShapes'
90
+
66
91
  end
67
92
  end
68
93
 
@@ -97,59 +122,69 @@ class Protocol
97
122
  when 'state'
98
123
  logger.debug 'new gamestate'
99
124
  @gamestate = GameState.new
125
+ @gamestate.current_color_index = attrs['currentColorIndex'].to_i
100
126
  @gamestate.turn = attrs['turn'].to_i
101
- @gamestate.start_player_color = attrs['startPlayerColor'] == 'RED' ? PlayerColor::RED : PlayerColor::BLUE
102
- @gamestate.current_player_color = attrs['currentPlayerColor'] == 'RED' ? PlayerColor::RED : PlayerColor::BLUE
103
- logger.debug "Turn: #{@gamestate.turn}"
104
- when 'red'
105
- logger.debug 'new red player'
106
- player = parsePlayer(attrs)
107
- if player.color != PlayerColor::RED
108
- throw new IllegalArgumentException("expected #{PlayerColor::RED} Player but got #{player.color}")
109
- end
127
+ @gamestate.round = attrs['round'].to_i
128
+ @gamestate.start_piece = PieceShape.to_a.find {|s| s.key == attrs['startPiece'].to_sym }
129
+ logger.debug "Round: #{@gamestate.round}, Turn: #{@gamestate.turn}"
130
+ when 'first'
131
+ logger.debug 'new first player'
132
+ player = Player.new(PlayerType::ONE, attrs['displayName'])
110
133
  @gamestate.add_player(player)
111
134
  @context[:player] = player
112
- when 'blue'
113
- logger.debug 'new blue player'
114
- player = parsePlayer(attrs)
115
- if player.color != PlayerColor::BLUE
116
- throw new IllegalArgumentException("expected #{PlayerColor::BLUE} Player but got #{player.color}")
117
- end
135
+ @context[:color] = :one
136
+ when 'second'
137
+ logger.debug 'new second player'
138
+ player = Player.new(PlayerType::TWO, attrs['displayName'])
118
139
  @gamestate.add_player(player)
119
140
  @context[:player] = player
141
+ @context[:color] = :two
142
+ when 'orderedColors'
143
+ @context[:color] = :ordered_colors
144
+ @gamestate.ordered_colors = []
120
145
  when 'board'
121
146
  logger.debug 'new board'
122
- @gamestate.board = Board.new
147
+ @gamestate.board = Board.new()
123
148
  when 'field'
124
149
  x = attrs['x'].to_i
125
150
  y = attrs['y'].to_i
126
- obstructed = attrs['isObstructed'] == 'true'
127
- field = Field.new(x, y, [], obstructed)
151
+ color = Color.find_by_key(attrs['content'].to_sym)
152
+ field = Field.new(x, y, color)
128
153
  @gamestate.board.add_field(field)
129
154
  @context[:piece_target] = :field
130
155
  @context[:field] = field
156
+ when 'blueShapes'
157
+ @context[:piece_target] = :blue_shapes
158
+ @gamestate.undeployed_blue_pieces = []
159
+ when 'yellowShapes'
160
+ @context[:piece_target] = :yellow_shapes
161
+ @gamestate.undeployed_yellow_pieces = []
162
+ when 'redShapes'
163
+ @context[:piece_target] = :red_shapes
164
+ @gamestate.undeployed_red_pieces = []
165
+ when 'greenShapes'
166
+ @context[:piece_target] = :green_shapes
167
+ @gamestate.undeployed_green_pieces = []
131
168
  when 'piece'
132
- owner = PlayerColor.find_by_key(attrs['owner'].to_sym)
133
- type = PieceType.find_by_key(attrs['type'].to_sym)
134
- piece = Piece.new(owner, type)
169
+ color = Color.find_by_key(attrs['color'].to_sym)
170
+ kind = PieceShape.find_by_key(attrs['kind'].to_sym)
171
+ rotation = Rotation.find_by_key(attrs['rotation'].to_sym)
172
+ is_flipped = attrs['isFlipped'].downcase == "true"
173
+ piece = Piece.new(color, kind, rotation, is_flipped, Coordinates.origin)
135
174
  case @context[:piece_target]
136
- when :field
137
- @context[:field].add_piece(piece)
138
- when :undeployed_red_pieces
139
- @gamestate.undeployed_red_pieces << piece
140
- when :undeployed_blue_pieces
175
+ when :blue_shapes
141
176
  @gamestate.undeployed_blue_pieces << piece
177
+ when :yellow_shapes
178
+ @gamestate.undeployed_yellow_pieces << piece
179
+ when :red_shapes
180
+ @gamestate.green_red_pieces << piece
181
+ when :green_shapes
182
+ @gamestate.undeployed_green_pieces << piece
142
183
  when :last_move
143
184
  @context[:last_move_piece] = piece
144
185
  else
145
186
  raise "unknown piece target #{@context[:piece_target]}"
146
187
  end
147
- when 'undeployedRedPieces'
148
- @context[:piece_target] = :undeployed_red_pieces
149
- @gamestate.undeployed_red_pieces = []
150
- when 'undeployedBluePieces'
151
- @context[:piece_target] = :undeployed_blue_pieces
152
- @gamestate.undeployed_blue_pieces = []
153
188
  when 'lastMove'
154
189
  type = attrs['class']
155
190
  if type == 'skipmove'
@@ -158,24 +193,16 @@ class Protocol
158
193
  @context[:last_move_type] = type
159
194
  @context[:piece_target] = :last_move
160
195
  end
161
- when 'start'
162
- @context[:last_move_start] = CubeCoordinates.new(attrs['x'].to_i, attrs['y'].to_i, attrs['z'].to_i)
163
- when 'destination'
164
- destination = CubeCoordinates.new(attrs['x'].to_i, attrs['y'].to_i, attrs['z'].to_i)
165
- case @context[:last_move_type]
166
- when 'setmove'
167
- @gamestate.last_move = SetMove.new(@context[:last_move_piece], destination)
168
- when 'dragmove'
169
- @gamestate.last_move = SetMove.new(@context[:last_move_start], destination)
170
- end
196
+ when 'startColor'
197
+ @gamestate.start_color = Color::BLUE
171
198
  when 'winner'
172
- # TODO
173
- #winning_player = parsePlayer(attrs)
174
- #@gamestate.condition = Condition.new(winning_player, @gamestate.condition.reason)
199
+ # TODO
200
+ # winning_player = parsePlayer(attrs)
201
+ # @gamestate.condition = Condition.new(winning_player, @gamestate.condition.reason)
175
202
  when 'score'
176
203
  # TODO
177
204
  # there are two score tags in the result, but reason attribute should be equal on both
178
- #@gamestate.condition = Condition.new(@gamestate.condition.winner, attrs['reason'])
205
+ # @gamestate.condition = Condition.new(@gamestate.condition.winner, attrs['reason'])
179
206
  when 'left'
180
207
  logger.debug 'got left event, terminating'
181
208
  @network.disconnect
@@ -185,17 +212,6 @@ class Protocol
185
212
  end
186
213
  end
187
214
 
188
- # Converts XML attributes for a Player to a new Player object
189
- #
190
- # @param attributes [Hash] Attributes for the new Player.
191
- # @return [Player] The created Player object.
192
- def parsePlayer(attributes)
193
- Player.new(
194
- PlayerColor.find_by_key(attributes['color'].to_sym),
195
- attributes['displayName']
196
- )
197
- end
198
-
199
215
  # send a xml document
200
216
  #
201
217
  # @param document [REXML::Document] the document, that will be send to the connected server
@@ -228,26 +244,17 @@ class Protocol
228
244
  # structures.
229
245
  case move
230
246
  when SetMove
231
- builder.data(class: 'setmove') do |data|
232
- data.piece(owner: move.piece.owner.key, type: move.piece.type.key)
233
- d = move.destination
234
- data.destination(x: d.x, y: d.y, z: d.z)
235
- move.hints.each do |hint|
236
- data.hint(content: hint.content)
247
+ builder.data(class: 'sc.plugin2021.SetMove') do |data|
248
+ data.piece(color: move.piece.color, kind: move.piece.kind, rotation: move.piece.rotation, isFlipped: move.piece.is_flipped) do |piece|
249
+ piece.position(x: move.piece.position.x, y: move.piece.position.y)
237
250
  end
238
- end
239
- when DragMove
240
- builder.data(class: 'dragmove') do |data|
241
- s = move.start
242
- data.start(x: s.x, y: s.y, z: s.z)
243
- d = move.destination
244
- data.destination(x: d.x, y: d.y, z: d.z)
245
251
  move.hints.each do |hint|
246
252
  data.hint(content: hint.content)
247
253
  end
248
254
  end
249
255
  when SkipMove
250
- builder.data(class: 'skipmove') do |data|
256
+ builder.data(class: 'sc.plugin2021.SkipMove') do |data|
257
+ data.color(@gamestate.current_color.key.to_s)
251
258
  move.hints.each do |hint|
252
259
  data.hint(content: hint.content)
253
260
  end
@@ -255,5 +262,4 @@ class Protocol
255
262
  end
256
263
  builder.target!
257
264
  end
258
-
259
265
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'typesafe_enum'
4
+
5
+ # Die Drehung eines Steins
6
+ class Rotation < TypesafeEnum::Base
7
+ new :NONE, 0
8
+ new :RIGHT, 1
9
+ new :MIRROR, 2
10
+ new :LEFT, 3
11
+
12
+ # Summiere beide Rotationen auf.
13
+ # (Die resultierende Rotation hat den gleichen Effekt wie die beiden Rotationen einzeln).
14
+ def rotate(rotation)
15
+ Rotation.to_a[(value + rotation.value) % Rotation.size]
16
+ end
17
+
18
+ # Gibt den rotation namen zurück
19
+ def to_s
20
+ self.key.to_s
21
+ end
22
+ end
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
  require_relative 'board'
3
4
  require_relative 'client_interface'
4
5
  require_relative 'network'
@@ -8,7 +9,7 @@ class Runner
8
9
  include Logging
9
10
 
10
11
  def initialize(host, port, client, reservation = nil)
11
- logger.info 'Software Challenge 2019'
12
+ logger.info 'Software Challenge 2021'
12
13
  logger.info 'Ruby Client'
13
14
  logger.info "Host: #{host}"
14
15
  logger.info "Port: #{port}"
@@ -1,15 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'has_hints'
2
4
 
5
+ # Ein SetMove platziert einen Stein auf dem Spielbrett
3
6
  class SetMove
4
-
5
7
  include HasHints
6
8
 
7
9
  attr_reader :piece
8
- attr_reader :destination
9
10
 
10
- def initialize(piece, destination)
11
+ # Erstellt ein neuen leeren Legezug.
12
+ def initialize(piece)
11
13
  @piece = piece
12
- @destination = destination
13
14
  @hints = []
14
15
  end
16
+
17
+ def ==(other)
18
+ piece == other.piece
19
+ end
20
+
21
+ def to_s
22
+ "SetMove(#{piece}"
23
+ end
15
24
  end
@@ -1,7 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'has_hints'
4
+
5
+ # Ein SkipMove ziegt an, dass die aktuelle Farbe keinen Stein platzieren will
2
6
  class SkipMove
3
7
  include HasHints
4
8
 
9
+ # Erstellt ein neuen leeren Aussetzzug.
5
10
  def initialize
6
11
  @hints = []
7
12
  end
@@ -4,8 +4,7 @@
4
4
  # Konstanten zum aktuellen Spiel.
5
5
  module Constants
6
6
  ROUND_LIMIT = 30 # Rundenbegrenzung. Nach Ende der angegebenen Runde endet auch das Spiel.
7
- GAME_IDENTIFIER = 'swc_2020_hive' # Der Identifikator des Spiels. Für die Kommunikation mit dem Spielserver.
8
- STARTING_PIECES = 'QSSSGGBBAAA' # Spielsteine, die jeder Spieler am Anfang des Spiels bekommt in textueller Repraesentation
9
- BOARD_SIZE = 11 # Durchmesser des Spielbretts in Feldern
10
- SHIFT = ((BOARD_SIZE - 1) / 2) # Wert, den man auf eine CubeCoordinate addieren muss, um einen positiven Index (fuer das Feld-Array) zu bekommen
7
+ GAME_IDENTIFIER = 'swc_2021_blokus' # Der Identifikator des Spiels. Für die Kommunikation mit dem Spielserver.
8
+ BOARD_SIZE = 20 # Seitenlänge des Spielbretts in Feldern
9
+ TOTAL_PIECE_SHAPES = 21
11
10
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
2
3
  module SoftwareChallengeClient
3
- VERSION = "20.2.4"
4
+ VERSION = '21.0.0'
4
5
  end
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ # This creates a entrypoint for the gem named 'software_challenge_client.rb'
3
+ # which includes all ruby files under lib. Making sure that everthing is
4
+ # included after some files were added or removed (in the process of updating
5
+ # the gem for a new game).
6
+ shopt -s globstar || exit 1
7
+ cd lib || exit 1
8
+ FILENAME='software_challenge_client.rb'
9
+
10
+ echo "# frozen_string_literal: true
11
+ module SoftwareChallengeClient" > $FILENAME
12
+ for file in software_challenge_client/**/*.rb; do
13
+ echo " require '${file}'"
14
+ done >> $FILENAME;
15
+ echo "end" >> $FILENAME
@@ -1,39 +1,41 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'software_challenge_client/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "software_challenge_client"
8
+ spec.name = 'software_challenge_client'
8
9
  spec.version = SoftwareChallengeClient::VERSION
9
10
  spec.authors = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/^(.*) *</)[1] }
10
11
  spec.email = File.readlines('AUTHORS').select { |l| l[' <'] }.map { |l| l.match(/<(.*)>/)[1] }
11
12
 
12
- spec.summary = 'This gem provides functions to build a client for the coding competition Software-Challenge 2017.'
13
+ spec.summary = 'Provides functions to build a client for the coding competition Software-Challenge Germany.'
13
14
  spec.description = ''
14
15
  spec.homepage = 'http://www.software-challenge.de'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
18
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
20
21
 
21
22
  spec.required_ruby_version = '>= 2.3'
22
- spec.add_dependency 'typesafe_enum'
23
23
  spec.add_dependency 'builder'
24
+ spec.add_dependency 'typesafe_enum'
24
25
 
25
26
  spec.add_development_dependency 'bundler', '>= 1.10'
26
- spec.add_development_dependency 'rake', '>= 10.0'
27
- spec.add_development_dependency 'yard', '>= 0.8'
28
- spec.add_development_dependency 'rspec'
29
27
  spec.add_development_dependency 'fuubar'
30
- spec.add_development_dependency 'rubocop'
31
- spec.add_development_dependency 'rubocop-rspec'
32
28
  spec.add_development_dependency 'guard'
33
29
  spec.add_development_dependency 'guard-rspec'
34
30
  spec.add_development_dependency 'guard-rubocop'
35
31
  spec.add_development_dependency 'pry'
36
- spec.add_development_dependency 'pry-rescue'
37
- spec.add_development_dependency 'pry-coolline'
38
32
  spec.add_development_dependency 'pry-byebug'
33
+ spec.add_development_dependency 'pry-coolline'
34
+ spec.add_development_dependency 'pry-rescue'
35
+ spec.add_development_dependency 'rake', '>= 10.0'
36
+ spec.add_development_dependency 'rspec'
37
+ spec.add_development_dependency 'rubocop'
38
+ spec.add_development_dependency 'rubocop-rspec'
39
+ spec.add_development_dependency 'solargraph'
40
+ spec.add_development_dependency 'yard', '>= 0.8'
39
41
  end
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.0.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-11-11 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
@@ -311,9 +328,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
311
328
  - !ruby/object:Gem::Version
312
329
  version: '0'
313
330
  requirements: []
314
- rubygems_version: 3.0.3
315
- signing_key:
331
+ rubygems_version: 3.1.4
332
+ signing_key:
316
333
  specification_version: 4
317
- summary: This gem provides functions to build a client for the coding competition
318
- Software-Challenge 2017.
334
+ summary: Provides functions to build a client for the coding competition Software-Challenge
335
+ Germany.
319
336
  test_files: []