summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Maciel <fabiomsdev@gmail.com>2020-05-30 22:05:06 +0200
committerJohnny Richard <johnny@johnnyrichard.com>2021-10-28 02:21:50 +0200
commitee1121ce969248d701fea7ffe79bc6f686610ce7 (patch)
tree07dba01b06ced49b17b88651c297a3f79b1ab1d9
Create simple red rect controlled by arrow keys
Signed-off-by: Fabio Maciel <fabiomsdev@gmail.com> Co-authored-by: Johnny Richard <johnny@johnnyrichard.com>
-rw-r--r--.gitignore2
-rw-r--r--Makefile20
-rw-r--r--README.md2
-rw-r--r--src/main.c106
4 files changed, 130 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f18d57b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.exe
+main
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5d398f2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,20 @@
+.PHONY: build clean run
+
+CFLAGS := -Wall
+
+ifeq ($(OS),Windows_NT)
+ CC := gcc
+ CFLAGS += -lmingw32 -lSDL2main -lSDL2 \
+ -IG:\dev\mingw\include\SDL2
+else
+ CFLAGS += -Wall $(shell pkg-config sdl2 --cflags --libs)
+endif
+
+build:
+ $(CC) src/main.c -o main $(CFLAGS)
+
+clean:
+ rm ./game;
+
+run:
+ ./game;
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0f4e4bc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2 @@
+Game
+====
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..022a888
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,106 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <SDL.h>
+
+const int SCREEN_WIDTH = 640;
+const int SCREEN_HEIGHT = 480;
+
+typedef struct Controller {
+ bool up;
+ bool down;
+ bool left;
+ bool right;
+} Controller;
+
+int
+main (int argc,
+ char *args[])
+{
+ SDL_Window* window = NULL;
+ SDL_Surface* screenSurface = NULL;
+
+ if (SDL_Init(SDL_INIT_VIDEO) < 0) {
+ fprintf(stderr, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
+ return EXIT_FAILURE;
+ }
+
+ window = SDL_CreateWindow(
+ "SDL Tutorial",
+ SDL_WINDOWPOS_UNDEFINED,
+ SDL_WINDOWPOS_UNDEFINED,
+ SCREEN_WIDTH, SCREEN_HEIGHT,
+ SDL_WINDOW_SHOWN
+ );
+
+ if (window == NULL) {
+ fprintf(stderr, "Window could not be created! SDL_Error: %s\n", SDL_GetError());
+ return EXIT_FAILURE;
+ }
+
+ SDL_Rect rect = { .x = 0, .y = 0, .w = 20, .h = 20 };
+
+ bool quit = false;
+ Controller controller = {0};
+
+ while (!quit) {
+ screenSurface = SDL_GetWindowSurface(window);
+ SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));
+
+ SDL_Event event;
+ while (SDL_PollEvent(&event) != 0) {
+ if (event.type == SDL_QUIT) {
+ quit = true;
+ }
+
+ if (event.type == SDL_KEYDOWN) {
+ switch (event.key.keysym.sym) {
+ case SDLK_UP:
+ controller.up = true;
+ break;
+ case SDLK_DOWN:
+ controller.down = true;
+ break;
+ case SDLK_LEFT:
+ controller.left = true;
+ break;
+ case SDLK_RIGHT:
+ controller.right = true;
+ break;
+ }
+ }
+
+ if (event.type == SDL_KEYUP) {
+ switch (event.key.keysym.sym) {
+ case SDLK_UP:
+ controller.up = false;
+ break;
+
+ case SDLK_DOWN:
+ controller.down = false;
+ break;
+
+ case SDLK_LEFT:
+ controller.left = false;
+ break;
+
+ case SDLK_RIGHT:
+ controller.right = false;
+ break;
+ }
+ }
+ }
+
+ if (controller.up) rect.y -= 1;
+ if (controller.down) rect.y += 1;
+ if (controller.left) rect.x -= 1;
+ if (controller.right) rect.x += 1;
+
+ SDL_FillRect(screenSurface, &rect, SDL_MapRGB(screenSurface->format, 0xFF, 0x0, 0x0));
+ SDL_UpdateWindowSurface(window);
+ }
+
+ SDL_DestroyWindow(window);
+ SDL_Quit();
+ return EXIT_SUCCESS;
+}