Expand description
lifers is an advanced cellular automata creation framework.
It consists of the following parts:
- Engine: Logic and algorithms behing the automata;
- API: An interface for creating and interacting with created automata;
- Frontend(-s): External interfaces that allow to represent simulation data in a different way (graphical, ASCII, etc.).
§Examples
This is how one can implement Conway’s Game of Life with lifers:
// Use a 100x100 grid
use lifers::prelude::*;
use rand::random;
let mut game = generic::Automaton::build((100, 100))
// Initialize all cells with random states (alive or dead)
.init(|_| random::<bool>())
// Count neighbors in radius of 1 for each cell
.map(|(x, y), _, cells| generic::count_neighbors(cells, (x, y), 1, |b| *b))
// Change cells' state depending on the number of neighbors
.run(|_, is_alive, neighbors_n| match is_alive {
true => (2..=3).contains(neighbors_n),
false => *neighbors_n == 3,
});
// Compute the next generation
game.step();Modules§
- engine
- Automata engine components.
- frontend
- Frontend specification and helper traits and functions
- prelude
- Helper module with all common imports
Macros§
- grid_
map - Takes an iterator over a
Grid<T>. Maps the given function (f: fn((usize, usize), T) -> L) on each cell in the grid. Expands to a nested iterator overf’s return type. - impl_
builder_ misc