diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/main.rs b/src/main.rs index 7788b73..bb244ca 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,27 +4,28 @@ use std::env; use chessnost::board::color::Color; use chessnost::board::io::IO; use chessnost::board::Board; +use chessnost::grossmeister::Grossmeister; -fn opponent_move(board: &mut Board) { - let mov = match board.read_move() { +fn opponent_move(gm: &mut Grossmeister) { + let mov = match gm.board.read_move() { Ok(m) => m, Err(e) => { println!("Error: {}", e); - return opponent_move(board); + return opponent_move(gm); } }; print!("{:?}", mov); - board.make_move(mov); - board.print(); + gm.board.make_move(mov); + gm.board.print(); } -fn computer_move(board: &mut Board, time_left: &mut Duration) { +fn computer_move(gm: &mut Grossmeister, time_left: &mut Duration) { let allowed_move_duration = *time_left / 20; - let max_depth = 7 + (board.ply as i32 / 15) as u8; + let max_depth = 7 + (gm.board.ply as i32 / 15) as u8; println!("~{:?} left, allocating {:?} for a move", time_left, allowed_move_duration); let move_start = Instant::now(); - let (score, pv) = board.iterative_deepening(max_depth, allowed_move_duration, true); + let (score, pv) = gm.iterative_deepening(max_depth, allowed_move_duration, true); let elapsed = move_start.elapsed(); if *time_left >= elapsed { @@ -37,17 +38,17 @@ fn computer_move(board: &mut Board, time_left: &mut Duration) { let mov = pv[0]; println!("{:?}", mov); - board.make_move(mov); - board.print(); + gm.board.make_move(mov); + gm.board.print(); // Ponder for some time println!("Pondering, assume opponent move from PV: {:?}", pv[1]); - let ep_target_before = board.ep_target.clone(); - let castling_rights_before = board.castling_rights.clone(); - let hash_before = board.hash.clone(); - let captured_piece = board.make_move(pv[1]); - board.iterative_deepening(max_depth, Duration::from_secs(3), false); - board.unmake_move(pv[1], captured_piece, ep_target_before, castling_rights_before, hash_before); + let ep_target_before = gm.board.ep_target.clone(); + let castling_rights_before = gm.board.castling_rights.clone(); + let hash_before = gm.board.hash.clone(); + let captured_piece = gm.board.make_move(pv[1]); + gm.iterative_deepening(max_depth, Duration::from_secs(3), false); + gm.board.unmake_move(pv[1], captured_piece, ep_target_before, castling_rights_before, hash_before); } fn main() { @@ -71,25 +72,26 @@ fn main() { }); let manual_decrement = Duration::from_secs(7); // Time to sync moves with the game - let mut board = if args.len() == 5 { + let board = if args.len() == 5 { Board::from_FEN(args[4].to_string()) } else { Board::new() }; - board.print(); + let mut gm = Grossmeister::new(board); + gm.board.print(); loop { time_left += increment; time_left -= manual_decrement; match color { Color::White => { - computer_move(&mut board, &mut time_left); - opponent_move(&mut board); + computer_move(&mut gm, &mut time_left); + opponent_move(&mut gm); } Color::Black => { - opponent_move(&mut board); - computer_move(&mut board, &mut time_left); + opponent_move(&mut gm); + computer_move(&mut gm, &mut time_left); } } } |