diff --git a/include/config.h b/include/config.h index 9783e5b..69be4a6 100644 --- a/include/config.h +++ b/include/config.h @@ -2,12 +2,17 @@ // global configuration macros #define MAX_MAP_SIZE 10 +#define MAX_PORTALS 5 // Maximalanzahl an Portale // struct for storing game configuration typedef struct config_t { + const int windowSize; // feste Größe des Spielfensters int mapWidth; // =10 //Kartenbreite int mapHeight; // =10 //Kartenhöhe + //Breite und Höhe sind gleich -> Spielfeld ist quadratisch + int blockSizePx; // Pixelgröße von einem Block + //wird über windowSize/mapHeight berechnet int cycleDurationMs; // ms between each game loop iterartion (game speed) int difficulty; // 0-3 //Schwierigkeitsgrad int snakeDefaultLength; // = 2 //Länge der Schlange @@ -16,3 +21,4 @@ typedef struct config_t // global config struct defined in config.c extern config_t config; + diff --git a/include/food.h b/include/food.h index 53dfbbd..7a0c56e 100644 --- a/include/food.h +++ b/include/food.h @@ -1,5 +1,9 @@ -void placeFood(int cnt); -// platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld +#include -void ckeckEaten(); -// Überprüft, ob Snake gefressen hat \ No newline at end of file +void placeFood(); +// platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld +// darf nicht auf der Schlange oder auf Wänden sein + +bool ckeckEaten(); +// Überprüft, ob Snake gefressen hat -> true wenn gefressen +// Vergleich mit gameData_t foodX, foodY \ No newline at end of file diff --git a/include/game.h b/include/game.h index 6f4be92..cf2cd8d 100644 --- a/include/game.h +++ b/include/game.h @@ -10,11 +10,20 @@ typedef enum gameState_t RUNNING } gameState_t; +typedef struct portal_t +{ + int posX, posY; + int targetX, targetY; + + char * color; +} portal_t; + typedef struct gameData_t { snake_t snake; int mapCollisions[MAX_MAP_SIZE][MAX_MAP_SIZE]; // Position der Wände - int mapPortals[MAX_MAP_SIZE][MAX_MAP_SIZE]; // Position der Portale + portal_t mapPortals[MAX_PORTALS]; + int mapPortalCount; // Anzahl der Portale int foodX, foodY; // Positon des Futters (es gibt immer nur 1 Futter) int lifesRemaining; // implementieren wir nicht!! @@ -27,20 +36,26 @@ typedef struct gameData_t extern gameData_t game; void gameInit(); +// berechnet BlockSizePx: windowSize/mapWidth // ruft snakeInit auf -// ruft place Food auf +// ruft placeFood auf +// platziert Wände -void handleCollision(); +bool checkIsCollided(); // Überprüft, ob Snake mit Gegenstand/Wand kollidiert ist +// if true -> gibt 1 an runGameCycle zurück + void handlePortals(); // optional // Prüft, ob Snake sich auf einem Portal befindet +//if true: snakeSetHeadPos auf void runGameCycle(); // macht immer: handleKeyboardEvents(); +// optional: ruft checkCollision() auf +// ruft placeFood() auf +// ruft checkEaten() auf +// if checkEaten then snakeGrow() // if TickDue: Snakemove(), TickTimerReset -// optional: ruft checkCollision auf -// ruft place food auf -// ruft checkEaten auf -// if checkEaten then snakeGrow -// ruft snakeMove auf +// ruft snakeMove() auf +//ruft am Ende vom gameCycle renderGame() auf diff --git a/include/menu.h b/include/menu.h index a54b98f..9f3f203 100644 --- a/include/menu.h +++ b/include/menu.h @@ -1,14 +1,13 @@ void showStartScreen(); //zum Starten Enter drücken -//optional: "E" eingeen für Settings +//optional: "E" eingeben 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 +//startet Settungs-Menü -void menuHandleInput(); +void menuHandleInput(int event); //als Übergabeparameter: int(?) event -> welcher Datentyp hängt von SDL ab +//switch case für welcher Modus +//switch case für welche Taste gedrückt wurde diff --git a/include/render.h b/include/render.h index 51e2ab3..d75fefa 100644 --- a/include/render.h +++ b/include/render.h @@ -1,4 +1,4 @@ #include "game.h" #include "snake.h" -void renderGame(gameData_t game, snake_t snake); +void renderGame(); //erstellt aus Spielfeldstruktur die graphische Anzeige mit SDL-Framework \ No newline at end of file diff --git a/include/snake.h b/include/snake.h index e80c55c..b159b58 100644 --- a/include/snake.h +++ b/include/snake.h @@ -1,6 +1,7 @@ #pragma once #include +#include "config.h" typedef enum snakeDirection_t { @@ -16,19 +17,18 @@ typedef struct snake_t int headX; int headY; // aktuelle Position der Schlange snakeDirection_t direction; - int tail[512][2]; + int tail[MAX_MAP_SIZE*MAX_MAP_SIZE][2]; bool isAlive; // lebt die Schlange noch oder ist sie mit sich selbst kollidiert? } snake_t; 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 +// bewegt die Schlange einen Schritt in die aktuelle Richtung // ruft lokale Variable dir von snakeSetDir auf void snakeSetDir(snakeDirection_t dir); // Richtung als Übergabeparameter diff --git a/src/food.c b/src/food.c index 5a0c00f..b135693 100644 --- a/src/food.c +++ b/src/food.c @@ -1,4 +1,5 @@ #include "food.h" +#include // platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld void placeFood(int count) @@ -7,7 +8,7 @@ void placeFood(int count) } // Überprüft, ob Snake gefressen hat -void ckeckEaten() +bool ckeckEaten() { - return; + return 0; } diff --git a/src/main.cpp b/src/main.cpp index 3267cf7..f0a7d5c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,7 +5,9 @@ extern "C" { } //initialize SDL window -//ruft gameInit auf +//ruft showStartScreen +//initialize game +//main loop: processInputEvents, runGameCycle //uninitialize SDL @@ -32,6 +34,5 @@ int main(int argc, char *argv[]) SDL_DestroyWindow(window); SDL_Quit(); - placeFood(3); return 0; }