- [FIX] Mentre està en linea blanca no ha de pintar

- Ja pinta els sectors, i amb el color corresponent
This commit is contained in:
2023-11-22 16:18:08 +01:00
parent 4ae0000aaf
commit c5e722fabc

60
main.c
View File

@@ -30,6 +30,9 @@ int player_y = 198;
int mode = MODE_NORMAL; int mode = MODE_NORMAL;
int lento = 0; int lento = 0;
int last_x = 100;
int last_y = 198;
void set_color(int color) void set_color(int color)
{ {
switch (color) { switch (color) {
@@ -56,6 +59,9 @@ void draw_player()
void put_pix() void put_pix()
{ {
if (pixels[player_x+player_y*200]==COLOR_WHITE) return;
last_x = player_x; last_y = player_y;
pixels[player_x+player_y*200] = COLOR_DARKRED; pixels[player_x+player_y*200] = COLOR_DARKRED;
SDL_SetRenderTarget(ren, tex); SDL_SetRenderTarget(ren, tex);
if (lento) if (lento)
@@ -71,6 +77,35 @@ int any_black(int x, int y)
return (pixels[x+1+y*200]==0 || pixels[x-1+y*200]==0 || pixels[x+(y+1)*200]==0 || pixels[x+(y-1)*200]==0); return (pixels[x+1+y*200]==0 || pixels[x-1+y*200]==0 || pixels[x+(y+1)*200]==0 || pixels[x+(y-1)*200]==0);
} }
int get_sector_size(int x, int y, int size, int fill)
{
if (x>=0 && y>=0 && x<=198 && y<=198 && pixels[x+y*200]==0)
{
pixels[x+y*200]=fill;
size++;
size = get_sector_size(x-1, y, size, fill);
size = get_sector_size(x, y-1, size, fill);
size = get_sector_size(x+1, y, size, fill);
size = get_sector_size(x, y+1, size, fill);
}
return size;
}
void fill_sector(int fill)
{
const Uint8 color = lento ? COLOR_DARKRED : COLOR_DARKTEAL;
set_color(color);
for (int y=0;y<200;++y)
for (int x=0;x<200;++x)
if (pixels[x+y*200]>=254)
if (pixels[x+y*200]==fill) {
pixels[x+y*200]=color;
SDL_RenderDrawPoint(ren, x, y);
} else {
pixels[x+y*200]=0;
}
}
void close_sector() void close_sector()
{ {
SDL_SetRenderTarget(ren, tex); SDL_SetRenderTarget(ren, tex);
@@ -82,6 +117,17 @@ void close_sector()
pixels[x+y*200]=COLOR_WHITE; pixels[x+y*200]=COLOR_WHITE;
SDL_RenderDrawPoint(ren, x, y); SDL_RenderDrawPoint(ren, x, y);
} }
if (last_x==player_x) {
int sector1 = get_sector_size(player_x-1, last_y, 0, 254);
int sector2 = get_sector_size(player_x+1, last_y, 0, 255);
if (sector2>sector1) fill_sector(254); else fill_sector(255);
} else {
int sector1 = get_sector_size(last_x, player_y-1, 0, 254);
int sector2 = get_sector_size(last_x, player_y+1, 0, 255);
if (sector2>sector1) fill_sector(254); else fill_sector(255);
}
SDL_SetRenderTarget(ren, NULL); SDL_SetRenderTarget(ren, NULL);
} }
@@ -148,24 +194,32 @@ int main(int argc, char *argv[])
else if (pixels[player_x+(player_y-2)*200]==0) else if (pixels[player_x+(player_y-2)*200]==0)
lento=1; lento=1;
mode = MODE_CREANT; player_y--; put_pix(); player_y--; mode = MODE_CREANT; player_y--; put_pix(); player_y--;
} else if (keys[SDL_SCANCODE_RIGHT] && player_x<198 && ( mode==MODE_CREANT || keys[SDL_SCANCODE_SPACE] || pixels[player_x+2+player_y*200]==1)) {
} else if (keys[SDL_SCANCODE_RIGHT] && player_x<198 && ( ((mode==MODE_CREANT || keys[SDL_SCANCODE_SPACE])&&pixels[player_x+2+player_y*200]==0) || pixels[player_x+2+player_y*200]==1)) {
if (mode==MODE_CREANT) if (mode==MODE_CREANT)
put_pix(); put_pix();
else if (pixels[player_x+2+player_y*200]==0) else if (pixels[player_x+2+player_y*200]==0)
lento=1; lento=1;
mode = MODE_CREANT; player_x++; put_pix(); player_x++; mode = MODE_CREANT; player_x++; put_pix(); player_x++;
} else if (keys[SDL_SCANCODE_DOWN] && player_y<198 && ( mode==MODE_CREANT || keys[SDL_SCANCODE_SPACE] || pixels[player_x+(player_y+2)*200]==1)) {
} else if (keys[SDL_SCANCODE_DOWN] && player_y<198 && ( ((mode==MODE_CREANT || keys[SDL_SCANCODE_SPACE])&&pixels[player_x+(player_y+2)*200]==0) || pixels[player_x+(player_y+2)*200]==1)) {
if (mode==MODE_CREANT) if (mode==MODE_CREANT)
put_pix(); put_pix();
else if (pixels[player_x+(player_y+2)*200]==0) else if (pixels[player_x+(player_y+2)*200]==0)
lento=1; lento=1;
mode = MODE_CREANT; player_y++; put_pix(); player_y++; mode = MODE_CREANT; player_y++; put_pix(); player_y++;
} else if (keys[SDL_SCANCODE_LEFT] && player_x>0 && ( mode==MODE_CREANT || keys[SDL_SCANCODE_SPACE] || pixels[player_x-2+player_y*200]==1)) {
} else if (keys[SDL_SCANCODE_LEFT] && player_x>0 && ( ((mode==MODE_CREANT || keys[SDL_SCANCODE_SPACE])&&pixels[player_x-2+player_y*200]==0) || pixels[player_x-2+player_y*200]==1)) {
if (mode==MODE_CREANT) if (mode==MODE_CREANT)
put_pix(); put_pix();
else if (pixels[player_x-2+player_y*200]==0) else if (pixels[player_x-2+player_y*200]==0)
lento=1; lento=1;
mode = MODE_CREANT; player_x--; put_pix(); player_x--; mode = MODE_CREANT; player_x--; put_pix(); player_x--;
} }
if (mode==MODE_CREANT) if (mode==MODE_CREANT)