-
Notifications
You must be signed in to change notification settings - Fork 3
Example: Infinite background
Amine B. Hassouna edited this page Nov 17, 2022
·
1 revision
SDL_Color get_color(int i)
{
switch (i)
{
case 0:
return COLOR_WHITE;
case 1:
return COLOR_RED;
case 2:
return COLOR_BLUE;
default:
return COLOR_WHITE;
}
}
void draw_background(int window_x, int window_y, int window_w, int window_h,
int background[10][20], int backgroud_w, int backgroud_h,
int offcet_x, int offcet_y)
{
int x = window_x;
int bg_x = offcet_x;
while (x < window_w && bg_x < backgroud_w)
{
int y = window_y;
int bg_y = offcet_y;
while (y < window_h && bg_y < backgroud_h)
{
set_cell_color(x, y, get_color(background[bg_y][bg_x]));
y++;
bg_y++;
}
x++;
bg_x++;
}
}
void draw_infinite_background(int window_x, int window_y, int window_w,
int window_h, int background[10][20],
int backgroud_w, int backgroud_h, int offcet_x,
int offcet_y)
{
draw_background(window_x, window_y, window_w, window_h, background,
backgroud_w, backgroud_h, offcet_x, offcet_y);
if (offcet_x > backgroud_w - window_w)
{
draw_background(backgroud_w - offcet_x, window_y, window_w, window_h,
background, backgroud_w, backgroud_h, 0, offcet_y);
}
if (offcet_y > backgroud_h - window_h)
{
draw_background(window_x, backgroud_h - offcet_y, window_w, window_h,
background, backgroud_w, backgroud_h, offcet_x, 0);
}
}
void draw(int x_cells, int y_cells)
{
delay(1000);
const int backgroud_w = 20;
const int backgroud_h = 10;
const int background[10][20] =
{
{1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
{1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2},
{1, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
{1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
{1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2},
{1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2},
{1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
};
int offcet_x = 0;
while (true)
{
set_grid_color(COLOR_WHITE);
draw_infinite_background(0, 0, x_cells, y_cells, background, backgroud_w,
backgroud_h, offcet_x, 0);
offcet_x++;
if (offcet_x > backgroud_w - 1)
{
offcet_x = 0;
}
else if (offcet_x < 0)
{
offcet_x = backgroud_w + offcet_x;
}
delay(200);
}
}