From e5a66c40b494c7be4f7df794139b347e3b76bd9e Mon Sep 17 00:00:00 2001 From: Julia09055x <steinbergerjulia3@gmail.com> Date: Tue, 7 Nov 2023 19:17:59 +0100 Subject: [PATCH] Add header file --- CMakeLists.txt | 2 +- config.h | 8 ++++++++ food.c | 13 +++++++++++++ food.h | 5 +++++ game.h | 33 +++++++++++++++++++++++++++++++++ keyboard.h | 6 ++++++ main.cpp | 7 ++++++- menu.h | 12 ++++++++++++ render.h | 2 ++ snake.h | 32 ++++++++++++++++++++++++++++++++ 10 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 config.h create mode 100644 food.c create mode 100644 food.h create mode 100644 game.h create mode 100644 keyboard.h create mode 100644 menu.h create mode 100644 render.h create mode 100644 snake.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 93d15f4..ee17238 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ file(GLOB SOURCES "*.cpp" "*.c" ) -add_executable(Snake main.cpp) +add_executable(Snake main.cpp food.c) target_link_libraries(Snake ${SDL2_LIBRARIES}) diff --git a/config.h b/config.h new file mode 100644 index 0000000..23e1e02 --- /dev/null +++ b/config.h @@ -0,0 +1,8 @@ + struct config_t{ + int mapWidth; // =10 //Kartenbreite + int mapHeight; // =10 //Kartenhöhe + int cycleDurationMs; //ms between each game loop iterartion (game speed) + int difficulty; //0-3 //Schwierigkeitsgrad + int snakeDefaultLength; // = 2 //Länge der Schlange + const char *leaderboardFilename; //Dateiname des Leaderboards + } diff --git a/food.c b/food.c new file mode 100644 index 0000000..bd7cdf1 --- /dev/null +++ b/food.c @@ -0,0 +1,13 @@ +#include "food.h" + +//platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld +void placeFood(int count) +{ + return; +} + +//Überprüft, ob Snake gefressen hat +void ckeckEaten() +{ + return; +} diff --git a/food.h b/food.h new file mode 100644 index 0000000..a5a9d76 --- /dev/null +++ b/food.h @@ -0,0 +1,5 @@ +void placeFood(int cnt); +//platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld + +void ckeckEaten(); +//Überprüft, ob Snake gefressen hat \ No newline at end of file diff --git a/game.h b/game.h new file mode 100644 index 0000000..977899a --- /dev/null +++ b/game.h @@ -0,0 +1,33 @@ +typedef enum gameState_t {PAUSED=0, MENU, RUNNING}; + +struct gameData_t{ + snake_t snake; + int mapCollisions[int MAX_MAP_SIZE][int MAX_MAP_SIZE]; //Position der Wände + int mapPortals [int MAX_MAP_SIZE][int MAX_MAP_SIZE]; //Position der Portale + + int foodX, foodY; //Positon des Futters (es gibt immer nur 1 Futter) + int lifesRemaining; //implementieren wir nicht!! + int timestampLastRun; + bool isPaused; + gameState_t gameState; +} + +void gameInit(); +//ruft snakeInit auf +//ruft place Food auf + +void handleCollision(); +//Überprüft, ob Snake mit Gegenstand/Wand kollidiert ist + +void handlePortals(); //optional +//Prüft, ob Snake sich auf einem Portal befindet + +void gameLoop(); +//macht immer: handleKeyboardEvents(); +//if TickDue: Snakemove(), TickTimerReset +//optional: ruft checkCollision auf +//ruft place food auf +//ruft checkEaten auf +//if checkEaten then snakeGrow +//ruft snakeMove auf + diff --git a/keyboard.h b/keyboard.h new file mode 100644 index 0000000..1fef448 --- /dev/null +++ b/keyboard.h @@ -0,0 +1,6 @@ +void processInputEvent(); +//wird von SDL aufgerufen, wenn Taste gedrückt wurde +//bekommt Info darüber, welche Taste gedrückt wurde +//ruft zugehörige Aktion über switch caseauf + // z.B. bei Pfeiltaste -> rufe snakeSetDir auf + // im Menü bei Settings -> rufe menuNavigate auf \ No newline at end of file diff --git a/main.cpp b/main.cpp index eee22bb..aeccdea 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,10 @@ #include "SDL.h" +//initialize SDL window +//ruft gameInit auf +//uninitialize SDL + + int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_VIDEO); @@ -22,6 +27,6 @@ int main(int argc, char *argv[]) SDL_DestroyWindow(window); SDL_Quit(); - + return 0; } diff --git a/menu.h b/menu.h new file mode 100644 index 0000000..e3d0c8f --- /dev/null +++ b/menu.h @@ -0,0 +1,12 @@ +void startScreen(); +//zum Starten Enter drücken +//optional: "E" eingeen für Settings + +void showLeaderboard(); +//zeigt die besten Spieldurchläufe inkl. Punktestand an + +void menuNavigate(); +//über Tastaturbefehle im Menü navigieren + +void showSettings(); //optional + //Menü zum Auswählen über Tastaturbefehle diff --git a/render.h b/render.h new file mode 100644 index 0000000..86dc0ac --- /dev/null +++ b/render.h @@ -0,0 +1,2 @@ +void renderGame(struct game, struct snake); +//erstellt aus Spielfeldstruktur die graphische Anzeige mit SDL-Framework \ No newline at end of file diff --git a/snake.h b/snake.h new file mode 100644 index 0000000..9714fd8 --- /dev/null +++ b/snake.h @@ -0,0 +1,32 @@ + +typedef enum SnakeDirection{DOWN=0, UP, LEFT, RIGHT}; //Bewegungsrichtung + +struct snake_t { + int length; //aktuelle Länge der Schlange + int headX, headY; //aktuelle Position der Schlange + snakeDirection_t direction; + int tail[512][2] ={0}; + bool isAlive; //lebt die Schlange noch oder ist sie mit sich selbst kollidiert? +} + +void snakeInit(); +//Snake mit bestimmter Startlänge an Startposition erstellen +//Speicherbereich reservieren + +void snakegrow(); +//Snake wird um 1 Glied länger (nach Fressen) + +void snakeMove(); +//bewegt die Schlang einen Schritt in die aktuelle Richtung +//ruft lokale Variable dir von snakeSetDir auf + +void snakeSetDir(enum dir); //Richtung als Übergabeparameter +//definiert aktuelle Bewegungsrichtung der Schlange + +bool snakeIsAlive(); +//Überprüfen, ob Schlange noch lebt +//Prüft Kollision mit sich selbst + +void snakeSetHeadPos(); //optional +//für handlePortals +//generiert zufällige Zielsposition, wohin sich die Schlange nach Betreten eines Portals bewegt \ No newline at end of file