diff options
Diffstat (limited to 'sources/main.c')
-rw-r--r-- | sources/main.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/sources/main.c b/sources/main.c new file mode 100644 index 0000000..a84e253 --- /dev/null +++ b/sources/main.c @@ -0,0 +1,96 @@ +#include "raylib.h" +#include <stdlib.h> +#include <time.h> + +int main(void) +{ + const int pixSize = 5; + const int padding = 2; + const int dim = 80; + const int space = pixSize + (2 * padding); + const int winSize = space * dim; + + bool (*currState)[dim]; + bool (*nextState)[dim]; + currState = malloc(dim * dim * sizeof(bool)); + nextState = malloc(dim * dim * sizeof(bool)); + + srand(time(NULL)); + int prob = 30; + for (int i=0; i<dim; i++) { + for (int j=0; j<dim; j++) { + if (rand() % 100 < prob) { + currState[i][j] = true; + nextState[i][j] = true; + } else { + currState[i][j] = false; + nextState[i][j] = false; + } + } + } + + InitWindow(winSize, winSize, "Kontol"); + SetTargetFPS(1); + + while (!WindowShouldClose()) + { + BeginDrawing(); + + ClearBackground(BLACK); + + + for (int i=0; i<dim; i++) { + for (int j=0; j<dim; j++) { + Color pixColor = BLACK; + if (currState[i][j]) pixColor = WHITE; + DrawRectangle(i * space, j * space, pixSize, pixSize, pixColor); + + int n1 = 0; + int n2 = 0; + int n3 = 0; + int n4 = 0; + int n5 = 0; + int n6 = 0; + int n7 = 0; + int n8 = 0; + if (i > 0 && j > 0) { + n1 = currState[i - 1][j - 1]; + n2 = currState[i - 1][j]; + n4 = currState[i][j - 1]; + } + if (i > 0 && j < dim-1) { + n3 = currState[i - 1][j + 1]; + } + if (i < dim-1 && j < dim-1) { + n5 = currState[i][j + 1]; + n7 = currState[i + 1][j]; + } + if (i < dim-1 && j > 0) { + n6 = currState[i + 1][j - 1]; + } + if (i < dim-1 && j < dim-1) { + n8 = currState[i + 1][j + 1]; + } + + int total = n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8; + if (total < 2) nextState[i][j] = 0; + if (total > 3) nextState[i][j] = 0; + if ((total == 2 || total == 3) && currState[i][j]) nextState[i][j] = false; + if (total == 3 && !currState[i][j]) nextState[i][j] = true; + } + } + + bool (*temp)[dim] = currState; + currState = nextState; + nextState = temp; + + EndDrawing(); + } + + free(currState); + free(nextState); + + CloseWindow(); + + return 0; +} |