Class: PieceShape

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

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

#coordinatesObject

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

#dimensionObject

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

#sizeObject

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_sObject

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_transformsArray<Transform>

Gibt alle Kombinationen aus Rotation und Flipping zurück, welche zu einzigartigen Koordinatenmengen dieser Form führen.

Returns:

  • (Array<Transform>)

    Transform Structs mit Rotation r, Boolean f



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