let him COOK

This commit is contained in:
LinlyBoi
2023-05-10 12:25:31 +03:00
parent ca1cf55b15
commit a36c89ad51
4 changed files with 113 additions and 122 deletions

View File

@@ -103,76 +103,76 @@ fn minimise_pruning(
}
}
}
#[test]
fn minimax_test() {
let time = Instant::now();
let mut board = Board::default();
let mut disk = Disk::P2;
let _depth = 5;
let _turn1 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
dbg!(&board.columns);
disk = flip_disk(disk);
let _turn2 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
disk = flip_disk(disk);
let _turn3 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
disk = flip_disk(disk);
let _turn4 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
disk = flip_disk(disk);
let _turn5 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
for column in board.columns.as_rows() {
column
.iter()
.map(|x| {
print!("{:#?},", x);
x
})
.count();
println!();
}
dbg!(time.elapsed().as_millis());
assert!(false);
}
#[test]
fn minimax_pruning_test() {
let time = Instant::now();
let mut board = Board::default();
let mut disk = Disk::P2;
let _depth = 5;
let _turn1 = board.play(
disk,
minimax_decision_pruning(&board, disk, &5).last_move as usize,
);
dbg!(&board.columns);
disk = flip_disk(disk);
let _turn2 = board.play(
disk,
minimax_decision_pruning(&board, disk, &5).last_move as usize,
);
disk = flip_disk(disk);
let _turn3 = board.play(
disk,
minimax_decision_pruning(&board, disk, &5).last_move as usize,
);
disk = flip_disk(disk);
let _turn4 = board.play(
disk,
minimax_decision_pruning(&board, disk, &5).last_move as usize,
);
disk = flip_disk(disk);
let _turn5 = board.play(
disk,
minimax_decision_pruning(&board, disk, &5).last_move as usize,
);
for column in board.columns.as_rows() {
column
.iter()
.map(|x| {
print!("{:#?},", x);
x
})
.count();
println!();
}
dbg!(time.elapsed().as_millis());
assert!(false);
}
//#[test]
//fn minimax_test() {
// let time = Instant::now();
// let mut board = Board::default();
// let mut disk = Disk::P2;
// let _depth = 5;
// let _turn1 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
// dbg!(&board.columns);
// disk = flip_disk(disk);
// let _turn2 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
// disk = flip_disk(disk);
// let _turn3 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
// disk = flip_disk(disk);
// let _turn4 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
// disk = flip_disk(disk);
// let _turn5 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
// for column in board.columns.as_rows() {
// column
// .iter()
// .map(|x| {
// print!("{:#?},", x);
// x
// })
// .count();
// println!();
// }
// dbg!(time.elapsed().as_millis());
// assert!(false);
//}
//#[test]
//fn minimax_pruning_test() {
// let time = Instant::now();
// let mut board = Board::default();
// let mut disk = Disk::P2;
// let _depth = 5;
// let _turn1 = board.play(
// disk,
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
// );
// dbg!(&board.columns);
// disk = flip_disk(disk);
// let _turn2 = board.play(
// disk,
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
// );
// disk = flip_disk(disk);
// let _turn3 = board.play(
// disk,
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
// );
// disk = flip_disk(disk);
// let _turn4 = board.play(
// disk,
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
// );
// disk = flip_disk(disk);
// let _turn5 = board.play(
// disk,
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
// );
// for column in board.columns.as_rows() {
// column
// .iter()
// .map(|x| {
// print!("{:#?},", x);
// x
// })
// .count();
// println!();
// }
// dbg!(time.elapsed().as_millis());
// assert!(false);
//}

View File

@@ -222,25 +222,6 @@ fn heur_scan(
//Tests because I am making everything public
//TODO separate module here
#[test]
fn streak_test_1() {
let mut board = Board::default();
board.play(Disk::P2, 3);
board.play(Disk::P2, 3);
board.play(Disk::P2, 3);
board.play(Disk::P2, 2);
board.play(Disk::P2, 1);
let sequences = get_streaks(&board.columns, &Disk::P2);
assert_eq!(POT_STREAKS * 3, potential_streaks(&sequences, &Disk::P2));
board.play(Disk::P2, 0);
let _sequences = get_streaks(&board.columns, &Disk::P2);
board.play(Disk::P2, 3);
board.play(Disk::P2, 3);
board.play(Disk::P2, 3);
board.play(Disk::P2, 3);
let sequences = get_streaks(&board.columns, &Disk::P2);
assert_eq!(POT_STREAKS * 2, potential_streaks(&sequences, &Disk::P2));
}
#[test]
fn win_test_flipping() {
let mut board = Board::default();
board.play(Disk::P2, 3);
@@ -256,12 +237,3 @@ fn win_test_flipping() {
dbg!(&sequences);
assert_eq!(POT_WIN, potential_wins(&sequences, &Disk::P2));
}
#[test]
fn win_test_flipping_hard() {
let mut board = Board::default();
board.play(Disk::P2, 1);
board.play(Disk::P2, 2);
board.play(Disk::P2, 4);
let sequences = get_wins(&board.columns, &Disk::P2);
assert_eq!(POT_WIN, potential_wins(&sequences, &Disk::P2));
}

View File

@@ -88,32 +88,37 @@ pub fn scan(
None => break,
}
}
in_a_row.len() as i32
in_a_row
.iter()
.filter(|d| variant_eq(*d, &player_disk))
.count() as i32
}
// board[(2,3)];
pub fn get_legal_moves(
(row, col): &(usize, usize),
(nrow, ncol): (usize, usize),
) -> Vec<Direction> {
let _max_col = ncol - 1;
let _max_row = nrow - 1;
let max_col = ncol - 1;
let max_row = nrow - 1;
let mut moves: Vec<Direction> = vec![];
match *row {
0 => moves.push(Direction::Up),
_max_rows => moves.push(Direction::Down),
_ => {
moves.push(Direction::Up);
moves.push(Direction::Down);
}
};
match *col {
0 => moves.push(Direction::Right),
_max_col => moves.push(Direction::Left),
_ => {
moves.push(Direction::Left);
moves.push(Direction::Right)
}
};
if *row > 0 && *row < max_row {
//dbg!(row, max_row);
moves.push(Direction::Up);
moves.push(Direction::Down);
} else if *row == 0 {
moves.push(Direction::Up);
} else if *row == max_row {
moves.push(Direction::Down);
}
if (*col > 0 && *col < max_col) {
moves.push(Direction::Left);
moves.push(Direction::Right);
} else if *col == 0 {
moves.push(Direction::Right);
} else if *col == max_col {
moves.push(Direction::Left);
}
if moves.contains(&Direction::Up) && moves.contains(&Direction::Left) {
moves.push(Direction::UpLeft);
}
@@ -128,6 +133,20 @@ pub fn get_legal_moves(
}
moves
}
#[test]
fn dir_test() {
let moves1 = get_legal_moves(&(0, 0), (6, 7));
dbg!(&moves1);
assert_eq!(3, moves1.len());
assert!(moves1.contains(&Direction::Up));
let moves2 = get_legal_moves(&(0, 3), (6, 7));
dbg!(&moves2);
assert_eq!(5, moves2.len());
let moves3 = get_legal_moves(&(1, 3), (6, 7));
dbg!(&moves3);
assert_eq!(8, moves3.len());
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum Direction {

View File

@@ -16,7 +16,7 @@ const BOARDSTART: (i32, i32) = (0, 0);
fn main() {
let (mut rl, thread) = raylib::init()
.size(WIDTH, HEIGHT)
.title("Hello, World")
.title("Connect 4 Game (bad)")
.build();
//images
@@ -101,7 +101,7 @@ fn main() {
Disk::P2 => Color::YELLOW,
Disk::EMPTY => Color::WHITE,
};
d.draw_texture(&circle_texture, x, y, color);
d.draw_texture(&circle_texture, x - 1, y + 2, color);
}
d.clear_background(Color::WHITE);
}