Class: GameState
- Inherits:
-
Object
- Object
- GameState
- Defined in:
- lib/software_challenge_client/game_state.rb
Overview
Ein Spielzustand. Wird vom Server an die Computerspieler übermittelt und enthält alles, was der Computerspieler wissen muss, um einen Zug zu machen.
Um eine Liste der gerade möglichen Züge zu bekommen, gibt es die Methode #possible_moves.
Instance Attribute Summary collapse
-
#board ⇒ Board
Das aktuelle Spielbrett.
-
#condition ⇒ Condition
Gewinner und Gewinngrund, falls das Spiel bereits entschieden ist, sonst nil.
-
#last_move ⇒ Move
Der zuletzt gemachte Zug (ist nil vor dem ersten Zug, also bei turn == 0).
-
#player_one ⇒ Player
readonly
Der erste Spieler.
-
#player_two ⇒ Player
readonly
Der zweite Spieler.
-
#start_team ⇒ Team
Der Spieler der zuerst zieht.
-
#turn ⇒ Integer
Aktuelle Zugnummer (von 0 beginnend).
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#add_player(player) ⇒ Object
Fügt einen Spieler zum Spielzustand hinzu.
-
#clone ⇒ Object
Erzeugt eine Kopie des Spielzustandes.
-
#current_player ⇒ Player
Spieler, der gerade an der Reihe ist.
-
#field(x, y) ⇒ Object
Zugriff auf ein Feld des Spielbrettes.
-
#game_ended? ⇒ Boolean
True, falls das Spiel bereits geendet hat, false bei noch laufenden Spielen.
-
#initialize ⇒ GameState
constructor
Erstellt einen neuen leeren Spielstand.
-
#is_first_move? ⇒ Bool
Ob diese gamestate in der ersten Runde ist.
-
#other_player ⇒ Player
Spieler, der gerade nicht an der Reihe ist.
-
#other_team ⇒ Team
Typ des Spielers, der gerade nicht an der Reihe ist.
-
#own_fields ⇒ Array<Field>
Alle Felder mit Blöcken des Spielers, der gerade an der Reihe ist.
-
#perform!(move) ⇒ Object
Führt einen Zug auf dem Spielzustand aus.
-
#points_for_player(_player) ⇒ Integer
Ermittelt die Punkte eines Spielers.
-
#round ⇒ Integer
Aktuelle Rundennummer (von 1 beginnend).
-
#winner ⇒ Player
Der Spieler, der das Spiel gewonnen hat, falls dies schon entschieden ist.
-
#winning_reason ⇒ String
Der Grund, warum das Spiel beendet wurde, nil falls das Spiel noch läuft.
Constructor Details
Instance Attribute Details
#board ⇒ Board
Returns Das aktuelle Spielbrett.
33 34 35 |
# File 'lib/software_challenge_client/game_state.rb', line 33 def board @board end |
#condition ⇒ Condition
Returns Gewinner und Gewinngrund, falls das Spiel bereits entschieden ist, sonst nil.
43 44 45 |
# File 'lib/software_challenge_client/game_state.rb', line 43 def condition @condition end |
#last_move ⇒ Move
Returns Der zuletzt gemachte Zug (ist nil vor dem ersten Zug, also bei turn == 0).
38 39 40 |
# File 'lib/software_challenge_client/game_state.rb', line 38 def last_move @last_move end |
#player_one ⇒ Player (readonly)
Returns Der erste Spieler.
21 22 23 |
# File 'lib/software_challenge_client/game_state.rb', line 21 def player_one @player_one end |
#player_two ⇒ Player (readonly)
Returns Der zweite Spieler.
25 26 27 |
# File 'lib/software_challenge_client/game_state.rb', line 25 def player_two @player_two end |
#start_team ⇒ Team
Returns Der Spieler der zuerst zieht.
29 30 31 |
# File 'lib/software_challenge_client/game_state.rb', line 29 def start_team @start_team end |
#turn ⇒ Integer
Returns Aktuelle Zugnummer (von 0 beginnend).
17 18 19 |
# File 'lib/software_challenge_client/game_state.rb', line 17 def turn @turn end |
Instance Method Details
#==(other) ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/software_challenge_client/game_state.rb', line 129 def ==(other) turn == other.turn && start_color == other.start_color && current_color == other.current_color && blue == other.blue && yellow == other.yellow && red == other.red && green == other.green && board == other.board && lastMove == other.lastMove && condition == other.condition end |
#add_player(player) ⇒ Object
Fügt einen Spieler zum Spielzustand hinzu.
59 60 61 62 63 64 65 66 |
# File 'lib/software_challenge_client/game_state.rb', line 59 def add_player(player) case player.color when Color::RED @player_one = player when Color::BLUE @player_two = player end end |
#clone ⇒ Object
Erzeugt eine Kopie des Spielzustandes. Änderungen an dieser Kopie beeinflussen den originalen Spielzustand nicht. Die Kopie kann also zum testen von Spielzügen genutzt werden.
145 146 147 |
# File 'lib/software_challenge_client/game_state.rb', line 145 def clone Marshal.load(Marshal.dump(self)) end |
#current_player ⇒ Player
Returns Spieler, der gerade an der Reihe ist.
69 70 71 |
# File 'lib/software_challenge_client/game_state.rb', line 69 def current_player turn.even? ? player_one : player_two end |
#field(x, y) ⇒ Object
Zugriff auf ein Feld des Spielbrettes. Siehe Board#field.
46 47 48 |
# File 'lib/software_challenge_client/game_state.rb', line 46 def field(x, y) board.field(x, y) end |
#game_ended? ⇒ Boolean
Returns true, falls das Spiel bereits geendet hat, false bei noch laufenden Spielen.
103 104 105 |
# File 'lib/software_challenge_client/game_state.rb', line 103 def game_ended? !condition.nil? end |
#is_first_move? ⇒ Bool
Returns Ob diese gamestate in der ersten Runde ist.
89 90 91 |
# File 'lib/software_challenge_client/game_state.rb', line 89 def is_first_move? round == 1 end |
#other_player ⇒ Player
Returns Spieler, der gerade nicht an der Reihe ist.
74 75 76 |
# File 'lib/software_challenge_client/game_state.rb', line 74 def other_player turn.even? ? player_two : player_one end |
#other_team ⇒ Team
Returns Typ des Spielers, der gerade nicht an der Reihe ist.
79 80 81 |
# File 'lib/software_challenge_client/game_state.rb', line 79 def other_team other_player.type end |
#own_fields ⇒ Array<Field>
Returns Alle Felder mit Blöcken des Spielers, der gerade an der Reihe ist.
150 151 152 |
# File 'lib/software_challenge_client/game_state.rb', line 150 def own_fields board.fields_of_color(current_player.color) end |
#perform!(move) ⇒ Object
Führt einen Zug auf dem Spielzustand aus. Das Spielbrett wird entsprechend modifiziert.
97 98 99 |
# File 'lib/software_challenge_client/game_state.rb', line 97 def perform!(move) GameRuleLogic.perform_move(self, move) end |
#points_for_player(_player) ⇒ Integer
Ermittelt die Punkte eines Spielers. Wenn das Spiel durch Erreichen des Rundenlimits beendet wird, hat der Spieler mit den meisten Punkten gewonnen.
124 125 126 127 |
# File 'lib/software_challenge_client/game_state.rb', line 124 def points_for_player(_player) # TODO -1 end |
#round ⇒ Integer
Returns Aktuelle Rundennummer (von 1 beginnend).
84 85 86 |
# File 'lib/software_challenge_client/game_state.rb', line 84 def round turn / 2 + 1 end |
#winner ⇒ Player
Returns Der Spieler, der das Spiel gewonnen hat, falls dies schon entschieden ist. Sonst false.
109 110 111 |
# File 'lib/software_challenge_client/game_state.rb', line 109 def winner condition.nil? ? nil : condition.winner end |
#winning_reason ⇒ String
Returns Der Grund, warum das Spiel beendet wurde, nil falls das Spiel noch läuft.
115 116 117 |
# File 'lib/software_challenge_client/game_state.rb', line 115 def winning_reason condition.nil? ? nil : condition.reason end |