diff --git a/src/cells.c b/src/cells.c index f79b29a..afde208 100644 --- a/src/cells.c +++ b/src/cells.c @@ -52,6 +52,9 @@ void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) case WATER: DrawRectangle(CELL_SIZE_PIXELS*j, CELL_SIZE_PIXELS*i, CELL_SIZE_PIXELS, CELL_SIZE_PIXELS, BLUE); break; + case VIRUS: + DrawRectangle(CELL_SIZE_PIXELS*j, CELL_SIZE_PIXELS*i, CELL_SIZE_PIXELS, CELL_SIZE_PIXELS, VIOLET); + break; default: break; } @@ -125,6 +128,24 @@ void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) { } } break; + case VIRUS: /* It should not be too powerful. */ + if (i + 1 < CELL_AMOUNT && grid[i+1][j] != VOID && grid[i+1][j] != VIRUS) { + int propagate = rand() % 10 == 0 ? 1 : 0; + if (propagate) grid[i+1][j] = VIRUS; + } + else if (i - 1 >= 0 && grid[i-1][j] != VOID && grid[i-1][j] != VIRUS) { + int propagate = rand() % 10 == 0 ? 1 : 0; + if (propagate) grid[i-1][j] = VIRUS; + } + else if (j+1 < CELL_AMOUNT && grid[i][j+1] != VOID && grid[i][j+1] != VIRUS) { + int propagate = rand() % 10 == 0 ? 1 : 0; + if (propagate) grid[i][j+1] = VIRUS; + } + else if (j-1 >= 0 && grid[i][j-1] != VOID && grid[i][j-1] != VIRUS) { + int propagate = rand() % 10 == 0 ? 1 : 0; + if (propagate) grid[i][j-1] = VIRUS; + } + break; default: break; } diff --git a/src/cells.h b/src/cells.h index fd65401..2eb863f 100644 --- a/src/cells.h +++ b/src/cells.h @@ -53,6 +53,7 @@ typedef enum CellType SAND, STONE, WATER, + VIRUS, CELL_TYPE_MAX } CellType; diff --git a/src/utils.c b/src/utils.c index 012d38a..b1233bd 100644 --- a/src/utils.c +++ b/src/utils.c @@ -56,6 +56,7 @@ char* enumToString(CellType brush) case SAND: return "Sand"; case STONE: return "Stone"; case WATER: return "Water"; + case VIRUS: return "Virus"; default: return "Unknown"; } }