Class: PieceShape
- Inherits:
-
TypesafeEnum::Base
- Object
- TypesafeEnum::Base
- PieceShape
- Defined in:
- lib/software_challenge_client/piece_shape.rb
Overview
Die Form eines Spielsteins. Es gibt folgende Formen:
MONO
DOMINO
TRIO_L
TRIO_I
TETRO_O
TETRO_T
TETRO_I
TETRO_L
TETRO_Z
PENTO_L
PENTO_T
PENTO_V
PENTO_S
PENTO_Z
PENTO_I
PENTO_P
PENTO_W
PENTO_U
PENTO_R
PENTO_X
PENTO_Y
Zugriff z.B. mit PieceShape::PENTO_S
Defined Under Namespace
Classes: Transform
Class Method Summary collapse
Instance Method Summary collapse
-
#coordinates ⇒ Object
Die Felder, die der Stein belegt.
-
#dimension ⇒ Object
Eine Koordinate, die das kleinstmögliche Rechteck beschreibt, welches alle Felder umfasst.
-
#size ⇒ Object
Anzahl Felder, die der Stein belegt.
-
#to_s ⇒ Object
Gibt den Form Namen zurück.
-
#transform(rotation, flip) ⇒ Object
Erzeugt eine nach Rotation und Flip transformierte Form.
-
#unique_transforms ⇒ Array<Transform>
Gibt alle Kombinationen aus Rotation und Flipping zurück, welche zu einzigartigen Koordinatenmengen dieser Form führen.
Class Method Details
.c(x, y) ⇒ Object
34 35 36 |
# File 'lib/software_challenge_client/piece_shape.rb', line 34 def self.c(x, y) Coordinates.new(x, y) end |
Instance Method Details
#coordinates ⇒ Object
Die Felder, die der Stein belegt
68 69 70 |
# File 'lib/software_challenge_client/piece_shape.rb', line 68 def coordinates CoordinateSet.new(value) end |
#dimension ⇒ Object
Eine Koordinate, die das kleinstmögliche Rechteck beschreibt, welches alle Felder umfasst.
73 74 75 |
# File 'lib/software_challenge_client/piece_shape.rb', line 73 def dimension coordinates.area end |
#size ⇒ Object
Anzahl Felder, die der Stein belegt
63 64 65 |
# File 'lib/software_challenge_client/piece_shape.rb', line 63 def size value.size end |
#to_s ⇒ Object
Gibt den Form Namen zurück
106 107 108 |
# File 'lib/software_challenge_client/piece_shape.rb', line 106 def to_s self.key.to_s end |
#transform(rotation, flip) ⇒ Object
Erzeugt eine nach Rotation und Flip transformierte Form
78 79 80 |
# File 'lib/software_challenge_client/piece_shape.rb', line 78 def transform(rotation, flip) coordinates.rotate(rotation).flip(flip) end |
#unique_transforms ⇒ Array<Transform>
Gibt alle Kombinationen aus Rotation und Flipping zurück, welche zu einzigartigen Koordinatenmengen dieser Form führen.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/software_challenge_client/piece_shape.rb', line 85 def unique_transforms() if not defined? @transformations then existing_transforms = [] Rotation.each do |r| [true, false].each do |f| new_transform = Transform.new(r, f, transform(r, f)) if existing_transforms.none? { |t| t.coords == new_transform.coords } then existing_transforms << new_transform end end end @transformations = existing_transforms end @transformations end |