Pure-MoonBit chess core: FEN/PGN/SAN/UCI formats, bitboards and perft-verified rules.
moon add L76148/moonchesslet position = @moonchess.Position::from_fen(
"r3k2r/8/8/3pP3/8/8/8/R3K2R w Kq d6 0 12",
)match @moonchess.Position::try_from_fen(input) {
Ok(position) => println(position.to_fen())
Err(error) => println("error: " + error.message())
}position.turn() // White or Black
position.castling().to_fen() // "Kq"
position.en_passant() // Square of d6
position.piece_at(@moonchess.Square::parse("d5").unwrap()) // black pawn
position.king_square(@moonchess.White) // Square of e1
position.piece_count() // 8println(position.to_ascii())
println(position.to_unicode())let pawns = position.pieces_of(@moonchess.White, @moonchess.Pawn)
pawns.count() // number of white pawns
pawns.squares() // squares in index order
pawns.contains(@moonchess.Square::parse("e5").unwrap())
let rank_one = @moonchess.Bitboard::rank_mask(0)
let file_a = @moonchess.Bitboard::file_mask(0)
rank_one.intersect(file_a).first() // Square of a1let moves = position.pseudo_legal_moves()
let legal = position.legal_moves()
position.is_legal(moves[0])
position.pseudo_legal_moves_from(square)
position.in_check(position.turn())
position.is_attacked(square, @moonchess.White)
position.attackers_to(square, @moonchess.White)@moonchess.Bitboard::knight_attacks(square)
@moonchess.Bitboard::rook_attacks(square, occupancy)position.zobrist_hash()moon run cmd/moonchess
moon run cmd/moonchess -- board "<FEN>"
moon run cmd/moonchess -- unicode "<FEN>"
moon run cmd/moonchess -- fen "<FEN>"
moon run cmd/moonchess -- moves "<FEN>"
moon run cmd/moonchess -- validate "<FEN>"moon check --target all --deny-warn
moon fmt --check
moon test --target wasm --deny-warn
moon test --target wasm-gc --deny-warnpub(all) suberror FenError {
Empty
FieldCount(Int)
BoardRankCount(Int)
BoardRankWidth(Int, Int)
InvalidPiece(Char)
InvalidSideToMove(String)
InvalidCastling(String)
InvalidEnPassant(String)
InvalidHalfmoveClock(String)
InvalidFullmoveNumber(String)
MissingKing(Color)
TooManyKings(Color)
} derive(Debug)impl Show for CastlingRightsfn CastlingRights::with_kingside(self : CastlingRights, color : Color, value : Bool) -> CastlingRightsfn CastlingRights::with_queenside(self : CastlingRights, color : Color, value : Bool) -> CastlingRightsfn Position::new(pieces : FixedArray[UInt64], turn : Color, castling : CastlingRights, ep_square : Square?, halfmove_clock : Int, fullmove_number : Int) -> PositionInstall
Download zipPure-MoonBit chess core: FEN/PGN/SAN/UCI formats, bitboards and perft-verified rules.