Add reset button and glider and pulsar on ctrl and shift click

This commit is contained in:
2025-02-24 11:45:23 +01:00
parent f68977a557
commit 922a7d3160
3 changed files with 118 additions and 1 deletions

View File

@@ -165,6 +165,110 @@ impl Universe {
let idx = self.get_index(row, col);
self.cells[idx].toggle();
}
pub fn kill_all(&mut self) {
self.cells.iter_mut().for_each(|cell| *cell = Cell::Dead);
}
pub fn glider(&mut self, row: u32, col: u32) {
let glider_grid = [
Cell::Dead,
Cell::Dead,
Cell::Alive,
Cell::Alive,
Cell::Dead,
Cell::Alive,
Cell::Dead,
Cell::Alive,
Cell::Alive,
];
let glider_positions = [
(row - 1, col - 1),
(row, col - 1),
(row + 1, col - 1),
(row - 1, col),
(row, col - 1),
(row + 1, col),
(row - 1, col + 1),
(row, col + 1),
(row + 1, col + 1),
];
glider_grid
.iter()
.zip(glider_positions)
.for_each(|(state, (row, col))| {
let idx = self.get_index(row, col);
self.cells[idx] = *state;
});
}
pub fn pulsar(&mut self, row: u32, col: u32) {
let pulsar_grid = [
Cell::Alive,
Cell::Alive,
Cell::Alive,
Cell::Dead,
Cell::Dead,
Cell::Dead,
Cell::Alive,
Cell::Alive,
Cell::Alive,
Cell::Alive,
Cell::Dead,
Cell::Alive,
Cell::Dead,
Cell::Dead,
Cell::Dead,
Cell::Alive,
Cell::Dead,
Cell::Alive,
Cell::Alive,
Cell::Alive,
Cell::Alive,
Cell::Dead,
Cell::Dead,
Cell::Dead,
Cell::Alive,
Cell::Alive,
Cell::Alive,
];
let pulsar_positions = [
(row - 4, col - 1),
(row - 3, col - 1),
(row - 2, col - 1),
(row - 1, col - 1),
(row, col - 1),
(row + 1, col - 1),
(row + 2, col - 1),
(row + 3, col - 1),
(row + 4, col - 1),
(row - 4, col),
(row - 3, col),
(row - 2, col),
(row - 1, col),
(row, col),
(row + 1, col),
(row + 2, col),
(row + 3, col),
(row + 4, col),
(row - 4, col + 1),
(row - 3, col + 1),
(row - 2, col + 1),
(row - 1, col + 1),
(row, col + 1),
(row + 1, col + 1),
(row + 2, col + 1),
(row + 3, col + 1),
(row + 4, col + 1),
];
pulsar_grid
.iter()
.zip(pulsar_positions)
.for_each(|(state, (row, col))| {
let idx = self.get_index(row, col);
self.cells[idx] = *state;
});
}
}
impl Universe {