2021-09-02 23:20:21 -04:00
|
|
|
module LxChess
|
|
|
|
class Piece
|
|
|
|
NAMES = ["Pawn", "King", "Queen", "Rook", "Bishop", "Knight"]
|
|
|
|
SYMBOLS = "♙♔♕♖♗♘--♟♚♛♜♝♞"
|
|
|
|
FEN_SYMBOLS = "PKQRBN--pkqrbn"
|
|
|
|
|
|
|
|
PAWN = 0
|
|
|
|
KING = 1
|
|
|
|
QUEEN = 2
|
|
|
|
ROOK = 3
|
|
|
|
BISHOP = 4
|
|
|
|
KNIGHT = 5
|
|
|
|
|
|
|
|
def self.from_fen(fen : Char)
|
|
|
|
id = FEN_SYMBOLS.index(fen).as(Int32).to_i8
|
|
|
|
Piece.new(id)
|
|
|
|
end
|
|
|
|
|
2021-09-07 23:37:37 -04:00
|
|
|
property index : (Nil | Int16)
|
2021-09-04 23:09:24 -04:00
|
|
|
|
2021-09-02 23:20:21 -04:00
|
|
|
def initialize(@id : Int8 = 0)
|
|
|
|
end
|
|
|
|
|
|
|
|
def white?
|
|
|
|
@id & 0b1000 == 0
|
|
|
|
end
|
|
|
|
|
|
|
|
def black?
|
2021-09-04 23:09:24 -04:00
|
|
|
@id & 0b1000 == 0b1000
|
2021-09-02 23:20:21 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def color
|
|
|
|
white? ? :white : :black
|
|
|
|
end
|
|
|
|
|
|
|
|
def name
|
|
|
|
NAMES[@id & 0b1000]
|
|
|
|
end
|
|
|
|
|
|
|
|
def symbol(force_black = false)
|
|
|
|
if force_black
|
|
|
|
SYMBOLS[@id | 0b1000]
|
|
|
|
else
|
|
|
|
SYMBOLS[@id]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def fen_symbol
|
|
|
|
FEN_SYMBOLS[@id]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|