aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authoreug-vs <eugene@eug-vs.xyz>2023-02-21 17:49:51 +0300
committereug-vs <eugene@eug-vs.xyz>2023-02-23 14:01:03 +0300
commitf60c573ba71207c18a28413e3940a4e21b07c73f (patch)
tree3e50e9ea6cd0129414db92cd50805ebeb65a4676 /src/main.rs
parent69f3c48fb99d96f3fbc4ab49f5fb6d1d8e90e270 (diff)
downloadchessnost-f60c573ba71207c18a28413e3940a4e21b07c73f.tar.gz
refactor: create grossmeister module
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs46
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);
}
}
}