life-backend

GitHub crates.io Docs.rs CI Status Docs Status

A backend implementation of Conway's Game of Life.

This library provides several functionalities for simulating Life-like cellular automata, including Conway's Game of Life.

The following operations are supported:

It does not provide frontend functionality for viewing or editing patterns through a user interface.

Examples

The following code example demonstrates how to create a new game from a pattern file, advance the game and print its final state:

```rust use lifebackend::format; use lifebackend::{Board, Game, Position};

// Read a pattern file let handler = format::open("patterns/glider.rle")?;

// Create a new game (the type parameter is i16) let rule = handler.rule(); let board = handler .livecells() .map(Position::tryfrom) .collect::, _>>()?; let mut game = Game::new(rule, board);

// Advance the generation let generation = 4; for _ in 0..generation { game.advance(); }

// Print the last state let bbox = game.board().bounding_box(); let population = game.board().iter().count(); println!("Generation {generation}: bounding-box = {bbox}, population = {population}"); println!("{game}"); ```

examples/game.rs is a simple Game of Life program. It creates a new game from a pattern file, advances the game and prints its state to the standard output. You can run this program like as:

```shell $ cargo run --example game -- --generation=1 patterns/glider.rle ... Generation 0: bounding-box = (x:[0, 2], y:[0, 2]), population = 5 .O. ..O OOO

Generation 1: bounding-box = (x:[0, 2], y:[1, 3]), population = 5 O.O .OO .O. ```

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.