lifers ------ A Rust crate that aims to generalize cellular automata creation. Current features include: - [x] Easy creation using the builder pattern - [x] Fast simulation engine - [x] Multiple versions for different use cases - [ ] SIMD potential - [ ] Very ergonomic design for creating simulations - [x] Full support for the builder pattern - [ ] Multiple data collection functions for an automaton - [x] Arbitrary types support for cells' state and associated data - [x] Interface to create custom frontends _(WIP)_ - [x] [ASCII frontend](https://crates.io/crates/lifers-ascii) - [x] [Raylib frontend](https://crates.io/crates/lifers-raylib) ## Usage An example illustrating Conway's Game of Life implementation in `lifers`: ```rust use lifers::prelude::*; use rand::random; fn main() { // Use generic automaton with a 100x100 grid let mut game = generic::Automaton::build((100, 100)) // Initialize all cells with random states (alive or dead) .init(|_| random::()) // 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(); } ```