From f11a7722e1da347865164e693ee96b734e18ad50 Mon Sep 17 00:00:00 2001 From: xamidev Date: Thu, 16 Jan 2025 18:25:45 +0100 Subject: [PATCH] add plant --- src/cells.c | 23 +++++++++++++++++++++++ src/cells.h | 1 + src/utils.c | 1 + 3 files changed, 25 insertions(+) diff --git a/src/cells.c b/src/cells.c index afde208..e12d2b1 100644 --- a/src/cells.c +++ b/src/cells.c @@ -40,6 +40,7 @@ void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) { switch(grid[i][j]) { + /* Cell drawing colors */ case VOID: DrawRectangle(CELL_SIZE_PIXELS*j, CELL_SIZE_PIXELS*i, CELL_SIZE_PIXELS, CELL_SIZE_PIXELS, BLACK); break; @@ -55,6 +56,9 @@ void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) case VIRUS: DrawRectangle(CELL_SIZE_PIXELS*j, CELL_SIZE_PIXELS*i, CELL_SIZE_PIXELS, CELL_SIZE_PIXELS, VIOLET); break; + case PLANT: + DrawRectangle(CELL_SIZE_PIXELS*j, CELL_SIZE_PIXELS*i, CELL_SIZE_PIXELS, CELL_SIZE_PIXELS, DARKGREEN); + break; default: break; } @@ -93,6 +97,7 @@ void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) { for (int i = CELL_AMOUNT - 1; i >= 0; i--) { for (int j = 0; j < CELL_AMOUNT; j++) { switch (grid[i][j]) { + /* Cell type behavior */ case VOID: break; case SAND: @@ -146,6 +151,24 @@ void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) { if (propagate) grid[i][j-1] = VIRUS; } break; + case PLANT: + if (i+1 < CELL_AMOUNT && grid[i+1][j] == WATER) { + int grow = rand() % 600 == 0 ? 1 : 0; + if (grow) grid[i+1][j] = PLANT; + } + if (i-1 >= 0 && grid[i-1][j] == WATER) { + int grow = rand() % 20 == 0 ? 1 : 0; + if (grow) grid[i-1][j] = PLANT; + } + if (j+1 < CELL_AMOUNT && grid[i][j+1] == WATER) { + int grow = rand() % 600 == 0 ? 1 : 0; + if (grow) grid[i][j+1] = PLANT; + } + if (j-1 >= 0 && grid[i][j-1] == WATER) { + int grow = rand() % 600 == 0 ? 1 : 0; + if (grow) grid[i][j-1] = PLANT; + } + break; default: break; } diff --git a/src/cells.h b/src/cells.h index 2eb863f..9e68b53 100644 --- a/src/cells.h +++ b/src/cells.h @@ -54,6 +54,7 @@ typedef enum CellType STONE, WATER, VIRUS, + PLANT, CELL_TYPE_MAX } CellType; diff --git a/src/utils.c b/src/utils.c index b1233bd..c2eb187 100644 --- a/src/utils.c +++ b/src/utils.c @@ -57,6 +57,7 @@ char* enumToString(CellType brush) case STONE: return "Stone"; case WATER: return "Water"; case VIRUS: return "Virus"; + case PLANT: return "Plant"; default: return "Unknown"; } }