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