- [FIX] Mentre està en linea blanca no ha de pintar
- Ja pinta els sectors, i amb el color corresponent
This commit is contained in:
60
main.c
60
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)
|
||||
|
||||
Reference in New Issue
Block a user