Skip to content
Snippets Groups Projects
Commit ec3d2238 authored by Michael's avatar Michael
Browse files

pushed gameLoop from main.c to own file

parent 39e7c657
Branches
Tags
No related merge requests found
CFLAGS=$(shell pkg-config --cflags sdl2 SDL2_image SDL2_ttf) -std=c99 -Wall -Wextra -pedantic -g -O0
CPPFLAGS=-MMD -MF $*.d # Generate dependency files
LDLIBS=$(shell pkg-config --libs sdl2 SDL2_image SDL2_ttf) -lm
OBJ=output.o map.o rows.o auto.o charac.o main.o init.o
OBJ=output.o map.o rows.o auto.o charac.o main.o init.o gameLoop.o
CC=gcc
all: main
......
#include "header.h"
#include <time.h>
#include <stdbool.h>
void gameLoop(SDL_Renderer* renderer, SDL_Window* window) {
// Anfangskoordinaten für den Spieler und dessen Größe
SDL_Rect player = {
.x = 420,
.y = 820,
.w = 60,
.h = 60};
bool run = true;
int input;
SDL_Event e;
bool start_game = false;
// Character
SDL_Rect *character = &player;
// erzeuge verkettete Liste, welche die Karte speichert
struct LinkedList *list = init_map(character);
Uint32 start = SDL_GetTicks();
while (run) {
while (SDL_PollEvent(&e)) {
switch (e.type){
case SDL_QUIT: // Fenster Schließen
run = false;
break;
case SDL_KEYDOWN: // Keystroke ?
input = e.key.keysym.scancode;
start_game = true; // könnte man auch später für das Menü benutzten
jump(input, character);
break;
default:
break;
}
}
// Wenn der Spieler weit oben ist, dann soll sich
// die Kammera schneller bewegen
int speed;
if (run){
if (!start_game){
speed = 0;
}else if (character->y < 400){
speed = 8;
}
else{
speed = 1;
}
run = !move_map(speed,list,character,renderer);
}
//update Character
update_character(speed,character, renderer);
paste_score (renderer, playerhighscore, font);
SDL_RenderPresent(renderer);
SDL_UpdateWindowSurface(window);
if(character->y >= 965){
run = false;
}
// Spiel bekommt eine feste Aktuallisierungsrate von ~60 fps
Uint32 end = SDL_GetTicks();
while (end - start < 16) {
end = SDL_GetTicks();
}
}
free_map(list);
return;
}
......@@ -50,8 +50,8 @@ struct LinkedList_Auto{
//Declarations of Functions
struct Node* init_row(struct Node*);
struct LinkedList* init_map();
struct Node* init_row(struct Node*, SDL_Rect *player);
struct LinkedList* init_map(SDL_Rect *player);
int move_map(int,struct LinkedList*,SDL_Rect*,SDL_Renderer*);
int paste_row(SDL_Renderer*, int , enum row);
void free_map(struct LinkedList*);
......@@ -70,9 +70,11 @@ void move_character(int,SDL_Rect*);
void start_screen(void);
void end_screen(int);
int init(SDL_Renderer*);
int exitGame(struct LinkedList*, SDL_Renderer*, SDL_Window*);
int exitGame(SDL_Renderer*, SDL_Window*);
void gameLoop(SDL_Renderer*, SDL_Window*);
extern SDL_Rect player;
extern TTF_Font* font;
extern int playerscore;
extern int playerhighscore;
......
#include "header.h"
#include <SDL_image.h>
#include <SDL_ttf.h>
SDL_Texture *img_grassDark;
SDL_Texture *img_grassBright;
......@@ -12,11 +13,19 @@ SDL_Texture *img_waterDarkSingle;
SDL_Texture *img_waterDarkMultiple;
SDL_Texture *img_finishlineBright;
SDL_Texture *img_finishlineDark;
TTF_Font* font;
int playerscore = 0;
int playerhighscore = 0;
int init(SDL_Renderer* renderer) {
//Initiiere Text
TTF_Init();
//this opens a font style and sets a size
TTF_Font* font = TTF_OpenFont("Go-Mono.ttf", 50);
if (font == NULL) printf("Font Loading failed: %s\n", TTF_GetError());
// Lade alle Bilder die benötigt werden
img_grassDark = IMG_LoadTexture(renderer,"images/dark_grass.jpg");
img_grassBright = IMG_LoadTexture(renderer,"images/bright_grass.jpg");
......@@ -49,9 +58,7 @@ int init(SDL_Renderer* renderer) {
}
int exitGame(struct LinkedList* list, SDL_Renderer* renderer, SDL_Window* window) {
free_map(list);
int exitGame(SDL_Renderer* renderer, SDL_Window* window) {
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_DestroyTexture(img_grassDark);
......
......@@ -2,14 +2,6 @@
#include <SDL_image.h>
#include <stdbool.h>
#include <time.h>
#include <SDL_ttf.h>
// Anfangskoordinaten für den Spieler und dessen Größe
SDL_Rect player = {
.x = 420,
.y = 820,
.w = 60,
.h = 60};
int main(void) {
......@@ -44,72 +36,12 @@ int main(void) {
init(renderer);
//Initiiere Text
TTF_Init();
//this opens a font style and sets a size
TTF_Font* font = TTF_OpenFont("Go-Mono.ttf", 50);
if (font == NULL) printf("Font Loading failed: %s\n", TTF_GetError());
// erzeuge verkettete Liste, welche die Karte speichert
struct LinkedList *list = init_map();
// Character
SDL_Rect *character = &player;
int input;
SDL_Event e;
bool quit = false;
bool start_game = false;
while (quit == false) {
Uint32 start = SDL_GetTicks();
while (SDL_PollEvent(&e)) {
switch (e.type){
case SDL_QUIT: // Fenster Schließen
quit = true;
break;
case SDL_KEYDOWN: // Keystroke ?
input = e.key.keysym.scancode;
start_game = true; // könnte man auch später für das Menü benutzten
jump(input, character);
break;
default:
break;
}
}
// Wenn der Spieler weit oben ist, dann soll sich
// die Kammera schneller bewegen
int speed;
if (!quit){
if (!start_game){
speed = 0;
}else if (character->y < 400){
speed = 8;
}
else{
speed = 1;
}
quit = move_map(speed,list,character,renderer);
}
//update Character
update_character(speed,character, renderer);
paste_score (renderer, playerhighscore, font);
SDL_RenderPresent(renderer);
SDL_UpdateWindowSurface(window);
if(character->y >= 965){
quit = true;
}
// Spiel bekommt eine feste Aktuallisierungsrate von ~60 fps
Uint32 end = SDL_GetTicks();
while (end - start < 16) {
end = SDL_GetTicks();
}
gameLoop(renderer, window);
}
exitGame(list, renderer, window);
exitGame(renderer, window);
return(0);
}
......@@ -9,7 +9,7 @@
// WICHTIG: Bei jeder Reihe OHNE Autos muss der Wert autos auf NULL
// gesetzt werde, da es sonts zu Fehlern kommt
struct LinkedList* init_map(void){
struct LinkedList* init_map(SDL_Rect* character){
struct LinkedList *list = malloc(sizeof(*list));
......@@ -24,7 +24,7 @@ struct LinkedList* init_map(void){
// erzeuge 9 weitere Knoten mit zufälligem Typ
for(int i = 0;i<9;i++){
struct Node *m = init_row(n);
struct Node *m = init_row(n, character);
n->next = m;
n = m;
......@@ -92,7 +92,7 @@ int move_map(int delta_y,struct LinkedList *list,SDL_Rect *character,SDL_Rendere
// Das Schachbrettmuster bleibt erhalten
if (newNode){
struct Node *n = init_row(cur);
struct Node *n = init_row(cur, character);
cur->next = n;
n->next = NULL;
}
......
......@@ -102,12 +102,12 @@ struct Node* water(bool first,bool dark,int y_pos){
// Initalisert alle Werte für eine neu erzeugte Reihe
// WICHTIG: Bei jeder Reihe OHNE Autos muss der Wert autos auf NULL
// gesetzt werde, da es sonst zu Fehlern kommt
struct Node* init_row(struct Node *m){
struct Node* init_row(struct Node *m, SDL_Rect *character){
struct Node *n;
int p;
// Ziellinie erscheint alle 100 Punkte
if((playerhighscore + (player.y/100)) % 100 == 99){
if((playerhighscore + (character->y/100)) % 100 == 99){
if (m->row_type != grassDark && m->row_type != waterDarkSingle && m->row_type != waterDarkMultiple){
n = grass(true,true,m->y_pos - 100);
}else{
......@@ -141,7 +141,7 @@ struct Node* init_row(struct Node *m){
// Es wird verhindert, dass nur eine Flussreihe erzeugt wird,
// da jedes 100. Feld durch eine goldene Grasreihe ersetzt wird
}else if (p == 2 && ((playerhighscore + (player.y/100)) % 100 != 98)){
}else if (p == 2 && ((playerhighscore + (character->y/100)) % 100 != 98)){
if (m->row_type == grassDark ){
n = water(true,false,m->y_pos - 100);
}else{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment