class JustShogi::Hand

Attributes

pieces[R]
player_number[R]

Public Class Methods

new(player_number: , pieces: []) click to toggle source
# File lib/just_shogi/hand.rb, line 7
def initialize(player_number: , pieces: [])
  @player_number = player_number
  @pieces = if pieces.instance_of?(Array)
              if pieces.all? { |p| p.is_a?(Hash) }
                pieces.map { |p| JustShogi::PieceFactory.new(p).build }
              elsif pieces.all? { |p| p.is_a?(JustShogi::Piece) }
                pieces
              else
                raise ArgumentError, "all pieces must have the same class"
              end
            else
              raise ArgumentError, "pieces must be an array"
            end
end

Public Instance Methods

as_json() click to toggle source
# File lib/just_shogi/hand.rb, line 41
def as_json
  {
    player_number: player_number,
    pieces: pieces.map(&:as_json) 
  }
end
find_piece_by_id(id) click to toggle source
# File lib/just_shogi/hand.rb, line 37
def find_piece_by_id(id)
  pieces.find { |p| p.id == id } 
end
pop_piece(id) click to toggle source
# File lib/just_shogi/hand.rb, line 32
def pop_piece(id)
  p = find_piece_by_id(id) 
  @pieces.delete(p)
end
push_piece(piece) click to toggle source
# File lib/just_shogi/hand.rb, line 25
def push_piece(piece)
  factory = PromotionFactory.new(piece)
  demoted_piece = factory.demotable? ? factory.demote : piece
  demoted_piece.switch_player
  @pieces.push(demoted_piece)
end