https://github.com/manishmeganathan/automata
A 2D Simulator in Rust for cellular automata such as Conway's Game of Life and Langton's Ant among others. Powered by the ggez framework.
https://github.com/manishmeganathan/automata
cellular-automaton conways-game-of-life ggez langtons-ant rust-lang simulation
Last synced: about 1 year ago
JSON representation
A 2D Simulator in Rust for cellular automata such as Conway's Game of Life and Langton's Ant among others. Powered by the ggez framework.
- Host: GitHub
- URL: https://github.com/manishmeganathan/automata
- Owner: manishmeganathan
- License: mit
- Created: 2021-07-21T07:18:14.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-07-30T16:56:59.000Z (almost 5 years ago)
- Last Synced: 2025-02-02T08:26:47.331Z (over 1 year ago)
- Topics: cellular-automaton, conways-game-of-life, ggez, langtons-ant, rust-lang, simulation
- Language: Rust
- Homepage:
- Size: 94.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# automata
### A 2D Simulator in Rust for cellular automata such as Conway's Game of Life and Langton's Ant among others. Powered by the ggez framework.
## Disclaimer
This project is still under development and not all features are functional. Contributions towards expanding features and improving performance are welcome.
## Installation
### From Release
1. Download the latest release for the target platform.
2. Add the path to the binary to the system PATH environment variable.
3. Application can be invoked using ``automata`` in the shell.
### From Source
1. Install Git, Rust and Cargo on target system.
2. Clone this repository & change directory into it.
```
git clone https://github.com/manishmeganathan/automata.git
cd automata
```
3. Build the project
```
cargo build --release
```
4. Application can be run using ``cargo run ..`` or the built binary can be invoked directly.
## Usage
The Simulator currently support two automata. **Conway's Game of Life** and **Langton's Ant**. The simulator can be configured with flags that adjust the grid dimension, individual cell dimensions, simulation FPS, etc.
### Example
Run the following to start the **Conway's Game Of Life** automata.
```
automata gameoflife
```
Run the following to start **Langton's Ant** with a grid of 1000x1000 pixels
```
automata langtonsant --grid 1000x1000
```
Supported flags include
- **--grid [-g]** Set dimensions of the grid. Takes the format ``widthXheight``.
- **--cell [-c]** Set the cell size of the grid. Takes an int that represents the size of the cell
- **--fps [-f]** Set the simulation fps.
Currently supported automata
- **Conway's Game Of Life** - ``gameoflife``
- **Langton's Ant** - ``langtonsant``
## Project Structure
### Simulation
This module implements the event handler and simulable trait definitions.
- ``SimCell`` represents a trait implemented by cell structs that can be simulated.
- ``SimGrid`` represents a trait implemented by grid structs that can be simulated.
- ``Automaton`` represents a trait implemented by any automaton that can be simulated.
- ``Simulation`` represents a struct that contains the simulation runtime handlers.
### Commons
This module implements common tools used on different automata such as different types of cells, grids and turmites.
- ``BinaryCell`` represents a cell state enum for cells that are either on or off.
- ``CellGrid`` represents a grid of square cells.
- ``GridCell`` represents an arbitrary cell on a grid.
- ``GridScanner`` represents an iterator that scans over the entire grid.
- ``Orient`` represents a trait implemented by directional structures.
- ``Direction4`` represents a enum that has variation for different cardinal directions.
- ``Turmite`` represents a turmite on a grid that crawl/travel around.
Notes:
- All Cells implement the ``SimCell`` trait.
- All Grids implement the ``SimGrid`` trait.
- Future grid implementations can include hexagonal and octagonal grids which will use 6 directional and 8 directional orientations.
### GameOfLife
This module implements a struct of the same name generic over different types of grids.
- Currently the initial state of the automata is a randomly generated balance grid. Future implementation can include states such as Gosper's Glider Gun.
- Currently only implemented for square grids.
### LangtonsAnt
This module implements a struct of the same name generic over different types of grids.
- Currently the inital state of the automata is an empty grid. Future implementations can include randomized grids.
- Currently only implemented for square grids.
- Currently only supports 1 randomly placed ant. Future implementations can support predetermined ant positions and multiple ants.