#include "SDL2/SDL.h" //Write a function that moves an image based on which arrow keys are pressed. //something like //functionize, everything //void move_image(direction, image); /* start SDL and create a window */ int init(); /* load the media durr */ int loadMedia(); /* Free the surfaces and whatnot */ void close_game(); /* Our main window */ SDL_Window* gScreen; /*screen dimensions*/ const int screen_width = 1024; const int screen_height = 768; /* Our renderer */ SDL_Renderer* gRenderer; /* Surface for loading BMP */ SDL_Surface* gTemp; /* Texture for background */ SDL_Texture* gBackground_texture; /* Texture for characters */ SDL_Texture* gPlayer; /* Player coors */ SDL_Rect gPlayer_dest = { 0 }; int main ( int argc, char *argv[] ) { /* How fast our player moves */ int movement_speed = 1; if (init() == 1) { printf("init failed!\n"); close_game(); return 1; } if (loadMedia() == 1) { printf("loadMedia failed!\n"); close_game(); return 1; } /*Event handler */ SDL_Event e; /* quit if gameover is not 0 */ int gameover = 0; /* message pump */ while (!gameover) { /*handle events on queue */ while ( SDL_PollEvent( &e ) != 0) { if (e.type == SDL_QUIT) { gameover = 1; } } const Uint8* currentKeyStates = SDL_GetKeyboardState( NULL ); if (currentKeyStates[ SDL_SCANCODE_ESCAPE ] || currentKeyStates[ SDL_SCANCODE_Q ] ) { gameover = 1; } if (currentKeyStates[ SDL_SCANCODE_LEFT ] ) { gPlayer_dest.x -= movement_speed; } if (currentKeyStates[ SDL_SCANCODE_RIGHT ] ) { gPlayer_dest.x += movement_speed; } if (currentKeyStates[ SDL_SCANCODE_UP ] ) { gPlayer_dest.y -= movement_speed; } if (currentKeyStates[ SDL_SCANCODE_DOWN ] ) { gPlayer_dest.y += movement_speed; } /* render the background */ SDL_RenderCopy(gRenderer, gBackground_texture, NULL, NULL); /* Render entire gPlayer to center of screen */ SDL_RenderCopy(gRenderer, gPlayer, NULL, &gPlayer_dest); /* Render here */ SDL_RenderPresent(gRenderer); } return 0; } int init() { /* initialize SDL */ if (SDL_Init(SDL_INIT_EVERYTHING) != 0){ printf("Unable to init SDL!: %s\n", SDL_GetError()); return 1; } /* create window of size 640x480 and set title bar*/ gScreen = SDL_CreateWindow("SDL TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, screen_width, screen_height, 0); if (gScreen == NULL){ printf("Unable to set video mode: %s\n", SDL_GetError()); return 1; } return 0; } int loadMedia() { const char background_imagefile[] = "sdl_logo.bmp"; gRenderer = SDL_CreateRenderer(gScreen, -1, 0); if (gRenderer == NULL){ printf("Unable to create renderer: %s\n", SDL_GetError()); } /* load background bitmap to surface */ gTemp = SDL_LoadBMP(background_imagefile); if (gTemp == NULL){ printf("Unable to find image!!: %s\n", SDL_GetError()); return 1; } else{ /* convert bitmap to texture */ gBackground_texture = SDL_CreateTextureFromSurface(gRenderer, gTemp); SDL_FreeSurface(gTemp); // No longer need the surface gTemp = NULL; if(gBackground_texture == NULL) { printf("Failed to create texture from background surface: %s\n", SDL_GetError()); return 1; } } /* load gPlayer image to practice blit on top of surface*/ gTemp = SDL_LoadBMP("dinowheel.bmp"); if (gTemp == NULL){ printf("Unable to load gPlayer: %s/n", SDL_GetError()); return 1; } else{ gPlayer = SDL_CreateTextureFromSurface(gRenderer, gTemp); SDL_FreeSurface(gTemp); gTemp = NULL; if(gPlayer == NULL) { printf("Failed to create texture from gPlayer: %s\n", SDL_GetError()); return 1; } } int player_image_width, player_image_height; /* Get height and width of gPlayer */ SDL_QueryTexture(gPlayer, NULL, NULL, &player_image_width, &player_image_height); /* Prepare gPlayer for inital position */ gPlayer_dest.x = (screen_width / 2) - (player_image_width / 2); gPlayer_dest.y = (screen_width / 2) - (player_image_height / 2); gPlayer_dest.w = player_image_width; gPlayer_dest.h = player_image_height; return 0; } void close_game() { /* cleanup SDL */ if (gRenderer) SDL_DestroyRenderer(gRenderer); if (gScreen) SDL_DestroyWindow(gScreen); if (gBackground_texture) SDL_DestroyTexture(gBackground_texture); if (gPlayer) SDL_DestroyTexture(gPlayer); SDL_Quit(); }