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.
-
#current_color_index ⇒ Color
Der jetzige Index in der Zug Reihenfolge der Farben.
-
#last_move ⇒ Move
Der zuletzt gemachte Zug (ist nil vor dem ersten Zug, also bei turn == 0).
-
#ordered_colors ⇒ Array<Color>
Ein Array aller Farben die ziehen können in der Reihenfolge in der sie drankommen.
-
#player_one ⇒ Player
readonly
Der erste Spieler.
-
#player_two ⇒ Player
readonly
Der zweite Spieler.
-
#round ⇒ Integer
Aktuelle Rundennummer (von 1 beginnend).
-
#start_color ⇒ Color
Die Farbe, die zuerst legen darf.
-
#start_piece ⇒ PieceShape
Der Stein, der im ersten Zug von allen Farben gelegt werden muss.
-
#startColor ⇒ Color
Die Farbe, die zuerst legen darf.
-
#startPiece ⇒ PieceShape
Der Stein, der im ersten Zug von allen Farben gelegt werden muss.
-
#turn ⇒ Integer
Aktuelle Zugnummer (von 0 beginnend).
-
#undeployed_blue_pieces ⇒ Array<PieceShape>
Die blauen, nicht gesetzten Spielsteine.
-
#undeployed_green_pieces ⇒ Array<PieceShape>
Die grünen, nicht gesetzten Spielsteine.
-
#undeployed_red_pieces ⇒ Array<PieceShape>
Die roten, nicht gesetzten Spielsteine.
-
#undeployed_yellow_pieces ⇒ Array<PieceShape>
Die gelben, nicht gesetzten Spielsteine.
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_color ⇒ Color
Farbe, der gerade an der Reihe ist.
-
#current_player ⇒ Player
Spieler, der gerade an der Reihe ist.
-
#deployed_pieces(color) ⇒ Array<PieceShape>
Array aller Shapes, der gegebenen Farbe, die schon gelegt wurden.
-
#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_player_type ⇒ PlayerType
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.
-
#remove_active_color ⇒ Object
Entfernt die jetzige Farbe aus der Farbrotation.
-
#switch_current_player ⇒ Object
Wechselt den Spieler, der aktuell an der Reihe ist.
-
#undeployed_pieces(color) ⇒ Array<PieceShape>
Array aller Shapes, der gegebenen Farbe, die noch nicht gelegt wurden.
-
#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
#initialize ⇒ GameState
Erstellt einen neuen leeren Spielstand.
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/software_challenge_client/game_state.rb', line 75 def initialize @current_color = Color::RED @start_color = Color::RED @board = Board.new @turn = 0 @undeployed_blue_pieces = PieceShape.to_a @undeployed_yellow_pieces = PieceShape.to_a @undeployed_red_pieces = PieceShape.to_a @undeployed_green_pieces = PieceShape.to_a @start_piece = GameRuleLogic.get_random_pentomino end |
Instance Attribute Details
#board ⇒ Board
Returns Das aktuelle Spielbrett.
56 57 58 |
# File 'lib/software_challenge_client/game_state.rb', line 56 def board @board end |
#condition ⇒ Condition
Returns Gewinner und Gewinngrund, falls das Spiel bereits entschieden ist, sonst nil.
67 68 69 |
# File 'lib/software_challenge_client/game_state.rb', line 67 def condition @condition end |
#current_color_index ⇒ Color
Returns Der jetzige Index in der Zug Reihenfolge der Farben.
26 27 28 |
# File 'lib/software_challenge_client/game_state.rb', line 26 def current_color_index @current_color_index end |
#last_move ⇒ Move
Returns Der zuletzt gemachte Zug (ist nil vor dem ersten Zug, also bei turn == 0).
63 64 65 |
# File 'lib/software_challenge_client/game_state.rb', line 63 def last_move @last_move end |
#ordered_colors ⇒ Array<Color>
Returns Ein Array aller Farben die ziehen können in der Reihenfolge in der sie drankommen.
30 31 32 |
# File 'lib/software_challenge_client/game_state.rb', line 30 def ordered_colors @ordered_colors end |
#player_one ⇒ Player (readonly)
Returns Der erste Spieler.
50 51 52 |
# File 'lib/software_challenge_client/game_state.rb', line 50 def player_one @player_one end |
#player_two ⇒ Player (readonly)
Returns Der zweite Spieler.
53 54 55 |
# File 'lib/software_challenge_client/game_state.rb', line 53 def player_two @player_two end |
#round ⇒ Integer
Returns Aktuelle Rundennummer (von 1 beginnend).
19 20 21 |
# File 'lib/software_challenge_client/game_state.rb', line 19 def round @round end |
#start_color ⇒ Color
Returns Die Farbe, die zuerst legen darf.
23 24 25 |
# File 'lib/software_challenge_client/game_state.rb', line 23 def start_color @start_color end |
#start_piece ⇒ PieceShape
Returns Der Stein, der im ersten Zug von allen Farben gelegt werden muss.
59 60 61 |
# File 'lib/software_challenge_client/game_state.rb', line 59 def start_piece @start_piece end |
#startColor ⇒ Color
Returns Die Farbe, die zuerst legen darf.
23 |
# File 'lib/software_challenge_client/game_state.rb', line 23 attr_accessor :start_color |
#startPiece ⇒ PieceShape
Returns Der Stein, der im ersten Zug von allen Farben gelegt werden muss.
59 |
# File 'lib/software_challenge_client/game_state.rb', line 59 attr_accessor :start_piece |
#turn ⇒ Integer
Returns Aktuelle Zugnummer (von 0 beginnend).
16 17 18 |
# File 'lib/software_challenge_client/game_state.rb', line 16 def turn @turn end |
#undeployed_blue_pieces ⇒ Array<PieceShape>
Returns Die blauen, nicht gesetzten Spielsteine.
34 35 36 |
# File 'lib/software_challenge_client/game_state.rb', line 34 def undeployed_blue_pieces @undeployed_blue_pieces end |
#undeployed_green_pieces ⇒ Array<PieceShape>
Returns Die grünen, nicht gesetzten Spielsteine.
46 47 48 |
# File 'lib/software_challenge_client/game_state.rb', line 46 def undeployed_green_pieces @undeployed_green_pieces end |
#undeployed_red_pieces ⇒ Array<PieceShape>
Returns Die roten, nicht gesetzten Spielsteine.
42 43 44 |
# File 'lib/software_challenge_client/game_state.rb', line 42 def undeployed_red_pieces @undeployed_red_pieces end |
#undeployed_yellow_pieces ⇒ Array<PieceShape>
Returns Die gelben, nicht gesetzten Spielsteine.
38 39 40 |
# File 'lib/software_challenge_client/game_state.rb', line 38 def undeployed_yellow_pieces @undeployed_yellow_pieces end |
Instance Method Details
#==(other) ⇒ Object
183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/software_challenge_client/game_state.rb', line 183 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.
90 91 92 93 94 95 96 |
# File 'lib/software_challenge_client/game_state.rb', line 90 def add_player(player) if player.type == PlayerType::ONE @player_one = player elsif player.type == PlayerType::TWO @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.
199 200 201 |
# File 'lib/software_challenge_client/game_state.rb', line 199 def clone Marshal.load(Marshal.dump(self)) end |
#current_color ⇒ Color
Returns Farbe, der gerade an der Reihe ist.
114 115 116 |
# File 'lib/software_challenge_client/game_state.rb', line 114 def current_color ordered_colors[current_color_index] end |
#current_player ⇒ Player
Returns Spieler, der gerade an der Reihe ist.
99 100 101 |
# File 'lib/software_challenge_client/game_state.rb', line 99 def current_player turn % 2 == 0 ? player_one : player_two end |
#deployed_pieces(color) ⇒ Array<PieceShape>
Returns Array aller Shapes, der gegebenen Farbe, die schon gelegt wurden.
133 134 135 |
# File 'lib/software_challenge_client/game_state.rb', line 133 def deployed_pieces(color) board.deployed_pieces(color) end |
#field(x, y) ⇒ Object
Zugriff auf ein Feld des Spielbrettes. Siehe Board#field.
70 71 72 |
# File 'lib/software_challenge_client/game_state.rb', line 70 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.
152 153 154 |
# File 'lib/software_challenge_client/game_state.rb', line 152 def game_ended? !condition.nil? end |
#is_first_move? ⇒ Bool
Returns Ob diese gamestate in der ersten Runde ist.
138 139 140 |
# File 'lib/software_challenge_client/game_state.rb', line 138 def is_first_move? round == 1 end |
#other_player ⇒ Player
Returns Spieler, der gerade nicht an der Reihe ist.
104 105 106 |
# File 'lib/software_challenge_client/game_state.rb', line 104 def other_player turn % 2 == 0 ? player_two : player_one end |
#other_player_type ⇒ PlayerType
Returns Typ des Spielers, der gerade nicht an der Reihe ist.
109 110 111 |
# File 'lib/software_challenge_client/game_state.rb', line 109 def other_player_type other_player.type end |
#own_fields ⇒ Array<Field>
Returns Alle Felder mit Blöcken des Spielers, der gerade an der Reihe ist.
209 210 211 |
# File 'lib/software_challenge_client/game_state.rb', line 209 def own_fields board.fields_of_color(current_color) end |
#perform!(move) ⇒ Object
Führt einen Zug auf dem Spielzustand aus. Das Spielbrett wird entsprechend modifiziert.
146 147 148 |
# File 'lib/software_challenge_client/game_state.rb', line 146 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.
178 179 180 181 |
# File 'lib/software_challenge_client/game_state.rb', line 178 def points_for_player(_player) # TODO -1 end |
#remove_active_color ⇒ Object
Entfernt die jetzige Farbe aus der Farbrotation
157 158 159 |
# File 'lib/software_challenge_client/game_state.rb', line 157 def remove_active_color ordered_colors.delete current_color end |
#switch_current_player ⇒ Object
Wechselt den Spieler, der aktuell an der Reihe ist.
204 205 206 |
# File 'lib/software_challenge_client/game_state.rb', line 204 def switch_current_player @current_player_color = other_player_color end |
#undeployed_pieces(color) ⇒ Array<PieceShape>
Returns Array aller Shapes, der gegebenen Farbe, die noch nicht gelegt wurden.
119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/software_challenge_client/game_state.rb', line 119 def undeployed_pieces(color) case color when Color::RED undeployed_red_pieces when Color::BLUE undeployed_blue_pieces when Color::YELLOW undeployed_yellow_pieces when Color::GREEN undeployed_green_pieces end end |
#winner ⇒ Player
Returns Der Spieler, der das Spiel gewonnen hat, falls dies schon entschieden ist. Sonst false.
163 164 165 |
# File 'lib/software_challenge_client/game_state.rb', line 163 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.
169 170 171 |
# File 'lib/software_challenge_client/game_state.rb', line 169 def winning_reason condition.nil? ? nil : condition.reason end |