move tracking # pieces into Simul
This commit is contained in:
parent
e62270cd42
commit
a76f03687a
|
@ -96,19 +96,20 @@ fn simulation(
|
||||||
previews: config.game.rules.previews,
|
previews: config.game.rules.previews,
|
||||||
};
|
};
|
||||||
let mut sim = sim::Simul::new(seed, sim_opts);
|
let mut sim = sim::Simul::new(seed, sim_opts);
|
||||||
let mut pieces = 0;
|
|
||||||
|
|
||||||
let time_start = std::time::Instant::now();
|
let time_start = std::time::Instant::now();
|
||||||
|
|
||||||
while sim.lines_left() > 0 {
|
while sim.lines_left() > 0 {
|
||||||
// TODO: progress bar
|
// TODO: progress bar
|
||||||
if !io.quiet {
|
if !io.quiet {
|
||||||
eprintln!("#{}, {} left", pieces, sim.lines_left());
|
eprintln!("#{}, {} left", sim.pieces(), sim.lines_left());
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut bot = bot::Bot::new(
|
let mut bot = bot::Bot::new(
|
||||||
sim.matrix(),
|
sim.matrix(),
|
||||||
mino::Queue::new(sim.queue().hold(), sim.queue().next()),
|
mino::Queue::new(sim.queue().hold(), sim.queue().next()),
|
||||||
);
|
);
|
||||||
|
|
||||||
for i in 0..config.bot.iters {
|
for i in 0..config.bot.iters {
|
||||||
bot.think();
|
bot.think();
|
||||||
if i % 1000 == 999 {
|
if i % 1000 == 999 {
|
||||||
|
@ -118,7 +119,6 @@ fn simulation(
|
||||||
|
|
||||||
if let Some(placement) = bot.suggest() {
|
if let Some(placement) = bot.suggest() {
|
||||||
sim.play(placement);
|
sim.play(placement);
|
||||||
pieces += 1;
|
|
||||||
|
|
||||||
if let Some(moves) = moves.as_mut() {
|
if let Some(moves) = moves.as_mut() {
|
||||||
moves.push(output::Move { placement })
|
moves.push(output::Move { placement })
|
||||||
|
@ -127,6 +127,7 @@ fn simulation(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let time_end = std::time::Instant::now();
|
let time_end = std::time::Instant::now();
|
||||||
|
|
||||||
let profile = data.profile.then(|| output::Profile {
|
let profile = data.profile.then(|| output::Profile {
|
||||||
|
@ -136,7 +137,7 @@ fn simulation(
|
||||||
output::Output {
|
output::Output {
|
||||||
seed,
|
seed,
|
||||||
cleared: config.game.goal - sim.lines_left(),
|
cleared: config.game.goal - sim.lines_left(),
|
||||||
pieces,
|
pieces: sim.pieces(),
|
||||||
config: config.game,
|
config: config.game,
|
||||||
moves,
|
moves,
|
||||||
profile,
|
profile,
|
||||||
|
|
|
@ -21,6 +21,7 @@ pub struct Simul {
|
||||||
queue: Queue,
|
queue: Queue,
|
||||||
garbage: Garbage,
|
garbage: Garbage,
|
||||||
matrix: MatBuf,
|
matrix: MatBuf,
|
||||||
|
pieces: usize,
|
||||||
lines_left: usize,
|
lines_left: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +41,7 @@ impl Simul {
|
||||||
queue,
|
queue,
|
||||||
garbage,
|
garbage,
|
||||||
matrix,
|
matrix,
|
||||||
|
pieces: 0,
|
||||||
lines_left: options.goal,
|
lines_left: options.goal,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,8 +50,10 @@ impl Simul {
|
||||||
/// and garbage lines.
|
/// and garbage lines.
|
||||||
pub fn play(&mut self, piece: Piece) {
|
pub fn play(&mut self, piece: Piece) {
|
||||||
// play piece
|
// play piece
|
||||||
|
self.pieces += 1;
|
||||||
self.queue.remove(piece.ty);
|
self.queue.remove(piece.ty);
|
||||||
piece.cells().fill(&mut self.matrix);
|
piece.cells().fill(&mut self.matrix);
|
||||||
|
|
||||||
// process line clears
|
// process line clears
|
||||||
let c = self.matrix.clear_lines();
|
let c = self.matrix.clear_lines();
|
||||||
self.lines_left -= self.garbage.clear(c.start);
|
self.lines_left -= self.garbage.clear(c.start);
|
||||||
|
@ -64,6 +68,10 @@ impl Simul {
|
||||||
&self.queue
|
&self.queue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn pieces(&self) -> usize {
|
||||||
|
self.pieces
|
||||||
|
}
|
||||||
|
|
||||||
pub fn lines_left(&self) -> usize {
|
pub fn lines_left(&self) -> usize {
|
||||||
self.lines_left
|
self.lines_left
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue