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 ---
# Note: When new files are added, CMake has to be re-run
# Alternatively, list files manually here
file(GLOB SOURCES
"*.cpp"
"*.c"
# Add all used source files here:
set(SOURCES
main.cpp
config.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})

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{
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
}
#pragma once
// global configuration macros
#define MAX_MAP_SIZE 10
// struct for storing game configuration
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"
//platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld
// platziert zufällig (mit bestimmtem Algorithmus) Fressen auf dem Spielfeld
void placeFood(int count)
{
return;
}
//Überprüft, ob Snake gefressen hat
// Überprüft, ob Snake gefressen hat
void ckeckEaten()
{
return;

4
food.h
View File

@ -1,5 +1,5 @@
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();
//Ü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;
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 mapCollisions[MAX_MAP_SIZE][MAX_MAP_SIZE]; // Position der Wände
int mapPortals[MAX_MAP_SIZE][MAX_MAP_SIZE]; // Position der Portale
int foodX, foodY; //Positon des Futters (es gibt immer nur 1 Futter)
int lifesRemaining; //implementieren wir nicht!!
int foodX, foodY; // Positon des Futters (es gibt immer nur 1 Futter)
int lifesRemaining; // implementieren wir nicht!!
int timestampLastRun;
bool isPaused;
gameState_t gameState;
}
} gameData_t;
// global struct for storing all game data (defined in game.c)
extern gameData_t game;
void gameInit();
//ruft snakeInit auf
//ruft place Food auf
// ruft snakeInit auf
// ruft place Food auf
void handleCollision();
//Überprüft, ob Snake mit Gegenstand/Wand kollidiert ist
// Ü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
void handlePortals(); // optional
// Prüft, ob Snake sich auf einem Portal befindet
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"
extern "C" {
#include "food.h"
}
//initialize SDL window
//ruft gameInit auf
//uninitialize SDL
@ -23,10 +27,11 @@ int main(int argc, char *argv[])
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_Delay(3000);
SDL_Delay(1000);
SDL_DestroyWindow(window);
SDL_Quit();
placeFood(3);
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
//optional: "E" eingeen für Settings
@ -10,3 +10,5 @@ void menuNavigate();
void showSettings(); //optional
//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

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 {
int length; //aktuelle Länge der Schlange
int headX, headY; //aktuelle Position der Schlange
typedef enum snakeDirection_t
{
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;
int tail[512][2] ={0};
bool isAlive; //lebt die Schlange noch oder ist sie mit sich selbst kollidiert?
}
int tail[512][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
// Snake mit bestimmter Startlänge an Startposition erstellen
// Speicherbereich reservieren
void snakegrow();
//Snake wird um 1 Glied länger (nach Fressen)
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
// 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
void snakeSetDir(snakeDirection_t dir); // Richtung als Übergabeparameter
// definiert aktuelle Bewegungsrichtung der Schlange
bool snakeIsAlive();
//Überprüfen, ob Schlange noch lebt
//Prüft Kollision mit sich selbst
// Ü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
void snakeSetHeadPos(); // optional
// für handlePortals
// generiert zufällige Zielsposition, wohin sich die Schlange nach Betreten eines Portals bewegt