Awful game idea
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
build
|
||||||
|
.vscode
|
||||||
@@ -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)
|
||||||
+138
@@ -0,0 +1,138 @@
|
|||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include <SDL2/SDL_image.h>
|
||||||
|
#include <SDL2/SDL_timer.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user