From eba8076ea9c4cdcc412db3404da3d80ee3b3759e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Varga=20D=C3=A1vid=20Lajos?= Date: Fri, 21 Nov 2025 23:41:33 +0200 Subject: [PATCH] implemented api function is_game_over --- engine/src/lib.rs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/engine/src/lib.rs b/engine/src/lib.rs index 26976d3..1d618b3 100644 --- a/engine/src/lib.rs +++ b/engine/src/lib.rs @@ -27,8 +27,20 @@ pub fn get_available_moves(fen: &str) -> Vec { } pub fn is_game_over(fen: &str) -> Option { + let mut board = Board::build(fen); + let mut buffer = MoveBuffer::new(); + let mut temp_buffer = MoveBuffer::new(); + let in_check = board.collect_moves(&mut buffer, &mut temp_buffer); + + println!("found moves: {}", buffer.count()); println!("is_game_over answered"); - return None; + if buffer.count() > 0 { + return None; + } + if !in_check { + return Some(GameEnd::Draw("".to_string())); + } + return if board.side_to_move() == 0 { Some(GameEnd::BlackWon("".to_string())) } else { Some(GameEnd::WhiteWon("".to_string())) }; } pub fn get_board_after_move(fen: &str, chess_move: &ChessMove) -> String { @@ -181,7 +193,7 @@ mod tests { "2k5/3pn3/2pP4/1R1P3B/1Np5/3RPp2/1B6/6Kb w - - 0 1", "2K3B1/4P3/8/7p/4pPn1/1N1P1p1p/4bp2/2Rk4 b - - 0 1", "6N1/B2PP3/pR1b4/3P2nb/6P1/3P1k2/2p5/4r1K1 w - - 0 1", - "3n1K2/p4p2/3k1P2/b1p2P2/P7/8/3p2r1/8 w - - 0 1" + "3n1K2/p2k1p2/5P2/b1p2P2/P7/8/3p2r1/8 w - - 0 1" ]; let expected_results: [Option; 4] = [ None,