Class: Board

Inherits:
Object
  • Object
show all
Defined in:
lib/software_challenge_client/board.rb

Overview

Ein Spielbrett bestehend aus 10x10 Feldern.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBoard

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

#fieldsArray<Array<Field>> (readonly)

Note:

Besser über die #field Methode auf Felder zugreifen.

Returns Ein Feld wird an der Position entsprechend seiner Koordinaten im Array gespeichert.


15
16
17
# File 'lib/software_challenge_client/board.rb', line 15

def fields
  @fields
end

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.

See Also:


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_sObject

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