aboutsummaryrefslogtreecommitdiff
path: root/drunkard.c
diff options
context:
space:
mode:
authorJacob Janzen <jacob.a.s.janzen@gmail.com>2024-02-11 21:55:35 -0600
committerJacob Janzen <jacob.a.s.janzen@gmail.com>2024-02-11 21:55:35 -0600
commit063f4f854b1274d306c75f5737cccccfc51d8b52 (patch)
tree295ccf71be140ea373aef649ce355f33e81b7b42 /drunkard.c
testing stuff
Diffstat (limited to 'drunkard.c')
-rw-r--r--drunkard.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/drunkard.c b/drunkard.c
new file mode 100644
index 0000000..2427249
--- /dev/null
+++ b/drunkard.c
@@ -0,0 +1,77 @@
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#define HEIGHT 50
+#define WIDTH 50
+#define MAX_STEPS 50
+#define NUM_WALKERS 100
+
+enum direction {
+ UP,
+ LEFT,
+ RIGHT,
+ DOWN,
+ NUM_DIRS,
+};
+
+struct point {
+ int x;
+ int y;
+};
+
+int main(void)
+{
+ bool map[HEIGHT][WIDTH];
+ for (int i = 0; i < HEIGHT; ++i) {
+ for (int j = 0; j < WIDTH; ++j) {
+ map[i][j] = false;
+ }
+ }
+
+ int start_x = WIDTH / 2;
+ int start_y = HEIGHT / 2;
+
+ int open_tiles = 1;
+ struct point open[HEIGHT * WIDTH];
+ struct point p = {.x = start_x, .y = start_y};
+ open[0] = p;
+
+ srand(time(NULL));
+
+ for (int i = 0; i < NUM_WALKERS; ++i) {
+ struct point curr_point = open[rand() % open_tiles];
+ int x_pos = curr_point.x;
+ int y_pos = curr_point.y;
+
+ for (int j = 0; j < MAX_STEPS && x_pos < WIDTH && x_pos >= 0 &&
+ y_pos < HEIGHT && y_pos >= 0;
+ ++j) {
+ if (!map[y_pos][x_pos]) {
+ map[y_pos][x_pos] = true;
+ struct point p = {.x = x_pos, .y = y_pos};
+ open[open_tiles++] = p;
+ }
+ enum direction dir = rand() % NUM_DIRS;
+ switch (dir) {
+ case UP : --y_pos; break;
+ case LEFT : --x_pos; break;
+ case RIGHT : ++x_pos; break;
+ case DOWN : ++y_pos; break;
+ default : exit(EXIT_FAILURE); // should not occur
+ }
+ }
+ }
+
+ for (int i = 0; i < HEIGHT; ++i) {
+ for (int j = 0; j < WIDTH; ++j) {
+ if (map[i][j]) {
+ printf("#");
+ } else {
+ printf(".");
+ }
+ }
+ printf("\n");
+ }
+}