commit 3f296b4a25d1c7ffc16818cd7a53c4285004a98f Author: Marc Date: Fri Jan 20 19:02:40 2023 +0100 Awful game idea diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5acb669 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..ba38075 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.10) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +if(CMAKE_BUILD_TYPE MATCHES DEBUG) + add_link_options(-fsanitize=address) +endif() + +set(CMAKE_C_FLAGS "-Wall -Wextra -pedantic -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmaybe-uninitialized") +set(CMAKE_C_FLAGS_DEBUG "-g -Werror -O0") +set(CMAKE_C_FLAGS_RELEASE "") + +# generate the compile_commands for vscode / clang +set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") + +# set the project name +project(FLOPPE_FION) + + +set(SRC + src/main.c +) + +# add the executable +add_executable(FLOPPE_FION ${SRC}) + +target_link_libraries(FLOPPE_FION SDL2 SDL_image) + +set_property(TARGET FLOPPE_FION PROPERTY C_STANDARD 23) diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..bfc6d5a --- /dev/null +++ b/src/main.c @@ -0,0 +1,138 @@ +#include +#include +#include + +int main(int argc, char *argv[]) +{ + + // returns zero on success else non-zero + if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { + printf("error initializing SDL: %s\n", SDL_GetError()); + } + SDL_Window* win = SDL_CreateWindow("GAME", // creates a window + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + 1000, 1000, 0); + + // triggers the program that controls + // your graphics hardware and sets flags + Uint32 render_flags = SDL_RENDERER_ACCELERATED; + + // creates a renderer to render our images + SDL_Renderer* rend = SDL_CreateRenderer(win, -1, render_flags); + + // creates a surface to load an image into the main memory + SDL_Surface* surface; + + // please provide a path for your image + surface = IMG_Load("path"); + + // loads image to our graphics hardware memory. + SDL_Texture* tex = SDL_CreateTextureFromSurface(rend, surface); + + // clears main-memory + SDL_FreeSurface(surface); + + // let us control our image position + // so that we can move it with our keyboard. + SDL_Rect dest; + + // connects our texture with dest to control position + SDL_QueryTexture(tex, NULL, NULL, &dest.w, &dest.h); + + // adjust height and width of our image box. + dest.w /= 6; + dest.h /= 6; + + // sets initial x-position of object + dest.x = (1000 - dest.w) / 2; + + // sets initial y-position of object + dest.y = (1000 - dest.h) / 2; + + // controls animation loop + int close = 0; + + // speed of box + int speed = 300; + + // animation loop + while (!close) { + SDL_Event event; + + // Events management + while (SDL_PollEvent(&event)) { + switch (event.type) { + + case SDL_QUIT: + // handling of close button + close = 1; + break; + + case SDL_KEYDOWN: + // keyboard API for key pressed + switch (event.key.keysym.scancode) { + case SDL_SCANCODE_W: + case SDL_SCANCODE_UP: + dest.y -= speed / 30; + break; + case SDL_SCANCODE_A: + case SDL_SCANCODE_LEFT: + dest.x -= speed / 30; + break; + case SDL_SCANCODE_S: + case SDL_SCANCODE_DOWN: + dest.y += speed / 30; + break; + case SDL_SCANCODE_D: + case SDL_SCANCODE_RIGHT: + dest.x += speed / 30; + break; + default: + break; + } + } + } + + // right boundary + if (dest.x + dest.w > 1000) + dest.x = 1000 - dest.w; + + // left boundary + if (dest.x < 0) + dest.x = 0; + + // bottom boundary + if (dest.y + dest.h > 1000) + dest.y = 1000 - dest.h; + + // upper boundary + if (dest.y < 0) + dest.y = 0; + + // clears the screen + SDL_RenderClear(rend); + SDL_RenderCopy(rend, tex, NULL, &dest); + + // triggers the double buffers + // for multiple rendering + SDL_RenderPresent(rend); + + // calculates to 60 fps + SDL_Delay(1000 / 60); + } + + // destroy texture + SDL_DestroyTexture(tex); + + // destroy renderer + SDL_DestroyRenderer(rend); + + // destroy window + SDL_DestroyWindow(win); + + // close SDL + SDL_Quit(); + + return 0; +}