software_challenge_client 20.2.2 → 20.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|