software_challenge_client 20.2.2 → 20.2.3
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/RELEASES.md +4 -0
- data/Rakefile +0 -1
- data/lib/software_challenge_client/board.rb +11 -3
- data/lib/software_challenge_client/condition.rb +2 -1
- data/lib/software_challenge_client/cube_coordinates.rb +2 -0
- data/lib/software_challenge_client/direction.rb +2 -2
- data/lib/software_challenge_client/drag_move.rb +3 -0
- data/lib/software_challenge_client/field.rb +5 -2
- data/lib/software_challenge_client/protocol.rb +1 -1
- data/lib/software_challenge_client/util/constants.rb +3 -3
- data/lib/software_challenge_client/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60c420d04b5a4e4698dfdcbefbeab11ab0654275d22d034862ca0d905c70c9c8
|
4
|
+
data.tar.gz: 350efa8b2c7a859ac8c8cb03af9b98f1df32a2edb1a40e4361db77fb7ae62225
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 381e43a1d2ba588ae698c1bbfa6da502893cf9dac3005d2c33bcde6f58d772b7c28e27e7b193954688a61d5ca3bb7f17d97ae23d4c53285ea8d24cdbc9a2845f
|
7
|
+
data.tar.gz: 7c5780b519aef624d543c1aa26a1af9718adef54f93156ed56be352b00f449c6e4714958f97271e77f7d3b6b5e7cc32f91d977e2f961fb20a59e9a3b0f17b71c
|
data/RELEASES.md
CHANGED
data/Rakefile
CHANGED
@@ -15,11 +15,14 @@ class Board
|
|
15
15
|
# seiner x und y CubeCoordinates im Array gespeichert.
|
16
16
|
attr_reader :fields
|
17
17
|
|
18
|
+
# Anzahl der Felder eines hexagonalen Spielfeldes
|
19
|
+
# @param radius [Integer] Radius des Spielfeldes
|
18
20
|
def self.field_amount(radius)
|
19
21
|
return 1 if radius == 1
|
20
22
|
(radius - 1) * 6 + Board.field_amount(radius - 1)
|
21
23
|
end
|
22
24
|
|
25
|
+
# Anzahl der Felder des fuer Hive verwendeten Spielfeldes
|
23
26
|
FIELD_AMOUNT = Board.field_amount((BOARD_SIZE + 1)/2)
|
24
27
|
|
25
28
|
# Erstellt ein neues leeres Spielbrett.
|
@@ -28,6 +31,7 @@ class Board
|
|
28
31
|
fields.each{ |f| add_field(f) }
|
29
32
|
end
|
30
33
|
|
34
|
+
# @return [Array] leere Felder entsprechend des Spielbrettes angeordnet
|
31
35
|
def self.empty_game_field
|
32
36
|
fields = []
|
33
37
|
(-SHIFT..SHIFT).to_a.each do |x|
|
@@ -39,10 +43,12 @@ class Board
|
|
39
43
|
fields
|
40
44
|
end
|
41
45
|
|
46
|
+
# Entfernt alle Felder des Spielfeldes
|
42
47
|
def clear
|
43
48
|
@fields = []
|
44
49
|
end
|
45
50
|
|
51
|
+
# @return [Array] Liste aller Felder
|
46
52
|
def field_list
|
47
53
|
@fields.flatten.select{ |e| !e.nil? }
|
48
54
|
end
|
@@ -90,21 +96,23 @@ class Board
|
|
90
96
|
field_list.select{ |f| f.color == color }
|
91
97
|
end
|
92
98
|
|
99
|
+
# @return [Array] Liste aller Spielsteine, die auf dem Spielbrett platziert wurden
|
93
100
|
def pieces
|
94
101
|
field_list.map(&:pieces).flatten
|
95
102
|
end
|
96
103
|
|
104
|
+
# @param [PlayerColor] Spielerfarbe
|
105
|
+
# @return [Array] Liste aller Spielsteine eines Spielers, die auf dem Spielbrett platziert wurden
|
97
106
|
def deployed_pieces(color)
|
98
107
|
pieces.select { |p| p.color == color }
|
99
108
|
end
|
100
109
|
|
110
|
+
# @return eine unabhaengige Kopie des Spielbretts
|
101
111
|
def clone
|
102
112
|
Marshal.load(Marshal.dump(self))
|
103
113
|
end
|
104
114
|
|
105
|
-
# Gibt eine textuelle Repräsentation des Spielbrettes aus.
|
106
|
-
# einen roten Fisch, B für einen blauen, ~ für ein leeres Feld und O für ein
|
107
|
-
# Kraken-Feld.
|
115
|
+
# Gibt eine textuelle Repräsentation des Spielbrettes aus.
|
108
116
|
def to_s
|
109
117
|
field_list.sort_by(&:z).map{ |f| f.obstructed ? 'OO' : f.empty? ? '--' : f.pieces.last.to_s }.join
|
110
118
|
end
|
@@ -12,7 +12,8 @@ class Condition
|
|
12
12
|
attr_reader :reason
|
13
13
|
|
14
14
|
# Initializes the winning Condition with a player
|
15
|
-
# @param
|
15
|
+
# @param winner [Player] winning player
|
16
|
+
# @param reason [String] why the player has won
|
16
17
|
def initialize(winner, reason)
|
17
18
|
@winner = winner
|
18
19
|
@reason = reason
|
@@ -22,9 +22,9 @@ class Direction < TypesafeEnum::Base
|
|
22
22
|
|
23
23
|
# Verschiebt den durch das Koordinatenpaar angegebenen Punkt in die
|
24
24
|
# entsprechende Richtung. Der resultierende Punkt kann ausserhalb des
|
25
|
-
# Spielbrettes liegen. Dies kann mit {GameRuleLogic
|
25
|
+
# Spielbrettes liegen. Dies kann mit {GameRuleLogic.is_on_board} geprüft
|
26
26
|
# werden.
|
27
|
-
# @param
|
27
|
+
# @param start [CubeCoordinates] Das zu verschiebende Koordinatenpaar.
|
28
28
|
# @param distance [Integer] Um wieviele Felder in die Richtung verschoben werden soll.
|
29
29
|
def translate(start, distance = 1)
|
30
30
|
shiftX = start.x
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'has_hints'
|
2
2
|
|
3
|
+
# Ein Zug, der einen auf dem Spielbrett befindlichen Spielstein bewegt.
|
3
4
|
class DragMove
|
4
5
|
|
5
6
|
include HasHints
|
@@ -7,6 +8,8 @@ class DragMove
|
|
7
8
|
attr_reader :start
|
8
9
|
attr_reader :destination
|
9
10
|
|
11
|
+
# @param start [CubeCoordinates]
|
12
|
+
# @param destination [CubeCoordinates]
|
10
13
|
def initialize(start, destination)
|
11
14
|
@start = start
|
12
15
|
@destination = destination
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
# Ein Feld des Spielfelds. Ein Spielfeld ist durch die Koordinaten eindeutig identifiziert.
|
4
|
-
# Das type Attribut gibt an, um welchen Feldtyp es sich handelt
|
5
4
|
class Field
|
6
5
|
# @!attribute [rw] pieces
|
7
6
|
# @return [Array<Piece>] Spielsteine auf dem Feld, beginnend beim untersten Stein
|
@@ -15,7 +14,6 @@ class Field
|
|
15
14
|
|
16
15
|
# Konstruktor
|
17
16
|
#
|
18
|
-
# @param type [FieldType] Feldtyp
|
19
17
|
# @param x [Integer] X-Koordinate
|
20
18
|
# @param y [Integer] Y-Koordinate
|
21
19
|
# @param pieces [Array<Piece>] Spielsteine auf dem Feld
|
@@ -46,10 +44,12 @@ class Field
|
|
46
44
|
coordinates.z
|
47
45
|
end
|
48
46
|
|
47
|
+
# @return [Boolean] true, wenn eine Spielsteine auf dem Feld liegen und es nicht durch eine Brombeere blockiert ist
|
49
48
|
def empty?
|
50
49
|
pieces.empty? && !obstructed
|
51
50
|
end
|
52
51
|
|
52
|
+
# @return [Boolean] true, es nicht durch eine Brombeere blockiert ist
|
53
53
|
def obstructed?
|
54
54
|
obstructed
|
55
55
|
end
|
@@ -58,10 +58,13 @@ class Field
|
|
58
58
|
pieces.push(piece)
|
59
59
|
end
|
60
60
|
|
61
|
+
# Entfernt den obersten Spielstein
|
62
|
+
# @return [Piece] entfernten Spielstein oder nil
|
61
63
|
def remove_piece
|
62
64
|
pieces.pop
|
63
65
|
end
|
64
66
|
|
67
|
+
# @return [PlayerColor] Farbe des Spielers, der den obersten Spielstein kontrolliert. Ohne Spielsteine nil
|
65
68
|
def color
|
66
69
|
pieces.last&.color
|
67
70
|
end
|
@@ -205,7 +205,7 @@ class Protocol
|
|
205
205
|
|
206
206
|
# send a string
|
207
207
|
#
|
208
|
-
# @param
|
208
|
+
# @param string [String] The string that will be send to the connected server.
|
209
209
|
def sendString(string)
|
210
210
|
@network.sendString("<room roomId=\"#{@roomId}\">#{string}</room>")
|
211
211
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
module Constants
|
6
6
|
ROUND_LIMIT = 30 # Rundenbegrenzung. Nach Ende der angegebenen Runde endet auch das Spiel.
|
7
7
|
GAME_IDENTIFIER = 'swc_2020_hive' # Der Identifikator des Spiels. Für die Kommunikation mit dem Spielserver.
|
8
|
-
STARTING_PIECES = 'QSSSGGBBAAA'
|
9
|
-
BOARD_SIZE = 11
|
10
|
-
SHIFT = ((BOARD_SIZE - 1) / 2)
|
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
|
11
11
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: software_challenge_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 20.2.
|
4
|
+
version: 20.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 'kwollw '
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2019-12-
|
13
|
+
date: 2019-12-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: typesafe_enum
|