#include <stdio.h>
#include <stdbool.h>
#include <SDL.h>
static SDL_Surface* bmp = NULL;
static SDL_Surface* screen = NULL;
static SDL_Window* window = NULL;
static SDL_Surface* surface = NULL;
enum KeyPressSurfaces {
KEY_PRESS_SURFACE_DEFAULT,
KEY_PRESS_SURFACE_UP,
KEY_PRESS_SURFACE_DOWN,
KEY_PRESS_SURFACE_TOTAL
};
static SDL_Surface* keypress[KEY_PRESS_SURFACE_TOTAL];
bool init() {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL_Init Error: %s\n", SDL_GetError());
return false;
}
else {
window = SDL_CreateWindow("SDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
800, 600, SDL_WINDOW_SHOWN);
if (window == NULL) {
printf("SDL_CreateWindow Error: %s\n", SDL_GetError());
return false;
}
else {
screen = SDL_GetWindowSurface(window);
}
}
return true;
}
SDL_Surface* loadBMP(char path[]) {
SDL_Surface* bmp = SDL_LoadBMP(path);
if (bmp == NULL) {
printf("loadBMP Error: %s\n", SDL_GetError());
}
return bmp;
}
bool loadSurface() {
keypress[KEY_PRESS_SURFACE_DEFAULT] = loadBMP("assets/RAY.BMP");
if (keypress[KEY_PRESS_SURFACE_DEFAULT] == NULL) {
printf("loadSurface Error: %s\n", SDL_GetError());
return false;
}
keypress[KEY_PRESS_SURFACE_UP] = loadBMP("assets/LAND.BMP");
if (keypress[KEY_PRESS_SURFACE_UP] == NULL) {
printf("loadSurface Error: %s\n", SDL_GetError());
return false;
}
keypress[KEY_PRESS_SURFACE_DOWN] = loadBMP("assets/MARBLES.BMP");
if (keypress[KEY_PRESS_SURFACE_DOWN] == NULL) {
printf("loadSurface Error: %s\n", SDL_GetError());
return false;
}
return true;
}
void close() {
for (int i = 0; i < KEY_PRESS_SURFACE_TOTAL; i++) {
SDL_FreeSurface(keypress[i]);
keypress[i] = NULL;
}
SDL_DestroyWindow(window);
window = NULL;
SDL_Quit();
}
int main(int argc, char* argv[]) {
if (!init()) {
printf("init error\n");
}
else {
if (!loadSurface()) {
printf("Failed to load BMP!\n");
}
else {
surface = keypress[KEY_PRESS_SURFACE_DEFAULT];
SDL_Event event;
bool quit = false;
while (quit == false) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
quit = true;
}
else if (event.type = SDL_KEYDOWN) {
switch (event.key.keysym.sym) {
case SDLK_UP:
surface = keypress[KEY_PRESS_SURFACE_UP];
break;
case SDLK_DOWN:
surface = keypress[KEY_PRESS_SURFACE_DOWN];
break;
default:
surface = keypress[KEY_PRESS_SURFACE_DEFAULT];
break;
}
}
}
SDL_BlitSurface(surface, NULL, screen, NULL);
SDL_UpdateWindowSurface(window);
}
}
}
close();
return 0;
}