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