more mediocre water?

This commit is contained in:
2025-01-15 11:02:30 +01:00
parent 9eafb1dad4
commit 4f2731f327
3 changed files with 59 additions and 40 deletions

View File

@@ -30,6 +30,7 @@
#include <stdio.h> #include <stdio.h>
#include "cells.h" #include "cells.h"
#include "raylib.h" #include "raylib.h"
#include <stdlib.h>
void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
{ {
@@ -58,66 +59,62 @@ void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
} }
} }
void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush) void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush, int brushSize)
{ {
if (grid[posX][posY] == VOID) if (grid[posX][posY] == VOID)
{ {
grid[posX][posY] = brush; for (int i=0; i<brushSize; i++)
{
for (int j=0; j<brushSize; j++)
{
if (posX+i < CELL_AMOUNT && posY+j < CELL_AMOUNT) {
grid[posX+i][posY+j] = brush;
}
}
}
} else if (brush == VOID) } else if (brush == VOID)
{ {
grid[posX][posY] = VOID; grid[posX][posY] = VOID;
} }
} }
void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) {
{ for (int i = CELL_AMOUNT - 1; i >= 0; i--) {
for (int i=CELL_AMOUNT-1; i>=0; i--) for (int j = 0; j < CELL_AMOUNT; j++) {
{ switch (grid[i][j]) {
for (int j=0; j<CELL_AMOUNT; j++)
{
switch (grid[i][j])
{
case VOID: case VOID:
break; break;
case SAND: case SAND:
if (i+1 < CELL_AMOUNT && grid[i+1][j] == VOID) { if (i + 1 < CELL_AMOUNT && grid[i + 1][j] == VOID) {
grid[i][j] = VOID; grid[i][j] = VOID;
grid[i+1][j] = SAND; // falling downwards grid[i + 1][j] = SAND;
} else if (i+1 < CELL_AMOUNT && j+1 < CELL_AMOUNT && grid[i+1][j+1] == VOID) { } else if (i + 1 < CELL_AMOUNT && j + 1 < CELL_AMOUNT && grid[i + 1][j + 1] == VOID) {
grid[i][j] = VOID; grid[i][j] = VOID;
grid[i+1][j+1] = SAND; // falling down-right grid[i + 1][j + 1] = SAND;
} } else if (i + 1 < CELL_AMOUNT && j - 1 >= 0 && grid[i + 1][j - 1] == VOID) {
else if (i+1 < CELL_AMOUNT && j-1 >= 0 && grid[i+1][j-1] == VOID) {
grid[i][j] = VOID; grid[i][j] = VOID;
grid[i+1][j-1] = SAND; // falling down-left grid[i + 1][j - 1] = SAND;
} /* Sand falling thru diagonally placed stone: it's not a bug, it's a FEATURE! lol */ } else if (i + 1 < CELL_AMOUNT && grid[i + 1][j] == WATER) {
else if (i+1 < CELL_AMOUNT && grid[i+1][j] == WATER) {
grid[i][j] = WATER; grid[i][j] = WATER;
grid[i+1][j] = SAND; grid[i + 1][j] = SAND;
} }
break; break;
case WATER: case WATER:
if (i+1 < CELL_AMOUNT && grid[i+1][j] == VOID) { if (i + 1 < CELL_AMOUNT && grid[i + 1][j] == VOID) {
grid[i][j] = VOID; grid[i][j] = VOID;
grid[i+1][j] = WATER; grid[i + 1][j] = WATER;
} else if (i+1 < CELL_AMOUNT && j+1 < CELL_AMOUNT && grid[i+1][j+1] == VOID) { } else if (i + 1 < CELL_AMOUNT && j + 1 < CELL_AMOUNT && grid[i + 1][j + 1] == VOID) {
grid[i][j] = VOID; grid[i][j] = VOID;
grid[i+1][j+1] = WATER; grid[i + 1][j + 1] = WATER;
} else if (i+1 < CELL_AMOUNT && j-1 >= 0 && grid[i+1][j-1] == VOID) { } else if (i + 1 < CELL_AMOUNT && j - 1 >= 0 && grid[i + 1][j - 1] == VOID) {
grid[i][j] = VOID; grid[i][j] = VOID;
grid[i+1][j-1] = WATER; grid[i + 1][j - 1] = WATER;
} else if (j+1 < CELL_AMOUNT && grid[i][j+1] == VOID) { } else {
grid[i][j] = VOID; int direction = rand() % 2 == 0 ? -1 : 1;
grid[i][j+1] = WATER; if (j + direction >= 0 && j + direction < CELL_AMOUNT && grid[i][j + direction] == VOID) {
} else if (j-1 >= 0 && grid[i][j-1] == VOID) { grid[i][j] = VOID;
grid[i][j] = VOID; grid[i][j + direction] = WATER;
grid[i][j-1] = WATER; }
} else if (j+1 < CELL_AMOUNT && grid[i][j+1] == WATER) {
grid[i][j] = WATER;
grid[i][j+1] = WATER;
} else if (j-1 >= 0 && grid[i][j-1] == WATER) {
grid[i][j] = WATER;
grid[i][j-1] = WATER;
} }
break; break;
default: default:
@@ -126,3 +123,14 @@ void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
} }
} }
} }
void clearGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
{
for (size_t i=0; i<CELL_AMOUNT; i++)
{
for (size_t j=0; j<CELL_AMOUNT; j++)
{
grid[i][j] = VOID;
}
}
}

View File

@@ -55,7 +55,8 @@ typedef enum CellType
} CellType; } CellType;
void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]); void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]);
void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush); void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush, int brushSize);
void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]); void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]);
void clearGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]);
#endif // CELLS_H #endif // CELLS_H

View File

@@ -48,6 +48,7 @@ int main ()
int grid[CELL_AMOUNT][CELL_AMOUNT] = {0}; int grid[CELL_AMOUNT][CELL_AMOUNT] = {0};
GameScreen currentScreen = TITLE; GameScreen currentScreen = TITLE;
CellType brush = SAND; CellType brush = SAND;
int brushSize = 1;
initEnv(); initEnv();
@@ -68,7 +69,7 @@ int main ()
Vector2 cellPosition = GetMousePosition(); Vector2 cellPosition = GetMousePosition();
int i = cellPosition.y/CELL_SIZE_PIXELS; int i = cellPosition.y/CELL_SIZE_PIXELS;
int j = cellPosition.x/CELL_SIZE_PIXELS; int j = cellPosition.x/CELL_SIZE_PIXELS;
putCell(grid, i, j, brush); putCell(grid, i, j, brush, brushSize);
} }
if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) { if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) {
// spawn some text corresponding to Brush Type, fading // spawn some text corresponding to Brush Type, fading
@@ -80,6 +81,15 @@ int main ()
} }
printf("Brush changed for %d\n", brush); printf("Brush changed for %d\n", brush);
} }
if (IsKeyPressed(KEY_UP)) {
brushSize++;
}
if (IsKeyPressed(KEY_DOWN) && brushSize > 1) {
brushSize--;
}
if (IsKeyPressed(KEY_C)) {
clearGrid(grid);
}
break; break;
default: default:
break; break;