things
This commit is contained in:
@@ -8,18 +8,24 @@ pub struct ComplexAgent {
|
||||
color: Piece,
|
||||
}
|
||||
|
||||
fn problem_space(board: &Board, piece: Piece) -> Vec<(usize, usize, (Board, usize))> {
|
||||
(0..BOARD_SIZE)
|
||||
.flat_map(|i| {
|
||||
(0..BOARD_SIZE)
|
||||
.map(|j| (i, j))
|
||||
.collect::<Vec<(usize, usize)>>()
|
||||
})
|
||||
.flat_map(|(i, j)| board.what_if(i, j, piece).map(|x| (i, j, x)))
|
||||
.map(|(i, j, (board, c))| (i, j, (board, c as usize)))
|
||||
.collect()
|
||||
}
|
||||
|
||||
impl Agent for ComplexAgent {
|
||||
fn next_move(&mut self, board: &Board) -> Option<(usize, usize)> {
|
||||
(0..BOARD_SIZE)
|
||||
.flat_map(|i| {
|
||||
(0..BOARD_SIZE)
|
||||
.map(|j| (i, j))
|
||||
.collect::<Vec<(usize, usize)>>()
|
||||
})
|
||||
.map(|(i, j)| (i, j, board.move_would_propegate(i, j, self.color)))
|
||||
.filter(|&(_, _, c)| c >= 0) // a `c` value of less than 0 implies the move is invalid: TODO! make this an enum or smth
|
||||
.max_by_key(|&(_, _, c)| c)
|
||||
.map(|(i, j, _)| (i, j)) // remove `c` and return the best move
|
||||
problem_space(board, self.color)
|
||||
.iter()
|
||||
.max_by_key(|(_, _, (_, c))| c)
|
||||
.map(|&(i, j, (_, _))| (i, j))
|
||||
}
|
||||
|
||||
fn name(&self) -> &'static str {
|
||||
|
||||
Reference in New Issue
Block a user