aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorkartofen <mladenovnasko0@gmail.com>2022-10-29 13:18:45 +0300
committerkartofen <mladenovnasko0@gmail.com>2022-10-29 13:18:45 +0300
commit87818848122ac94995e359a8db3a0ed9a9173d42 (patch)
treecc86f6b34f0d9a6f64b963c6ef8d1252f1e61db9 /src/main.c
implementedHEADmaster
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..90de051
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,90 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <time.h>
+
+#include "set.h"
+
+#ifndef PLATFORM_WEB
+ #include <raylib.h>
+#else
+ #include RAYLIB_SRC
+#endif
+
+#define W 800
+#define H 600
+
+#define NODES_X 20
+#define NODES_Y 15
+#define NODE_L 40
+
+set *nodes[NODES_X][NODES_Y];
+bool walls_hori[NODES_X][NODES_Y-1] = {0}; // false - exists
+bool walls_vert[NODES_X-1][NODES_Y] = {0}; // true - doesnt exist
+
+void init_nodes()
+{
+ for(int i = 0; i < NODES_Y; i++)
+ for(int j = 0; j < NODES_X; j++)
+ nodes[j][i] = set_create();
+}
+
+void deinit_nodes()
+{
+ for(int i = 0; i < NODES_Y; i++)
+ for(int j = 0; j < NODES_X; j++)
+ set_free(nodes[j][i]);
+}
+
+void update()
+{
+ // optimize picking random number thingy
+ if(rand() % 2) {
+ int x = rand() % NODES_X;
+ int y = rand() % (NODES_Y-1);
+
+ if(set_find(nodes[x][y]) != set_find(nodes[x][y+1])) {
+ walls_hori[x][y] = true;
+ set_union(nodes[x][y], nodes[x][y+1]);
+ }
+ } else {
+ int x = rand() % (NODES_X-1);
+ int y = rand() % NODES_Y;
+
+ if(set_find(nodes[x][y]) != set_find(nodes[x+1][y])) {
+ walls_vert[x][y] = true;
+ set_union(nodes[x][y], nodes[x+1][y]);
+ }
+ }
+
+ for(int i = 0; i < NODES_Y; i++) {
+ for(int j = 0; j < NODES_X; j++) {
+ if(i < NODES_Y-1) if(!walls_hori[j][i])
+ DrawLine((j+0)*NODE_L, (i+1)*NODE_L, (j+1)*NODE_L, (i+1)*NODE_L, RED);
+
+ if(j < NODES_X-1) if(!walls_vert[j][i])
+ DrawLine((j+1)*NODE_L, (i+0)*NODE_L, (j+1)*NODE_L, (i+1)*NODE_L, RED);
+
+ }
+ }
+}
+
+int main(void)
+{
+ srand(time(NULL));
+ InitWindow(W, H, "Kruskal");
+ SetTargetFPS(60);
+ init_nodes();
+
+ while(!WindowShouldClose())
+ {
+ BeginDrawing();
+ ClearBackground(RAYWHITE);
+ DrawFPS(10, 10);
+ update();
+ EndDrawing();
+ }
+
+ deinit_nodes();
+ return 0;
+}