Class: Board
- Inherits:
-
Object
- Object
- Board
- Defined in:
- lib/software_challenge_client/board.rb
Overview
Ein Spielbrett bestehend aus 10x10 Feldern.
Instance Attribute Summary collapse
-
#fields ⇒ Array<Array<Field>>
readonly
Ein Feld wird an der Position entsprechend seiner Koordinaten im Array gespeichert.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Vergleicht zwei Spielbretter.
-
#add_field(field) ⇒ Object
Fügt ein Feld dem Spielbrett hinzu.
-
#change_field(x, y, type) ⇒ Object
Ändert den Typ eines bestimmten Feldes des Spielbrettes.
-
#field(x, y) ⇒ Field
Zugriff auf die Felder des Spielfeldes.
-
#field_at(coordinates) ⇒ Field
Zugriff auf die Felder des Spielfeldes über ein Koordinaten-Paar.
-
#fields_of_type(field_type) ⇒ Array<Field>
Liefert alle Felder eines angegebenen Typs des Spielbrettes.
-
#initialize ⇒ Board
constructor
Erstellt ein neues leeres Spielbrett.
-
#to_s ⇒ Object
Gibt eine textuelle Repräsentation des Spielbrettes aus.
Constructor Details
#initialize ⇒ Board
Erstellt ein neues leeres Spielbrett.
18 19 20 21 22 23 24 25 26 |
# File 'lib/software_challenge_client/board.rb', line 18 def initialize @fields = [] (0..9).to_a.each do |y| @fields[y] = [] (0..9).to_a.each do |x| @fields[y][x] = Field.new(x, y, FieldType::EMPTY) end end end |
Instance Attribute Details
Instance Method Details
#==(other) ⇒ Object
Vergleicht zwei Spielbretter. Gleichheit besteht, wenn zwei Spielbretter die gleichen Felder enthalten.
30 31 32 33 34 35 36 37 |
# File 'lib/software_challenge_client/board.rb', line 30 def ==(other) fields.each_with_index do |row, y| row.each_with_index do |field, x| return false if field != other.field(x, y) end end true end |
#add_field(field) ⇒ Object
Fügt ein Feld dem Spielbrett hinzu. Das übergebene Feld ersetzt das an den Koordinaten bestehende Feld.
42 43 44 |
# File 'lib/software_challenge_client/board.rb', line 42 def add_field(field) @fields[field.y][field.x] = field end |
#change_field(x, y, type) ⇒ Object
Ändert den Typ eines bestimmten Feldes des Spielbrettes.
51 52 53 |
# File 'lib/software_challenge_client/board.rb', line 51 def change_field(x, y, type) @fields[y][x].type = type end |
#field(x, y) ⇒ Field
Zugriff auf die Felder des Spielfeldes
61 62 63 64 |
# File 'lib/software_challenge_client/board.rb', line 61 def field(x, y) return nil if x.negative? || y.negative? fields.dig(y, x) # NOTE that #dig requires ruby 2.3+ end |
#field_at(coordinates) ⇒ Field
Zugriff auf die Felder des Spielfeldes über ein Koordinaten-Paar.
72 73 74 |
# File 'lib/software_challenge_client/board.rb', line 72 def field_at(coordinates) field(coordinates.x, coordinates.y) end |
#fields_of_type(field_type) ⇒ Array<Field>
Liefert alle Felder eines angegebenen Typs des Spielbrettes.
80 81 82 |
# File 'lib/software_challenge_client/board.rb', line 80 def fields_of_type(field_type) fields.flatten.select{ |f| f.type == field_type } end |
#to_s ⇒ Object
Gibt eine textuelle Repräsentation des Spielbrettes aus. Hier steht R für einen roten Fisch, B für einen blauen, ~ für ein leeres Feld und O für ein Kraken-Feld.
87 88 89 90 91 |
# File 'lib/software_challenge_client/board.rb', line 87 def to_s fields.reverse.map do |row| row.map { |f| f.type.value }.join(' ') end.join("\n") end |