let him COOK
This commit is contained in:
@@ -103,76 +103,76 @@ fn minimise_pruning(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[test]
|
//#[test]
|
||||||
fn minimax_test() {
|
//fn minimax_test() {
|
||||||
let time = Instant::now();
|
// let time = Instant::now();
|
||||||
let mut board = Board::default();
|
// let mut board = Board::default();
|
||||||
let mut disk = Disk::P2;
|
// let mut disk = Disk::P2;
|
||||||
let _depth = 5;
|
// let _depth = 5;
|
||||||
let _turn1 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
// let _turn1 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
||||||
dbg!(&board.columns);
|
// dbg!(&board.columns);
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn2 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
// let _turn2 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn3 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
// let _turn3 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn4 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
// let _turn4 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn5 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
// let _turn5 = board.play(disk, minimax_decision(&board, disk, &5).last_move as usize);
|
||||||
for column in board.columns.as_rows() {
|
// for column in board.columns.as_rows() {
|
||||||
column
|
// column
|
||||||
.iter()
|
// .iter()
|
||||||
.map(|x| {
|
// .map(|x| {
|
||||||
print!("{:#?},", x);
|
// print!("{:#?},", x);
|
||||||
x
|
// x
|
||||||
})
|
// })
|
||||||
.count();
|
// .count();
|
||||||
println!();
|
// println!();
|
||||||
}
|
// }
|
||||||
dbg!(time.elapsed().as_millis());
|
// dbg!(time.elapsed().as_millis());
|
||||||
assert!(false);
|
// assert!(false);
|
||||||
}
|
//}
|
||||||
#[test]
|
//#[test]
|
||||||
fn minimax_pruning_test() {
|
//fn minimax_pruning_test() {
|
||||||
let time = Instant::now();
|
// let time = Instant::now();
|
||||||
let mut board = Board::default();
|
// let mut board = Board::default();
|
||||||
let mut disk = Disk::P2;
|
// let mut disk = Disk::P2;
|
||||||
let _depth = 5;
|
// let _depth = 5;
|
||||||
let _turn1 = board.play(
|
// let _turn1 = board.play(
|
||||||
disk,
|
// disk,
|
||||||
minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
||||||
);
|
// );
|
||||||
dbg!(&board.columns);
|
// dbg!(&board.columns);
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn2 = board.play(
|
// let _turn2 = board.play(
|
||||||
disk,
|
// disk,
|
||||||
minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
||||||
);
|
// );
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn3 = board.play(
|
// let _turn3 = board.play(
|
||||||
disk,
|
// disk,
|
||||||
minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
||||||
);
|
// );
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn4 = board.play(
|
// let _turn4 = board.play(
|
||||||
disk,
|
// disk,
|
||||||
minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
||||||
);
|
// );
|
||||||
disk = flip_disk(disk);
|
// disk = flip_disk(disk);
|
||||||
let _turn5 = board.play(
|
// let _turn5 = board.play(
|
||||||
disk,
|
// disk,
|
||||||
minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
// minimax_decision_pruning(&board, disk, &5).last_move as usize,
|
||||||
);
|
// );
|
||||||
for column in board.columns.as_rows() {
|
// for column in board.columns.as_rows() {
|
||||||
column
|
// column
|
||||||
.iter()
|
// .iter()
|
||||||
.map(|x| {
|
// .map(|x| {
|
||||||
print!("{:#?},", x);
|
// print!("{:#?},", x);
|
||||||
x
|
// x
|
||||||
})
|
// })
|
||||||
.count();
|
// .count();
|
||||||
println!();
|
// println!();
|
||||||
}
|
// }
|
||||||
dbg!(time.elapsed().as_millis());
|
// dbg!(time.elapsed().as_millis());
|
||||||
assert!(false);
|
// assert!(false);
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -222,25 +222,6 @@ fn heur_scan(
|
|||||||
//Tests because I am making everything public
|
//Tests because I am making everything public
|
||||||
//TODO separate module here
|
//TODO separate module here
|
||||||
#[test]
|
#[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() {
|
fn win_test_flipping() {
|
||||||
let mut board = Board::default();
|
let mut board = Board::default();
|
||||||
board.play(Disk::P2, 3);
|
board.play(Disk::P2, 3);
|
||||||
@@ -256,12 +237,3 @@ fn win_test_flipping() {
|
|||||||
dbg!(&sequences);
|
dbg!(&sequences);
|
||||||
assert_eq!(POT_WIN, potential_wins(&sequences, &Disk::P2));
|
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));
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -88,32 +88,37 @@ pub fn scan(
|
|||||||
None => break,
|
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)];
|
// board[(2,3)];
|
||||||
pub fn get_legal_moves(
|
pub fn get_legal_moves(
|
||||||
(row, col): &(usize, usize),
|
(row, col): &(usize, usize),
|
||||||
(nrow, ncol): (usize, usize),
|
(nrow, ncol): (usize, usize),
|
||||||
) -> Vec<Direction> {
|
) -> Vec<Direction> {
|
||||||
let _max_col = ncol - 1;
|
let max_col = ncol - 1;
|
||||||
let _max_row = nrow - 1;
|
let max_row = nrow - 1;
|
||||||
let mut moves: Vec<Direction> = vec![];
|
let mut moves: Vec<Direction> = vec![];
|
||||||
match *row {
|
if *row > 0 && *row < max_row {
|
||||||
0 => moves.push(Direction::Up),
|
//dbg!(row, max_row);
|
||||||
_max_rows => moves.push(Direction::Down),
|
moves.push(Direction::Up);
|
||||||
_ => {
|
moves.push(Direction::Down);
|
||||||
moves.push(Direction::Up);
|
} else if *row == 0 {
|
||||||
moves.push(Direction::Down);
|
moves.push(Direction::Up);
|
||||||
}
|
} else if *row == max_row {
|
||||||
};
|
moves.push(Direction::Down);
|
||||||
match *col {
|
}
|
||||||
0 => moves.push(Direction::Right),
|
if (*col > 0 && *col < max_col) {
|
||||||
_max_col => moves.push(Direction::Left),
|
moves.push(Direction::Left);
|
||||||
_ => {
|
moves.push(Direction::Right);
|
||||||
moves.push(Direction::Left);
|
} else if *col == 0 {
|
||||||
moves.push(Direction::Right)
|
moves.push(Direction::Right);
|
||||||
}
|
} else if *col == max_col {
|
||||||
};
|
moves.push(Direction::Left);
|
||||||
|
}
|
||||||
|
|
||||||
if moves.contains(&Direction::Up) && moves.contains(&Direction::Left) {
|
if moves.contains(&Direction::Up) && moves.contains(&Direction::Left) {
|
||||||
moves.push(Direction::UpLeft);
|
moves.push(Direction::UpLeft);
|
||||||
}
|
}
|
||||||
@@ -128,6 +133,20 @@ pub fn get_legal_moves(
|
|||||||
}
|
}
|
||||||
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)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum Direction {
|
pub enum Direction {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ const BOARDSTART: (i32, i32) = (0, 0);
|
|||||||
fn main() {
|
fn main() {
|
||||||
let (mut rl, thread) = raylib::init()
|
let (mut rl, thread) = raylib::init()
|
||||||
.size(WIDTH, HEIGHT)
|
.size(WIDTH, HEIGHT)
|
||||||
.title("Hello, World")
|
.title("Connect 4 Game (bad)")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
//images
|
//images
|
||||||
@@ -101,7 +101,7 @@ fn main() {
|
|||||||
Disk::P2 => Color::YELLOW,
|
Disk::P2 => Color::YELLOW,
|
||||||
Disk::EMPTY => Color::WHITE,
|
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);
|
d.clear_background(Color::WHITE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user