software_challenge_client 20.2.0 → 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 +16 -0
  11. data/Rakefile +4 -4
  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 +99 -34
  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 +4 -1
  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 -53
  23. data/lib/software_challenge_client/game_rule_logic.rb +255 -328
  24. data/lib/software_challenge_client/game_state.rb +87 -69
  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 +82 -76
  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 -23
  44. data/lib/software_challenge_client/direction.rb +0 -55
  45. data/lib/software_challenge_client/drag_move.rb +0 -19
  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
@@ -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