An open API service indexing awesome lists of open source software.

https://github.com/jerr-it/cellmaker

Multi-threaded library for cellular automata
https://github.com/jerr-it/cellmaker

c c-language cellular-automata cellular-automaton conways-game-of-life hacktoberfest

Last synced: 6 months ago
JSON representation

Multi-threaded library for cellular automata

Awesome Lists containing this project

README

          

Cellmaker






Library for simulation of cellular automata, like Conways Game of Life






How to use

Compile:
```
make
./main

or

gcc -o automaton main.c CellularAutomata/CellularAutomaton.h CellularAutomata/CellularAutomaton.c
./automaton
```

Visit main.c for complete file example.

Include:
```c
#include "CellularAutomata/CellularAutomaton.h"
```

Define your rules:
```c
//At what neighbor count will a cell survive the current iteration?
unsigned int survive[] = { 2, 3 };
size_t sSize = sizeof(survive) / sizeof(unsigned int);

//At what neighbor count will a cell get revived in the current iteration?
unsigned int revive[] = { 3 };
size_t rSize = sizeof(revive) / sizeof(unsigned int);
```

Create from array:
```c
bool arr[] =
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
CellularAutomaton autom = newAutomatonFromArray(arr, survive, sSize, revive, rSize, 10, 10);
```

Keep in mind that this wraps around the edges, meaning that e.g. cells at the right edge neighbor the cells on the left edge.

Initialize randomly:
```c
srand(time(NULL));
//0.4 means the area will be alive by 40%
CellularAutomaton autom = newAutomaton(survive, sSize, revive, rSize, 0.4, 20, 20);
```

Run steps:
```c
for (int i = 0; i < 40; i++)
{
print(autom);
tick(autom);
printf("\n");
}
```

Print will print the automaton onto the console. However you can render it however you like by accessing the automatons buffer directly. It's a linear array of bools. Retrieve it by using:;

```c
bool* usedBuffer = currentBuffer(autom);
```

Free memory:
```c
freeAutomaton(autom);
```