You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.0 KiB
C
77 lines
2.0 KiB
C
#include "lib.h"
|
|
|
|
static int actual_tile_size, actual_grid_height, actual_grid_width;
|
|
static bool was_init = false;
|
|
|
|
static SDL_Window * window;
|
|
static SDL_Surface * win_surface;
|
|
static SDL_Surface * grid_sfc;
|
|
|
|
void init(void) {
|
|
if (was_init) {
|
|
fprintf(stderr, "Cannot re-initialize.\n");
|
|
abort(); // Life is tough, you do not deserve to handle this.
|
|
// Actually, crashing is the better behaviour in this case…
|
|
}
|
|
was_init = true;
|
|
actual_tile_size = TILE_SIZE;
|
|
actual_grid_height = GRID_HEIGHT;
|
|
actual_grid_width = GRID_WIDTH;
|
|
|
|
if (SDL_Init( SDL_INIT_VIDEO ) < 0) {
|
|
fprintf(stderr, "SDL_Init error: %s\n", SDL_GetError());
|
|
abort();
|
|
}
|
|
|
|
grid = malloc(actual_grid_width * sizeof(color_t *));
|
|
for (int i = 0; i < actual_grid_width; i++) {
|
|
grid[i] = malloc(actual_grid_height * sizeof(color_t));
|
|
for (int j = 0; j < actual_grid_height; j++) grid[i][j] = (color_t) {0,0,0};
|
|
}
|
|
|
|
// TODO: Maybe add margins?
|
|
int winh = actual_tile_size * actual_grid_height;
|
|
int winw = actual_tile_size * actual_grid_width;
|
|
window = SDL_CreateWindow("Snake?", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, winw, winh, SDL_WINDOW_SHOWN);
|
|
if (window == NULL) {
|
|
fprintf(stderr, "Window broken: %s\n", SDL_GetError());
|
|
abort();
|
|
}
|
|
win_surface = SDL_GetWindowSurface(window);
|
|
|
|
grid_sfc = SDL_CreateRGBSurface(0, winw, winh, 24, 0,0,0,0);
|
|
|
|
// Ensure something is shown.
|
|
redraw();
|
|
}
|
|
|
|
void redraw(void) {
|
|
for (int x = 0; x < actual_grid_width; x++) {
|
|
for (int y = 0; y < actual_grid_height; y++) {
|
|
color_t c = grid[x][y];
|
|
uint32_t color = (c.r << 24) + (c.g << 16) + (c.b << 8) + 0xFF /* alpha */;
|
|
SDL_Rect rect = {.x = x * actual_tile_size, .y = y * actual_tile_size,
|
|
.h = actual_tile_size, .w = actual_tile_size};
|
|
SDL_FillRect(grid_sfc, &rect, color);
|
|
}
|
|
}
|
|
}
|
|
|
|
char ** getkeys(int count) {
|
|
|
|
}
|
|
|
|
/* The simple stuff */
|
|
void grid_set(int x, int y, color_t c) {
|
|
// FIXME: bounds checks!
|
|
grid[x][y] = c;
|
|
}
|
|
|
|
color_t grid_get(int x, int y) {
|
|
return grid[x][y];
|
|
}
|
|
|
|
void wait(int msec) {
|
|
SDL_Delay(msec);
|
|
}
|