From c5e722fabcd69bdaeb67929d65d3d63039514d82 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Wed, 22 Nov 2023 16:18:08 +0100 Subject: [PATCH] =?UTF-8?q?-=20[FIX]=20Mentre=20est=C3=A0=20en=20linea=20b?= =?UTF-8?q?lanca=20no=20ha=20de=20pintar=20-=20Ja=20pinta=20els=20sectors,?= =?UTF-8?q?=20i=20amb=20el=20color=20corresponent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index 9452461..56806cc 100644 --- a/main.c +++ b/main.c @@ -30,6 +30,9 @@ int player_y = 198; int mode = MODE_NORMAL; int lento = 0; +int last_x = 100; +int last_y = 198; + void set_color(int color) { switch (color) { @@ -56,6 +59,9 @@ void draw_player() 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; SDL_SetRenderTarget(ren, tex); 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); } +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() { SDL_SetRenderTarget(ren, tex); @@ -82,6 +117,17 @@ void close_sector() pixels[x+y*200]=COLOR_WHITE; 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); } @@ -148,24 +194,32 @@ int main(int argc, char *argv[]) else if (pixels[player_x+(player_y-2)*200]==0) lento=1; 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) put_pix(); else if (pixels[player_x+2+player_y*200]==0) lento=1; 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) put_pix(); else if (pixels[player_x+(player_y+2)*200]==0) lento=1; 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) put_pix(); else if (pixels[player_x-2+player_y*200]==0) lento=1; mode = MODE_CREANT; player_x--; put_pix(); player_x--; + + } if (mode==MODE_CREANT)