summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/main.c128
1 files changed, 84 insertions, 44 deletions
diff --git a/sources/main.c b/sources/main.c
index 7d19cf1..136feac 100644
--- a/sources/main.c
+++ b/sources/main.c
@@ -2,37 +2,76 @@
#include <stdlib.h>
#include <time.h>
#include <string.h>
+#include <stdio.h>
+
+typedef struct {
+ int width;
+ int height;
+ int **data;
+} State;
+
+void initializeState(State *state) {
+ state->data = malloc(state->height * sizeof (int *));
+ for (int i=0; i < state->height; i++) {
+ int *row = malloc(state->width * sizeof (int));
+ for (int j=0; j < state->width; j++) {
+ row[j] = 0;
+ }
+ state->data[i] = row;
+ }
+}
+
+void copyState(State *dest, State *src) {
+ for(int i=0; i<dest->height; i++) {
+ int *destRow = dest->data[i];
+ int *srcRow = src->data[i];
+ memcpy(destRow, srcRow, dest->width * sizeof(int));
+ }
+}
+
+void freeStateData(State *state) {
+ for (int i=0; i < state->height; i++) {
+ free(state->data[i]);
+ }
+ free(state->data);
+}
+
+void printState(State *state) {
+ for (int i=0; i<state->height; i++) {
+ for (int j=0; j<state->width; j++) {
+ printf("%d ", state->data[i][j]);
+ }
+ printf("\n");
+ }
+}
int main(void)
{
const int pixSize = 5;
const int padding = 2;
- const int dim = 80;
+ const int height = 80;
+ const int width = 100;
const int space = pixSize + (2 * padding);
- const int winSize = space * dim;
+ const int winHeight = space * height;
+ const int winWidth = space * width;
- bool (*currState)[dim];
- bool (*nextState)[dim];
- currState = malloc(dim * dim * sizeof(bool));
- nextState = malloc(dim * dim * sizeof(bool));
+ State currState = {.height = height, .width = width};
+ initializeState(&currState);
+ State nextState = {.height = height, .width = width};
+ initializeState(&nextState);
srand(time(NULL));
int prob = 30;
- for (int i=0; i<dim; i++) {
- for (int j=0; j<dim; j++) {
- currState[i][j] = false;
- nextState[i][j] = false;
+ for (int i=0; i<height; i++) {
+ for (int j=0; j<width; j++) {
if (rand() % 100 < prob) {
- currState[i][j] = true;
- nextState[i][j] = true;
- } else {
- currState[i][j] = false;
- nextState[i][j] = false;
+ currState.data[i][j] = true;
+ nextState.data[i][j] = true;
}
}
}
- InitWindow(winSize, winSize, "Kontol");
+ InitWindow(winWidth, winHeight, "Keren");
SetTargetFPS(10);
bool isRunning = true;
@@ -44,19 +83,20 @@ int main(void)
isRunning = !isRunning;
ClearBackground(BLACK);
- int nearestI = GetMouseX() / space;
- int nearestJ = GetMouseY() / space;
+ int nearestI = GetMouseY() / space;
+ int nearestJ = GetMouseX() / space;
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT))
- currState[nearestI][nearestJ] = true;
+ currState.data[nearestI][nearestJ] = true;
if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT))
- currState[nearestI][nearestJ] = false;
+ currState.data[nearestI][nearestJ] = false;
- 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);
+ for (int i=0; i<height; i++) {
+ for (int j=0; j<width; j++) {
+ printf("drawing row %d col %d\n", i, j);
+ Color pixColor = GRAY;
+ if (currState.data[i][j]) pixColor = WHITE;
+ DrawRectangle(j * space, i * space, pixSize, pixSize, pixColor);
if (isRunning) {
int n1 = 0;
@@ -68,42 +108,42 @@ int main(void)
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];
+ n1 = currState.data[i - 1][j - 1];
+ n2 = currState.data[i - 1][j];
+ n4 = currState.data[i][j - 1];
}
- if (i > 0 && j < dim-1) {
- n3 = currState[i - 1][j + 1];
+ if (i > 0 && j < width-1) {
+ n3 = currState.data[i - 1][j + 1];
}
- if (i < dim-1 && j < dim-1) {
- n5 = currState[i][j + 1];
- n7 = currState[i + 1][j];
+ if (i < height-1 && j < width-1) {
+ n5 = currState.data[i][j + 1];
+ n7 = currState.data[i + 1][j];
}
- if (i < dim-1 && j > 0) {
- n6 = currState[i + 1][j - 1];
+ if (i < height-1 && j > 0) {
+ n6 = currState.data[i + 1][j - 1];
}
- if (i < dim-1 && j < dim-1) {
- n8 = currState[i + 1][j + 1];
+ if (i < height-1 && j < width-1) {
+ n8 = currState.data[i + 1][j + 1];
}
int total = n1 + n2 + n3 + n4 + n5 + n6 + n7 + n8;
- if (total < 2 && currState[i][j]) nextState[i][j] = false;
- if (total > 3 && currState[i][j]) nextState[i][j] = false;
- if ((total == 2 || total == 3) && currState[i][j]) nextState[i][j] = true;
- if (total == 3 && !currState[i][j]) nextState[i][j] = true;
+ if (total < 2 && currState.data[i][j]) nextState.data[i][j] = false;
+ if (total > 3 && currState.data[i][j]) nextState.data[i][j] = false;
+ if ((total == 2 || total == 3) && currState.data[i][j]) nextState.data[i][j] = true;
+ if (total == 3 && !currState.data[i][j]) nextState.data[i][j] = true;
}
}
}
if (isRunning) {
- memcpy(currState, nextState, dim * dim * sizeof(bool));
+ copyState(&currState, &nextState);
}
EndDrawing();
}
- free(currState);
- free(nextState);
+ freeStateData(&currState);
+ freeStateData(&nextState);
CloseWindow();