///|
/// The Unicode chess symbols, white pieces first.
fn unicode_piece(piece : Piece) -> String {
match piece.color() {
White =>
match piece.kind() {
King => "♔"
Queen => "♕"
Rook => "♖"
Bishop => "♗"
Knight => "♘"
Pawn => "♙"
}
Black =>
match piece.kind() {
King => "♚"
Queen => "♛"
Rook => "♜"
Bishop => "♝"
Knight => "♞"
Pawn => "♟"
}
}
}
///|
/// Renders the board as an eight by eight diagram using FEN letters,
/// upper-case for white.
pub fn Position::to_ascii(self : Position) -> String {
let buf = StringBuilder()
for row = 0; row < 8; row = row + 1 {
let rank = 7 - row
buf.write_char(Square::rank_char(rank))
buf.write_char(' ')
for file = 0; file < 8; file = file + 1 {
match self.piece_at(Square::make(file, rank)) {
Some(piece) => buf.write_char(piece.fen_char())
None => buf.write_char('.')
}
if file < 7 {
buf.write_char(' ')
}
}
buf.write_char('\n')
}
buf.write_string(" a b c d e f g h")
buf.to_string()
}
///|
/// Renders the board as an eight by eight diagram using the Unicode chess
/// symbols.
pub fn Position::to_unicode(self : Position) -> String {
let buf = StringBuilder()
for row = 0; row < 8; row = row + 1 {
let rank = 7 - row
buf.write_char(Square::rank_char(rank))
buf.write_char(' ')
for file = 0; file < 8; file = file + 1 {
match self.piece_at(Square::make(file, rank)) {
Some(piece) => buf.write_string(unicode_piece(piece))
None => buf.write_string("·")
}
if file < 7 {
buf.write_char(' ')
}
}
buf.write_char('\n')
}
buf.write_string(" a b c d e f g h")
buf.to_string()
}