]> wirehaze git hosting - lifeboot.git/commitdiff

wirehaze git hosting

add logic
authorphfr24 <phfr24@inf.ufpr.br>
Sun, 26 Oct 2025 01:36:48 +0000 (22:36 -0300)
committerphfr24 <phfr24@inf.ufpr.br>
Sun, 26 Oct 2025 01:36:48 +0000 (22:36 -0300)
prototype.c

index 405654e5741109820dc367ecc75be18917c47dc6..5c6f052c91c37438d619d201c035459eb466cd19 100644 (file)
@@ -1,5 +1,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
 #include <time.h>
 
 #define COLS 80
 #include <time.h>
 
 #define COLS 80
@@ -27,7 +29,7 @@ static void print_grid(char grid[COLS * ROWS]) {
 }
 
 static void init_grid(char grid[COLS * ROWS]) {
 }
 
 static void init_grid(char grid[COLS * ROWS]) {
-  for (int i = 0; i < ROWS * COLS; i++) {
+  for (int i = 0; i < COLS * ROWS; i++) {
     if (rand() % INIT_RATIO)
       grid[i] = DEAD;
     else
     if (rand() % INIT_RATIO)
       grid[i] = DEAD;
     else
@@ -35,14 +37,64 @@ static void init_grid(char grid[COLS * ROWS]) {
   }
 }
 
   }
 }
 
+static char get_state(char grid[COLS * ROWS], int idx) {
+  if (idx < 0 || idx >= COLS * ROWS)
+    return DEAD;
+
+  return grid[idx];
+}
+
+static int alive_neighbours(char grid[COLS * ROWS], int idx) {
+  int neighbours = 0;
+
+  for (int i = -1; i <= 1; i++) /* row */
+    for (int j = -1; j <= 1; j++) /* col */
+      if (get_state(grid, idx + i * COLS + j) == ALIVE)
+        neighbours++;
+
+  if (get_state(grid, idx) == ALIVE)
+    neighbours--;
+
+  return neighbours;
+}
+
+static char next_state(char grid[COLS * ROWS], int idx) {
+  int n = alive_neighbours(grid, idx);
+
+  if (get_state(grid, idx) == ALIVE) {
+    if (n < 2 || n > 3)
+      return DEAD;
+
+    return ALIVE;
+  }
+
+  if (n == 3)
+    return ALIVE;
+
+  return DEAD;
+}
+
+static void update_grid(char grid[COLS * ROWS]) {
+  char new[COLS * ROWS];
+
+  for (int i = 0; i < COLS * ROWS; i++)
+    new[i] = next_state(grid, i);
+
+  memcpy(grid, new, COLS * ROWS);
+}
+
 int main () {
   char grid[COLS * ROWS];
 
   srand(time(0));
   init_grid(grid);
 
 int main () {
   char grid[COLS * ROWS];
 
   srand(time(0));
   init_grid(grid);
 
-  clearscr();
-  print_grid(grid);
+  for (;;) {
+    clearscr();
+    print_grid(grid);
+    update_grid(grid);
+    getchar();
+  }
 
   return 0;
 }
 
   return 0;
 }