share rng thread
This commit is contained in:
parent
f18fedd5cc
commit
aab639c04d
@ -4,26 +4,27 @@ use crate::{
|
|||||||
misc::offsets,
|
misc::offsets,
|
||||||
piece::Piece,
|
piece::Piece,
|
||||||
};
|
};
|
||||||
use rand::seq::IteratorRandom;
|
use rand::{rngs::ThreadRng, seq::IteratorRandom};
|
||||||
|
|
||||||
pub struct ComplexAgent {
|
pub struct ComplexAgent {
|
||||||
color: Piece,
|
color: Piece,
|
||||||
|
rng: ThreadRng,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Agent for ComplexAgent {
|
impl Agent for ComplexAgent {
|
||||||
fn next_move(&mut self, board: &Board) -> Option<(usize, usize)> {
|
fn next_move(&mut self, board: &Board) -> Option<(usize, usize)> {
|
||||||
(0..BOARD_SIZE)
|
(0..BOARD_SIZE)
|
||||||
.zip(0..BOARD_SIZE)
|
.zip(0..BOARD_SIZE)
|
||||||
.filter(|&(i, j)| board.get(i, j) == &Some(!self.color()))
|
.filter(|&(i, j)| board.get(i, j) == &Some(!self.color))
|
||||||
.flat_map(|(i, j)| offsets(i, j, 1))
|
.flat_map(|(i, j)| offsets(i, j, 1))
|
||||||
.filter(|&(i, j)| i < BOARD_SIZE && j < BOARD_SIZE)
|
.filter(|&(i, j)| i < BOARD_SIZE && j < BOARD_SIZE)
|
||||||
.filter(|&(i, j)| board.get(i, j).is_none())
|
.filter(|&(i, j)| board.get(i, j).is_none())
|
||||||
.choose(&mut rand::rng())
|
.choose(&mut self.rng)
|
||||||
.or_else(|| {
|
.or_else(|| {
|
||||||
(0..BOARD_SIZE)
|
(0..BOARD_SIZE)
|
||||||
.zip(0..BOARD_SIZE)
|
.zip(0..BOARD_SIZE)
|
||||||
.filter(|&(i, j)| board.get(i, j).is_none())
|
.filter(|&(i, j)| board.get(i, j).is_none())
|
||||||
.choose(&mut rand::rng())
|
.choose(&mut self.rng)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,7 +38,10 @@ impl Agent for ComplexAgent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ComplexAgent {
|
impl ComplexAgent {
|
||||||
pub const fn new(color: Piece) -> Self {
|
pub fn new(color: Piece) -> Self {
|
||||||
Self { color }
|
Self {
|
||||||
|
color,
|
||||||
|
rng: rand::rng(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user