///|
/// Demo CLI: prints the initial board, plays the classic opening
/// 炮二平五 via the Chinese-notation parser, and runs perft counts.
/// Run with `moon run cmd/main` from the project root.
fn main {
let board = @xiangqi.Board::initial()
println("=== 中国象棋 · MoonBit 规则引擎演示 ===\n")
println(board.render_board())
println("FEN: \{board.to_fen()}")
println("开局合法着法数: \{board.legal_moves().length()}\n")
// Play 1. 炮二平五 by notation, 2. ... 马8进7 by ICCS.
match board.move_from_chinese("炮二平五") {
Ok(mv) => {
println("红方: 炮二平五 (\{board.move_to_iccs(mv)})")
let after_red = board.apply_move(mv)
match after_red.move_from_iccs("h9g7") {
Ok(reply) => {
println(
"黑方: \{after_red.move_to_chinese(reply)} (\{after_red.move_to_iccs(reply)})",
)
let after_black = after_red.apply_move(reply)
println("")
println(after_black.render_board())
println("FEN: \{after_black.to_fen()}")
}
Err(e) => println("黑方着法解析失败: \{e.to_string()}")
}
}
Err(e) => println("着法解析失败: \{e.to_string()}")
}
println("")
println("=== 走法生成正确性验证 (perft) ===")
let start = @xiangqi.Board::initial()
println("perft(1) = \{@xiangqi.perft(start, 1)} (期望 44)")
println("perft(2) = \{@xiangqi.perft(start, 2)} (期望 1920)")
println("perft(3) = \{@xiangqi.perft(start, 3)} (期望 79666)")
}