Add source files, Fix header files - Compiles now

- Add empty source files for all planned modules
- Add source files to CMAKE source list
- Fix and extend header files so there are no errors
- Create global structs in game.c and config.c
This commit is contained in:
jonny_jr9 2023-11-08 09:52:25 +01:00
parent e5a66c40b4
commit 5bba3e1531
16 changed files with 125 additions and 63 deletions

View File

@ -26,13 +26,20 @@ include_directories(${SDL2_INCLUDE_DIRS} ./)
# --- Source files --- # --- Source files ---
# Note: When new files are added, CMake has to be re-run # Add all used source files here:
# Alternatively, list files manually here set(SOURCES
file(GLOB SOURCES main.cpp
"*.cpp" config.c
"*.c" food.c
game.c
input.c
menu.c
render.c
snake.c
) )
add_executable(Snake main.cpp food.c)
add_executable(Snake ${SOURCES})
target_link_libraries(Snake ${SDL2_LIBRARIES}) target_link_libraries(Snake ${SDL2_LIBRARIES})

4
config.c Normal file
View File

@ -0,0 +1,4 @@
#include "config.h"
//global config struct
config_t config;

View File

@ -1,8 +1,18 @@
struct config_t{ #pragma once
int mapWidth; // =10 //Kartenbreite
int mapHeight; // =10 //Kartenhöhe // global configuration macros
int cycleDurationMs; //ms between each game loop iterartion (game speed) #define MAX_MAP_SIZE 10
int difficulty; //0-3 //Schwierigkeitsgrad
int snakeDefaultLength; // = 2 //Länge der Schlange // struct for storing game configuration
const char *leaderboardFilename; //Dateiname des Leaderboards typedef 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
} config_t;
// global config struct defined in config.c
extern config_t config;

4
food.c
View File

@ -1,12 +1,12 @@
#include "food.h" #include "food.h"
//platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld // platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld
void placeFood(int count) void placeFood(int count)
{ {
return; return;
} }
//Überprüft, ob Snake gefressen hat // Überprüft, ob Snake gefressen hat
void ckeckEaten() void ckeckEaten()
{ {
return; return;

4
food.h
View File

@ -1,5 +1,5 @@
void placeFood(int cnt); void placeFood(int cnt);
//platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld // platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld
void ckeckEaten(); void ckeckEaten();
//Überprüft, ob Snake gefressen hat // Überprüft, ob Snake gefressen hat

4
game.c Normal file
View File

@ -0,0 +1,4 @@
#include "game.h"
// global struct for storing all game data
gameData_t game;

55
game.h
View File

@ -1,33 +1,46 @@
typedef enum gameState_t {PAUSED=0, MENU, RUNNING}; #include <stdbool.h>
struct gameData_t{ #include "snake.h"
#include "config.h"
typedef enum gameState_t
{
PAUSED = 0,
MENU,
RUNNING
} gameState_t;
typedef struct gameData_t
{
snake_t snake; snake_t snake;
int mapCollisions[int MAX_MAP_SIZE][int MAX_MAP_SIZE]; //Position der Wände int mapCollisions[MAX_MAP_SIZE][MAX_MAP_SIZE]; // Position der Wände
int mapPortals [int MAX_MAP_SIZE][int MAX_MAP_SIZE]; //Position der Portale int mapPortals[MAX_MAP_SIZE][MAX_MAP_SIZE]; // Position der Portale
int foodX, foodY; //Positon des Futters (es gibt immer nur 1 Futter) int foodX, foodY; // Positon des Futters (es gibt immer nur 1 Futter)
int lifesRemaining; //implementieren wir nicht!! int lifesRemaining; // implementieren wir nicht!!
int timestampLastRun; int timestampLastRun;
bool isPaused; bool isPaused;
gameState_t gameState; gameState_t gameState;
} } gameData_t;
// global struct for storing all game data (defined in game.c)
extern gameData_t game;
void gameInit(); void gameInit();
//ruft snakeInit auf // ruft snakeInit auf
//ruft place Food auf // ruft place Food auf
void handleCollision(); void handleCollision();
//Überprüft, ob Snake mit Gegenstand/Wand kollidiert ist // Überprüft, ob Snake mit Gegenstand/Wand kollidiert ist
void handlePortals(); //optional void handlePortals(); // optional
//Prüft, ob Snake sich auf einem Portal befindet // 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
void runGameCycle();
// 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

1
input.c Normal file
View File

@ -0,0 +1 @@
#include "input.h"

View File

View File

@ -1,5 +1,9 @@
#include "SDL.h" #include "SDL.h"
extern "C" {
#include "food.h"
}
//initialize SDL window //initialize SDL window
//ruft gameInit auf //ruft gameInit auf
//uninitialize SDL //uninitialize SDL
@ -23,10 +27,11 @@ int main(int argc, char *argv[])
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
SDL_Delay(3000); SDL_Delay(1000);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);
SDL_Quit(); SDL_Quit();
placeFood(3);
return 0; return 0;
} }

1
menu.c Normal file
View File

@ -0,0 +1 @@
#include "menu.h"

4
menu.h
View File

@ -1,4 +1,4 @@
void startScreen(); void showStartScreen();
//zum Starten Enter drücken //zum Starten Enter drücken
//optional: "E" eingeen für Settings //optional: "E" eingeen für Settings
@ -10,3 +10,5 @@ void menuNavigate();
void showSettings(); //optional void showSettings(); //optional
//Menü zum Auswählen über Tastaturbefehle //Menü zum Auswählen über Tastaturbefehle
void menuHandleInput();

1
render.c Normal file
View File

@ -0,0 +1 @@
#include "render.h"

View File

@ -1,2 +1,4 @@
void renderGame(struct game, struct snake); #include "game.h"
#include "snake.h"
void renderGame(gameData_t game, snake_t snake);
//erstellt aus Spielfeldstruktur die graphische Anzeige mit SDL-Framework //erstellt aus Spielfeldstruktur die graphische Anzeige mit SDL-Framework

1
snake.c Normal file
View File

@ -0,0 +1 @@
#include "snake.h"

51
snake.h
View File

@ -1,32 +1,43 @@
typedef enum SnakeDirection{DOWN=0, UP, LEFT, RIGHT}; //Bewegungsrichtung #pragma once
#include <stdbool.h>
struct snake_t { typedef enum snakeDirection_t
int length; //aktuelle Länge der Schlange {
int headX, headY; //aktuelle Position der Schlange DOWN = 0,
UP,
LEFT,
RIGHT
} snakeDirection_t; // Bewegungsrichtung
typedef struct snake_t
{
int length; // aktuelle Länge der Schlange
int headX;
int headY; // aktuelle Position der Schlange
snakeDirection_t direction; snakeDirection_t direction;
int tail[512][2] ={0}; int tail[512][2];
bool isAlive; //lebt die Schlange noch oder ist sie mit sich selbst kollidiert? bool isAlive; // lebt die Schlange noch oder ist sie mit sich selbst kollidiert?
} } snake_t;
void snakeInit(); void snakeInit();
//Snake mit bestimmter Startlänge an Startposition erstellen // Snake mit bestimmter Startlänge an Startposition erstellen
//Speicherbereich reservieren // Speicherbereich reservieren
void snakegrow(); void snakeGrow();
//Snake wird um 1 Glied länger (nach Fressen) // Snake wird um 1 Glied länger (nach Fressen)
void snakeMove(); void snakeMove();
//bewegt die Schlang einen Schritt in die aktuelle Richtung // bewegt die Schlang einen Schritt in die aktuelle Richtung
//ruft lokale Variable dir von snakeSetDir auf // ruft lokale Variable dir von snakeSetDir auf
void snakeSetDir(enum dir); //Richtung als Übergabeparameter void snakeSetDir(snakeDirection_t dir); // Richtung als Übergabeparameter
//definiert aktuelle Bewegungsrichtung der Schlange // definiert aktuelle Bewegungsrichtung der Schlange
bool snakeIsAlive(); bool snakeIsAlive();
//Überprüfen, ob Schlange noch lebt // Überprüfen, ob Schlange noch lebt
//Prüft Kollision mit sich selbst // Prüft Kollision mit sich selbst
void snakeSetHeadPos(); //optional void snakeSetHeadPos(); // optional
//für handlePortals // für handlePortals
//generiert zufällige Zielsposition, wohin sich die Schlange nach Betreten eines Portals bewegt // generiert zufällige Zielsposition, wohin sich die Schlange nach Betreten eines Portals bewegt