Expand description

Conway’s Game of Life but customized.

This is a small and simple crate. The crate is meant to mimic Conway’s Game of Life but with customization. You can edit the rules using the play or play_for by providing your own closure. Also, the Cells (squares/pixels) are 8-bit RGB values, which means you can make a colored game of life.

Note that this crate only provides functionality for 2D matrix manipulation designed for Game of Life. It does not provide functionality for drawing the game.

Examples

This is how you would use the normal rules of Conway’s Game of Life. First, we create a life defining how big it is and which cells are alive and/or which color they are. (You can define them as RGB instead by replacing ALIVE or DEAD with Cell {r: 255, g: 255, b: 255 }.) Then we use the play_for method to apply our closure 2 times.

const ALIVE: Cell = Cell::alive();
const DEAD: Cell = Cell::dead();
 
fn main() {
    let mut life = Life::from([
        [ALIVE, DEAD,  ALIVE],
        [DEAD,  ALIVE, DEAD],
        [ALIVE, DEAD,  ALIVE],
    ]);

    life.play_for(2, |same, others, _, _| {
        let alive = others.alive();

        if alive < 2 {
            DEAD
        }
        else if alive == 2 {
            same
        }
        else if alive == 3 {
            ALIVE
        }
        else {
            DEAD
        }
    });
}

Structs

The square/pixel type used for Life.

2D array of Cells.

Traits

Convenience trait for [Cell; 8].