Class: GameState

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initializeGameState

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

#boardBoard

Returns Das aktuelle Spielbrett.

Returns:

  • (Board)

    Das aktuelle Spielbrett



56
57
58
# File 'lib/software_challenge_client/game_state.rb', line 56

def board
  @board
end

#conditionCondition

Returns Gewinner und Gewinngrund, falls das Spiel bereits entschieden ist, sonst nil.

Returns:

  • (Condition)

    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_indexColor

Returns Der jetzige Index in der Zug Reihenfolge der Farben.

Returns:

  • (Color)

    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_moveMove

Returns Der zuletzt gemachte Zug (ist nil vor dem ersten Zug, also bei turn == 0).

Returns:

  • (Move)

    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_colorsArray<Color>

Returns Ein Array aller Farben die ziehen können in der Reihenfolge in der sie drankommen.

Returns:

  • (Array<Color>)

    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_onePlayer (readonly)

Returns Der erste Spieler.

Returns:

  • (Player)

    Der erste Spieler



50
51
52
# File 'lib/software_challenge_client/game_state.rb', line 50

def player_one
  @player_one
end

#player_twoPlayer (readonly)

Returns Der zweite Spieler.

Returns:

  • (Player)

    Der zweite Spieler



53
54
55
# File 'lib/software_challenge_client/game_state.rb', line 53

def player_two
  @player_two
end

#roundInteger

Returns Aktuelle Rundennummer (von 1 beginnend).

Returns:

  • (Integer)

    Aktuelle Rundennummer (von 1 beginnend)



19
20
21
# File 'lib/software_challenge_client/game_state.rb', line 19

def round
  @round
end

#start_colorColor

Returns Die Farbe, die zuerst legen darf.

Returns:

  • (Color)

    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_piecePieceShape

Returns Der Stein, der im ersten Zug von allen Farben gelegt werden muss.

Returns:

  • (PieceShape)

    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

#startColorColor

Returns Die Farbe, die zuerst legen darf.

Returns:

  • (Color)

    Die Farbe, die zuerst legen darf



23
# File 'lib/software_challenge_client/game_state.rb', line 23

attr_accessor :start_color

#startPiecePieceShape

Returns Der Stein, der im ersten Zug von allen Farben gelegt werden muss.

Returns:

  • (PieceShape)

    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

#turnInteger

Returns Aktuelle Zugnummer (von 0 beginnend).

Returns:

  • (Integer)

    Aktuelle Zugnummer (von 0 beginnend)



16
17
18
# File 'lib/software_challenge_client/game_state.rb', line 16

def turn
  @turn
end

#undeployed_blue_piecesArray<PieceShape>

Returns Die blauen, nicht gesetzten Spielsteine.

Returns:

  • (Array<PieceShape>)

    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_piecesArray<PieceShape>

Returns Die grünen, nicht gesetzten Spielsteine.

Returns:

  • (Array<PieceShape>)

    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_piecesArray<PieceShape>

Returns Die roten, nicht gesetzten Spielsteine.

Returns:

  • (Array<PieceShape>)

    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_piecesArray<PieceShape>

Returns Die gelben, nicht gesetzten Spielsteine.

Returns:

  • (Array<PieceShape>)

    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.

Parameters:

  • player (Player)

    Der hinzuzufügende Spieler.



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

#cloneObject

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_colorColor

Returns Farbe, der gerade an der Reihe ist.

Returns:

  • (Color)

    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_playerPlayer

Returns Spieler, der gerade an der Reihe ist.

Returns:

  • (Player)

    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.

Returns:

  • (Array<PieceShape>)

    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.

Returns:

  • (Boolean)

    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.

Returns:

  • (Bool)

    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_playerPlayer

Returns Spieler, der gerade nicht an der Reihe ist.

Returns:

  • (Player)

    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_typePlayerType

Returns Typ des Spielers, der gerade nicht an der Reihe ist.

Returns:

  • (PlayerType)

    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_fieldsArray<Field>

Returns Alle Felder mit Blöcken des Spielers, der gerade an der Reihe ist.

Returns:

  • (Array<Field>)

    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.

Parameters:

  • move (Move)

    Der auszuführende Zug.



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.

Parameters:

  • player (Player)

    Der Spieler, dessen Punkte berechnet werden sollen.

Returns:

  • (Integer)

    Die Punkte des Spielers



178
179
180
181
# File 'lib/software_challenge_client/game_state.rb', line 178

def points_for_player(_player)
  # TODO
  -1
end

#remove_active_colorObject

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_playerObject

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.

Returns:

  • (Array<PieceShape>)

    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

#winnerPlayer

Returns Der Spieler, der das Spiel gewonnen hat, falls dies schon entschieden ist. Sonst false.

Returns:

  • (Player)

    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_reasonString

Returns Der Grund, warum das Spiel beendet wurde, nil falls das Spiel noch läuft.

Returns:

  • (String)

    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