class CaissaGuardian::Position

Position namespace.

Public Instance Methods

after(move) click to toggle source
# File lib/caissa_guardian/position.rb, line 9
def after(move)
  hash = ::Qi.call(move, in_hand: in_hand, square: square)
  self.class.new(shape: shape, side_id: next_side_id, **hash)
end
enemy_king_square_id() click to toggle source
# File lib/caissa_guardian/position.rb, line 14
def enemy_king_square_id
  enemy_pieces.each do |square_id, piece_name|
    break square_id if piece_name.include?("-")
  end
end
enemy_pieces() click to toggle source

The list of pieces on the board owned by the opponent player, with squares.

@return [Hash] Top-side's pieces if turn to bottomside, bottom-side's ones

otherwise.
# File lib/caissa_guardian/position.rb, line 24
def enemy_pieces
  turn_to_topside? ? square_bottomside_pieces : square_topside_pieces
end
next_side_id() click to toggle source
# File lib/caissa_guardian/position.rb, line 38
def next_side_id
  side_id.next % sides_count
end
sides_count() click to toggle source
# File lib/caissa_guardian/position.rb, line 42
def sides_count
  2
end
to_s() click to toggle source

@note Faster than FEEN to calculate.

# File lib/caissa_guardian/position.rb, line 29
def to_s
  [
    side_id,
    square.keys.sort.inject("") { |s, key| s + "#{key}:#{square.fetch(key)}" },
    shape.join("x"),
    in_hand.join(",")
  ].join("--")
end