Skip to content
Snippets Groups Projects
Commit 5e1946a8 authored by Janos's avatar Janos
Browse files

ein Menü zum Auswählen der Karte hinzugefügt. Das alte Menü

wurde in das neue größtenteils übernommen
parent 77f67d66
No related branches found
No related tags found
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 gameLoop.o menu.o
OBJ=output.o map.o rows.o auto.o charac.o main.o init.o gameLoop.o menu.o menu2.o
CC=gcc
all: main
......
......@@ -10,6 +10,8 @@ struct Auto* init_car(int speed,int width,int height,int pred_pos,int pred_width
perror("kein Speicherplatz");
}
int min_distance;
int distance;
int p = rand() % 10;
if (p == 0 && t == car){
......@@ -34,8 +36,14 @@ struct Auto* init_car(int speed,int width,int height,int pred_pos,int pred_width
if (pred_width == 0){
b->x_pos = pred_pos;
}else{
int min_distance = 100 * abs(speed);
int distance = (rand() % 300) + min_distance;
if (t == car || t == boat){
min_distance = 100 * abs(speed);
distance = (rand() % 300) + min_distance;
}
else if (t == (train)){
min_distance = 50 * abs(speed) + 50;
distance = (rand() % 500) + min_distance;
}
if (speed < 0){
b->x_pos = pred_pos + pred_width + distance;
......
......@@ -2,7 +2,7 @@
#include <time.h>
#include <stdbool.h>
void gameLoop(SDL_Renderer* renderer, SDL_Window* window) {
void gameLoop(enum vehicle theme,SDL_Renderer* renderer, SDL_Window* window) {
// Anfangskoordinaten für den Spieler und dessen Größe
SDL_Rect player = {
.x = 420,
......@@ -20,8 +20,6 @@ void gameLoop(SDL_Renderer* renderer, SDL_Window* window) {
// Character
SDL_Rect *character = &player;
enum vehicle theme = train; // bestimme das Map-Thema
// erzeuge verkettete Liste, welche die Karte speichert
struct LinkedList *list = init_map(theme,character);
......
......@@ -57,6 +57,8 @@ struct LinkedList_Auto{
//Declarations of Functions
enum vehicle startscreen(SDL_Renderer*,SDL_Window*);
struct Node* init_row(struct Node*, SDL_Rect *player);
struct LinkedList* init_map(enum vehicle,SDL_Rect *player);
int move_map(enum vehicle,int,struct LinkedList*,SDL_Rect*,SDL_Renderer*);
......@@ -81,7 +83,7 @@ int start_screen(enum vehicle,SDL_Rect*, struct LinkedList*, SDL_Renderer*);
bool end_screen(int, SDL_Renderer*);
int init(SDL_Renderer*);
int exitGame(SDL_Renderer*, SDL_Window*);
void gameLoop(SDL_Renderer*, SDL_Window*);
void gameLoop(enum vehicle,SDL_Renderer*, SDL_Window*);
extern SDL_Rect player;
extern TTF_Font* font;
......
......@@ -35,12 +35,18 @@ int main(void) {
}
init(renderer);
enum vehicle theme;
bool quit = false;
while (quit == false) {
gameLoop(renderer, window);
quit = end_screen(0,renderer);
bool changeMap = true;
while (true) {
if (changeMap){
theme = startscreen(renderer,window);
}
if (theme == (-1)){ // Spiel wurde gschlossen oder es kam zu einem Fehler
break;
}
gameLoop(theme,renderer, window);
changeMap = end_screen(0,renderer);
}
......
menu2.c 0 → 100644
#include "header.h"
#include <SDL.h>
#include "SDL_render.h"
#include "SDL_surface.h"
#include <SDL_ttf.h>
#include <stdio.h>
enum vehicle startscreen(SDL_Renderer* renderer,SDL_Window *window){
if (TTF_Init() == -1) {
SDL_Log("SDL_ttf konnte nicht initialisiert werden! SDL_ttf Error: %s\n",
TTF_GetError());
return -1;
}
TTF_Font *font = TTF_OpenFont("Go-Mono.ttf", 30);
if (font == NULL) {
SDL_Log("Schriftart konnte nicht geladen werden! SDL_ttf Error: %s\n",
TTF_GetError());
return -1;
}
// Definiere rect
SDL_Rect rect = {
.x = 0,
.y = 0,
.w = 900,
.h = 200 };
SDL_Surface* surfaceMessage = TTF_RenderText_Blended_Wrapped (font, "Waehle ein Karte aus:", (SDL_Color) {255,255, 255, 0}, 200);
if (surfaceMessage == NULL)
printf("Text Surface loading failed: %s\n", TTF_GetError());
SDL_Texture* Message = SDL_CreateTextureFromSurface(renderer, surfaceMessage);
SDL_Event event;
while (1){
paste_row(renderer, 900, waterBrightMultiple);
paste_row(renderer, 800, waterDarkMultiple);
paste_row(renderer,700,traintrack);
paste_row(renderer,600, traintrack);
paste_row(renderer,500, streetSingle);
paste_row(renderer,400, streetMultiple);
paste_row(renderer,300, grassBright);
paste_row(renderer,200, grassDark);
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
return(-1);
case SDL_MOUSEBUTTONDOWN:
if (200<=event.button.y && event.button.y<=400){
SDL_FreeSurface(surfaceMessage);
SDL_DestroyTexture(Message);
return(coin);
}else if(400<=event.button.y && event.button.y<=600){
SDL_FreeSurface(surfaceMessage);
SDL_DestroyTexture(Message);
return(car);
}else if(600<=event.button.y && event.button.y<=800){
SDL_FreeSurface(surfaceMessage);
SDL_DestroyTexture(Message);
return(train);
} else if(800<=event.button.y && event.button.y<=1000){
SDL_FreeSurface(surfaceMessage);
SDL_DestroyTexture(Message);
return(boat);
}
}
}
if (SDL_SetRenderDrawColor(renderer,0,0,0,0) !=0) {
SDL_Log("Farbe konnte nicht gesetzt werden! SDL_Error %s\n",SDL_GetError());
return(-1);
}
if (SDL_RenderFillRect(renderer,&rect)!=0) {
SDL_Log("Malen des Rechtecks fehlgeschlagen! SDL_Error %s\n",SDL_GetError());
return(-1);
}
SDL_RenderCopy(renderer,Message,NULL,&rect);
SDL_RenderPresent(renderer);
SDL_UpdateWindowSurface(window);
}
}
\ No newline at end of file
......@@ -61,7 +61,7 @@ struct Node* track(int y_pos){
int length = 300;
int width = 60;
n->speed = 7 *(((rand()%2)*2)-1);
n->speed = 6 *(((rand()%2)*2)-1);
n->autos = init_car_list(n->speed,length,width,(900-n->speed) % 900,train);
return(n);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment