Class: Tak::PieceSet

Inherits:
Object
  • Object
show all
Defined in:
lib/tak/piece_set.rb

Constant Summary collapse

PIECE_TOTALS =

en.wikipedia.org/wiki/Tak_(game)#Rules

21 pieces is correct for 5s

size => [pieces, capstones]

{
  3 => [10, 0],
  4 => [15, 0],
  5 => [21, 1],
  6 => [30, 1],
  7 => [40, 2],
  8 => [50, 2]
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(board_size: 5, flats: nil, capstones: nil) ⇒ PieceSet

Returns a new instance of PieceSet.



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/tak/piece_set.rb', line 19

def initialize(board_size: 5, flats: nil, capstones: nil)
  default_flats, default_capstones = PIECE_TOTALS[board_size]

  @flats     = flats || default_flats
  @capstones = capstones || default_capstones

  @pieces = {
    capstone:  @capstones,
    flatstone: @flats
  }
end

Instance Attribute Details

#capstonesObject (readonly)

Returns the value of attribute capstones.



3
4
5
# File 'lib/tak/piece_set.rb', line 3

def capstones
  @capstones
end

#flatsObject (readonly)

Returns the value of attribute flats.



3
4
5
# File 'lib/tak/piece_set.rb', line 3

def flats
  @flats
end

Instance Method Details

#empty?Boolean

Note:

It’s often forgotten rule that a capstone needs to be played to consider a piece set as empty and trigger a flat win count.

Whether or not the set is empty

Returns:

  • (Boolean)


37
38
39
# File 'lib/tak/piece_set.rb', line 37

def empty?
  @capstones + @flats == 0
end

#remove(type) ⇒ Boolean

Removes a piece from a set

Parameters:

  • type (Symbol)

    Type of piece

Returns:

  • (Boolean)

    Whether the removal was valid



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/tak/piece_set.rb', line 46

def remove(type)
  return false if @pieces[type] - 1 < 0

  if type == :capstone
    @capstones -= 1
  else
    @flats -= 1
  end

  true
end