diff --git a/newVersion-V3/IMG/barrage.bmp b/newVersion-V3/IMG/barrage.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d5c498c03bd1d78c92b075234cd97da8bf4874cc Binary files /dev/null and b/newVersion-V3/IMG/barrage.bmp differ diff --git a/newVersion-V3/IMG/barrage.png b/newVersion-V3/IMG/barrage.png new file mode 100644 index 0000000000000000000000000000000000000000..b01e074720bc538cb66be3a6937ac0941c89c193 Binary files /dev/null and b/newVersion-V3/IMG/barrage.png differ diff --git a/newVersion-V3/IMG/boutton.bmp b/newVersion-V3/IMG/boutton.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fdef830b2cc98ca53885150389932558be2690ed Binary files /dev/null and b/newVersion-V3/IMG/boutton.bmp differ diff --git a/newVersion-V3/IMG/boutton.png b/newVersion-V3/IMG/boutton.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b505b2c71b86b852cd654c2ee8cb0e6a583a77 Binary files /dev/null and b/newVersion-V3/IMG/boutton.png differ diff --git a/newVersion-V3/IMG/bullet.bmp b/newVersion-V3/IMG/bullet.bmp new file mode 100644 index 0000000000000000000000000000000000000000..41727a4cbdc2fd2b879a2b0136f90740d896a38c Binary files /dev/null and b/newVersion-V3/IMG/bullet.bmp differ diff --git a/newVersion-V3/IMG/enemy_car.bmp b/newVersion-V3/IMG/enemy_car.bmp new file mode 100644 index 0000000000000000000000000000000000000000..921f7b8ba0e7b0c8508eabdb007acbb8aac6c4fe Binary files /dev/null and b/newVersion-V3/IMG/enemy_car.bmp differ diff --git a/newVersion-V3/IMG/enemy_car.png b/newVersion-V3/IMG/enemy_car.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c7ee8e071f3adbe06f9de12da1b2f28ea4ef8e Binary files /dev/null and b/newVersion-V3/IMG/enemy_car.png differ diff --git a/newVersion-V3/IMG/exit.bmp b/newVersion-V3/IMG/exit.bmp new file mode 100755 index 0000000000000000000000000000000000000000..e98608dab41c7d04b685f2c406914b957a9ccf0d Binary files /dev/null and b/newVersion-V3/IMG/exit.bmp differ diff --git a/newVersion-V3/IMG/main_car.bmp b/newVersion-V3/IMG/main_car.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6cbf99e55e53368df10e0642f6a02ae78635f873 Binary files /dev/null and b/newVersion-V3/IMG/main_car.bmp differ diff --git a/newVersion-V3/IMG/menu.bmp b/newVersion-V3/IMG/menu.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2279f00e33796aba5c7f80a5e082724788c4cf08 Binary files /dev/null and b/newVersion-V3/IMG/menu.bmp differ diff --git a/newVersion-V3/IMG/new_game.bmp b/newVersion-V3/IMG/new_game.bmp new file mode 100755 index 0000000000000000000000000000000000000000..6de58c8de83b7cecb2e4ba256212ed3e6b76bbe3 Binary files /dev/null and b/newVersion-V3/IMG/new_game.bmp differ diff --git a/newVersion-V3/IMG/road.bmp b/newVersion-V3/IMG/road.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2279f00e33796aba5c7f80a5e082724788c4cf08 Binary files /dev/null and b/newVersion-V3/IMG/road.bmp differ diff --git a/newVersion-V3/IMG/settings.bmp b/newVersion-V3/IMG/settings.bmp new file mode 100755 index 0000000000000000000000000000000000000000..48e5326011de7f88fa580b50431a88b97df42c44 Binary files /dev/null and b/newVersion-V3/IMG/settings.bmp differ diff --git a/newVersion-V3/IMG/voiture.png b/newVersion-V3/IMG/voiture.png new file mode 100644 index 0000000000000000000000000000000000000000..4f3dc697771868eff55c5ab38d5dcc49ec727736 Binary files /dev/null and b/newVersion-V3/IMG/voiture.png differ diff --git a/newVersion-V3/Makefile b/newVersion-V3/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..a2aa727ebebfc854cbcf00297ed97e05b81527a2 --- /dev/null +++ b/newVersion-V3/Makefile @@ -0,0 +1,18 @@ +CC = gcc +CFLAGS = -W -Wall -ansi -std=c99 -g +LIBS = -L./SDL2_ttf/.libs -L./SDL2_image/.libs +LDFLAGS = `sdl2-config --cflags --libs` -lSDL2_ttf -lSDL2_image -lSDL2_ttf +INCLUDES = -I./SDL2_ttf -I./SDL2_image +EXEC = fastcar +SRC = main.c fonctions_SDL.c data.c logic.c colision.c events.c graphics.c liste.c +OBJ = $(SRC:.c=.o) -lm + +all: $(EXEC) +main: $(OBJ) + $(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LIBS) $(LDFLAGS) +%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< +clean: + rm -rf *.o *~ +mrproper: clean + rm -rf $(EXEC) diff --git a/newVersion-V3/colision.c b/newVersion-V3/colision.c new file mode 100755 index 0000000000000000000000000000000000000000..2c93dc287b74621686fc6c16b70470c6c84e00fc --- /dev/null +++ b/newVersion-V3/colision.c @@ -0,0 +1,11 @@ +/** + * \file collision.c + * \brief Gestion des collisions du jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include "colision.h" +#include "liste.h" +#include <stdio.h> + diff --git a/newVersion-V3/colision.h b/newVersion-V3/colision.h new file mode 100755 index 0000000000000000000000000000000000000000..95d14cf22b9102d8ab7f68fabbe4fdf8054951e3 --- /dev/null +++ b/newVersion-V3/colision.h @@ -0,0 +1,46 @@ +/** + * \file collision.h + * \brief Gestion des collisions du jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#ifndef V1_COLISION_H +#define V1_COLISION_H + +#include "data.h" +#include "logic.h" + +/** + * @brief gestion des collision entre car et les autre voitures + * + * @param world + * @param sp1 + * @param sp2 + */ +void handle_Main_Enemy_collision(world_t *world, sprite_t *sp1, sprite_t *sp2); + +/** + * @brief gestion entre car et les boulles + * + * @param world + * @param sp1 + * @param sp2 + */ +void handle_Bullet_Enemy_collision(world_t *world, sprite_t *sp1, sprite_t *sp2); + + +/** + * @brief gestion de la colision avec les barrage + * + * @param sp1 + * @param sp2 + * @param world + * @param textures + * @param renderer + */ +void handle_Main_Barrage_collision(sprite_t *sp1, sprite_t *sp2, world_t *world, resources_t *textures, + SDL_Renderer *renderer); + + +#endif //V1_COLISION_H diff --git a/newVersion-V3/constants.h b/newVersion-V3/constants.h new file mode 100755 index 0000000000000000000000000000000000000000..bef88ebb095d933446303cf5db93b91889ded7fb --- /dev/null +++ b/newVersion-V3/constants.h @@ -0,0 +1,66 @@ +/** + * \file const.h + * \brief Rassemblement des constantes utiles au jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include <SDL2/SDL.h> +#include <SDL2/SDL_ttf.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> +#include <time.h> +#include <math.h> +#include <string.h> + + +#include "fonctions_SDL.h" + + +#ifndef V1_CONSTANTS_H +#define V1_CONSTANTS_H + + +#define SCREEN_WIDTH 840 + +#define SCREEN_HEIGHT 650 + +#define RICK_STEP 50 + +#define SPEED_LIIMIT 10 + +#define NUMBER_ENEMY_CAR 5 + +#define NUMBER_LIFES 10 + +#define NUMBER_BARRAGE 50 + +#define NUMBER_ROADS 100 + + +struct resources_s { + + SDL_Texture *main_car; + + SDL_Texture *enemy_car; + + SDL_Texture *barrage; + + SDL_Texture *road; + + SDL_Texture *bullet; + + SDL_Texture *menu; + + SDL_Texture *exit_button; + + SDL_Texture *new_game_button; + + SDL_Texture *settings_button; + + TTF_Font *font; +}; +typedef struct resources_s resources_t; + +#endif diff --git a/newVersion-V3/data.c b/newVersion-V3/data.c new file mode 100755 index 0000000000000000000000000000000000000000..312e314672ae1219cdc0cc8b63442d56eb247bb7 --- /dev/null +++ b/newVersion-V3/data.c @@ -0,0 +1,14 @@ +/** + * \file data.c + * \brief Gestion des données du jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include "data.h" +#include "graphics.h" +#include "liste.h" +#include "logic.h" +#include "colision.h" +#include <stdio.h> + diff --git a/newVersion-V3/data.h b/newVersion-V3/data.h new file mode 100755 index 0000000000000000000000000000000000000000..21d3dcba5422834670fa3d33174700cd531c827e --- /dev/null +++ b/newVersion-V3/data.h @@ -0,0 +1,104 @@ +/** + * \file data.h + * \brief Gestion des données du jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 26 septembre 2021 + */ + +#ifndef V1_DATA_H +#define V1_DATA_H + +#include "constants.h" + + + +struct position_s { + int x; + int y; +}; +typedef struct position_s position_t; + +typedef enum { + Main_car, Enemy_car, Road, Bullet, Car, Barrage, Barre, Menu +} nature_t; + + +struct sprite_s { + position_t position; + int h; + int w; + int disappear; + int direction; + int dir_texture; + int count; + int speed; + int life; + nature_t nature; +}; +typedef struct sprite_s sprite_t; + + +typedef struct element element; +struct element { + sprite_t val; + struct element *nxt; +}; + +typedef element *list_t; + + +struct world_s { + sprite_t Menu; + sprite_t new_game_menu; + sprite_t settings_menu; + sprite_t exit_menu; + sprite_t Main_car; + list_t Barrage; + int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */ + list_t Enemy_car; + list_t Road; + list_t bullet; + int nb_bullets; + bool stop_menu; + sprite_t mouse; + int time_debut_jeu; + int time_mort; + int dead; +}; +typedef struct world_s world_t; + + +void init_game(SDL_Window **window, SDL_Renderer **renderer, resources_t *textures, world_t *world); + +void init_sprite_ptr(sprite_t *sprite, int x, int y, int w, int h, int v, int life, nature_t nature); + +sprite_t init_sprite(sprite_t sprite, int x, int y, int w, int h, int v, int life, nature_t nature); + +void init_data(world_t *world); + +void update_menu(world_t *world, resources_t *textures, SDL_Renderer *renderer); + +void update_data(world_t *world, resources_t *textures, SDL_Renderer *renderer); + +int is_game_over(world_t *world); + +int sprites_collide(sprite_t *sp1, sprite_t *sp2); + +void move_all_except_rick(world_t *world, SDL_Renderer *renderer, resources_t *textures); + +void move_enemy_car(world_t *world, resources_t *textures, SDL_Renderer *renderer); + +void move_sprite_randomly(list_t enemy_car, resources_t *textures, SDL_Renderer *renderer); + +void move_enemy_to_main(list_t enemy_car, world_t *world, resources_t *textures, SDL_Renderer *renderer); + +double distance(sprite_t s1, sprite_t s2); + +void clean_data(world_t *world); + +void move_bullets(world_t *world, resources_t *textures, SDL_Renderer *renderer); + +void handle_Bullet_Zombie_collision(world_t *world, sprite_t *sp1, sprite_t *sp2); + + +#endif //V1_DATA_H diff --git a/newVersion-V3/events.c b/newVersion-V3/events.c new file mode 100755 index 0000000000000000000000000000000000000000..6a11e6f6484325bfa48ce11648d96ca286a5ba60 --- /dev/null +++ b/newVersion-V3/events.c @@ -0,0 +1,14 @@ +/** + * \file events.c + * \brief Gestion des entrées claviers du joueur + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include "events.h" +#include "constants.h" +#include "data.h" +#include "colision.h" +#include "liste.h" + + diff --git a/newVersion-V3/events.h b/newVersion-V3/events.h new file mode 100755 index 0000000000000000000000000000000000000000..f5ce8807af0c2c39b77da18afb11686fd69f4348 --- /dev/null +++ b/newVersion-V3/events.h @@ -0,0 +1,18 @@ +/** + * \file event.h + * \brief Gestion des entrées claviers du joueur + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#ifndef V1_EVENTS_H +#define V1_EVENTS_H + +#include <SDL2/SDL_mixer.h> +#include "constants.h" +#include "data.h" + +//getion des evenements du jeu et les parametres +void handle_events(SDL_Event *event, SDL_Renderer *renderer, world_t *world, resources_t *textures); + +#endif //V1_EVENTS_H diff --git a/newVersion-V3/fonctions_SDL.c b/newVersion-V3/fonctions_SDL.c new file mode 100755 index 0000000000000000000000000000000000000000..907d7f3770628aa073d89838ae7ed501925b5c77 --- /dev/null +++ b/newVersion-V3/fonctions_SDL.c @@ -0,0 +1,123 @@ +/** + * \file fonctions_SDL.c + * \brief sur-couche de SDL2 pour simplifier son utilisation pour le projet + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include "fonctions_SDL.h" + +int init_sdl(SDL_Window **window, SDL_Renderer **renderer, int width, int height) +{ + if(0 != SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)) + { + fprintf(stderr, "Erreur initialisation de la SDL : %s", SDL_GetError()); + return -1; + } + if(0 != SDL_CreateWindowAndRenderer(width, height, SDL_WINDOW_SHOWN, window, renderer)) + { + fprintf(stderr, "Erreur lors de la creation de l'image et du renderer : %s", SDL_GetError()); + return -1; + } + return 0; +} + +SDL_Texture* charger_image(const char* nomfichier, SDL_Renderer* renderer) +{ + + SDL_Surface* surface = SDL_LoadBMP(nomfichier); + + return SDL_CreateTextureFromSurface(renderer, surface); +} + +SDL_Texture* charger_image_transparente(const char path[], SDL_Renderer *renderer) +{ + SDL_Surface *temp = NULL; + SDL_Texture *texture = NULL; + temp = SDL_LoadBMP(path); + + if(NULL == temp) + { + fprintf(stderr, "Erreur pendant chargement image BMP: %s", SDL_GetError()); + return NULL; + } + SDL_SetColorKey(temp, SDL_TRUE, SDL_MapRGB(temp->format, 255, 0, 255)); + texture = SDL_CreateTextureFromSurface(renderer, temp); + SDL_FreeSurface(temp); + if(NULL == texture) + { + fprintf(stderr, "Erreur pendant creation de la texture liee a l'image chargee: %s", SDL_GetError()); + return NULL; + } + return texture; +} + + +void clear_renderer(SDL_Renderer *renderer){ + SDL_RenderClear(renderer); +} + +void apply_texture(SDL_Texture *texture,SDL_Renderer *renderer,int x, int y){ + SDL_Rect dst = {0, 0, 0, 0}; + + SDL_QueryTexture(texture, NULL, NULL, &dst.w, &dst.h); + dst.x = x; dst.y = y; + + SDL_RenderCopy(renderer, texture, NULL, &dst); +} + +void update_screen(SDL_Renderer *renderer){ + SDL_RenderPresent(renderer); +} + +void clean_texture(SDL_Texture *texture){ + if(NULL != texture){ + SDL_DestroyTexture(texture); + } +} + +void clean_sdl(SDL_Renderer *renderer,SDL_Window *window){ + if(NULL != renderer) + SDL_DestroyRenderer(renderer); + if(NULL != window) + SDL_DestroyWindow(window); + SDL_Quit(); +} + +void init_audio(){ + SDL_Init(SDL_INIT_AUDIO); +} + + +void init_ttf(){ + if(TTF_Init()==-1) { + printf("TTF_Init: %s\n", TTF_GetError()); + } +} + +TTF_Font * load_font(const char *path, int font_size){ + TTF_Font *font = TTF_OpenFont(path, font_size); + if(font == NULL){ + fprintf(stderr, "Erreur pendant chargement font: %s\n", SDL_GetError()); + } + return font; +} + +void apply_text(SDL_Renderer *renderer,int x, int y, int w, int h, const char *text, TTF_Font *font, SDL_Color color){ + + SDL_Surface* surface = TTF_RenderText_Solid(font, text, color); + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface); + SDL_Rect dstrect2 = {x, y, w, h}; + SDL_RenderCopy(renderer, texture, NULL, &dstrect2); + SDL_FreeSurface(surface); + clean_texture(texture); + +} + +void clean_font(TTF_Font * font){ + TTF_CloseFont(font); +} + + + + diff --git a/newVersion-V3/fonctions_SDL.h b/newVersion-V3/fonctions_SDL.h new file mode 100755 index 0000000000000000000000000000000000000000..7d77924f47fc860c9490d91746e7d6327033ec15 --- /dev/null +++ b/newVersion-V3/fonctions_SDL.h @@ -0,0 +1,40 @@ +/** + * \file fonctions_SDL.h + * \brief en-tête du module correspondant à une sur-couche de SDL2 pour simplifier son utilisation pour le projet + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include <SDL2/SDL.h> +#include <SDL2/SDL_ttf.h> +#include <SDL2/SDL_mixer.h> +#include <SDL2/SDL2_rotozoom.h> +#include <stdio.h> + +int init_sdl(SDL_Window **window, SDL_Renderer **renderer, int width, int height); + +SDL_Texture* charger_image(const char* nomfichier, SDL_Renderer* renderer); + +SDL_Texture* charger_image_transparente(const char path[], SDL_Renderer *renderer); + +void clear_renderer(SDL_Renderer *renderer); + +void apply_texture(SDL_Texture *texture,SDL_Renderer *renderer,int x, int y); + +void update_screen(SDL_Renderer *renderer); + +void clean_texture(SDL_Texture *texture); + +void clean_sdl(SDL_Renderer *renderer,SDL_Window *window); + +void init_ttf(); + +TTF_Font * load_font(const char *path, int font_size); + +void apply_text(SDL_Renderer *renderer,int x, int y, int w, int h, const char *text, TTF_Font *font, SDL_Color color); + +void clean_font(TTF_Font * font); + +void init_audio(); + + diff --git a/newVersion-V3/font/arial.ttf b/newVersion-V3/font/arial.ttf new file mode 100755 index 0000000000000000000000000000000000000000..ab68fb197d4479b3b6dec6e85bd5cbaf433a87c5 Binary files /dev/null and b/newVersion-V3/font/arial.ttf differ diff --git a/newVersion-V3/graphics.c b/newVersion-V3/graphics.c new file mode 100755 index 0000000000000000000000000000000000000000..085a23175fff61ef68c60fd61978e2ed7b4c2b00 --- /dev/null +++ b/newVersion-V3/graphics.c @@ -0,0 +1,155 @@ +/** + * \file graphics.c + * \brief Gestion de l'affichage du jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include "graphics.h" + + +void init_textures(SDL_Renderer *renderer, resources_t *textures, world_t *world) { + + textures->font = load_font("font/arial.ttf", 200); + + textures->main_car = charger_image_transparente("IMG/main_car.bmp", renderer); + + textures->enemy_car = charger_image_transparente("IMG/enemy_car.bmp", renderer); + + textures->barrage = charger_image_transparente("IMG/barrage.bmp", renderer); + + textures->road = charger_image_transparente("IMG/road.bmp", renderer); + + textures->bullet = charger_image_transparente("IMG/bullet.bmp", renderer); + + textures->menu = charger_image_transparente("IMG/menu.bmp", renderer); + + textures->new_game_button = charger_image_transparente("IMG/boutton.bmp", renderer); + + textures->settings_button = charger_image_transparente("IMG/boutton.bmp", renderer); + + textures->exit_button = charger_image_transparente("IMG/boutton.bmp", renderer); + +} + + +void refresh_menu(SDL_Renderer *renderer, world_t *world, resources_t *textures) { + clear_renderer(renderer); + apply_sprite(renderer, textures->menu, &world->Menu); + apply_sprite(renderer, textures->new_game_button, &world->new_game_menu); + apply_sprite(renderer, textures->settings_button, &world->settings_menu); + apply_sprite(renderer, textures->exit_button, &world->exit_menu); + apply_text(renderer, (60), 50, 180, 90, "New Game", textures->font,(SDL_Color){243, 89, 0}); + apply_text(renderer, (310), 50, 180, 90, "Settings", textures->font,(SDL_Color){243, 89, 0}); + apply_text(renderer, (560), 50, 180, 90, "Exit", textures->font,(SDL_Color){243, 89, 0}); + + apply_text(renderer, (SCREEN_WIDTH-610), 200, 400, 14*4, "Bienvenue", textures->font,(SDL_Color){243, 89, 0}); + apply_text(renderer, (SCREEN_WIDTH-620), 340, 400, 14*4, "Appuyer sur ", textures->font,(SDL_Color){243, 89, 0}); + apply_text(renderer, (SCREEN_WIDTH-620), 410, 400, 14*4, "'NEW GAME'", textures->font,(SDL_Color){240, 248, 255, 0.993}); + apply_text(renderer, (SCREEN_WIDTH-620), 460, 400, 14*4, "pour commencer", textures->font,(SDL_Color){243, 89, 0}); + apply_text(renderer, (SCREEN_WIDTH-800), 600, 200, 14*3, "YATIME MAROUANE", textures->font,(SDL_Color){253, 217, 13}); + apply_text(renderer, (SCREEN_WIDTH-250), 600, 200, 14*3, "AIT OUALI MAROUANE", textures->font,(SDL_Color){253, 217, 13}); + update_screen(renderer); +} + +void refresh_graphics(SDL_Renderer *renderer, world_t *world, resources_t *textures) { + + clear_renderer(renderer); + + list_t temp_road = world->Road; + while (temp_road != NULL) { + if (distance(temp_road->val, world->Main_car) < 2 * SCREEN_HEIGHT) { + apply_sprite(renderer, textures->road, &temp_road->val); + } + temp_road = temp_road->nxt; + } + + list_t temp_barrage = world->Barrage; + while (temp_barrage != NULL) { + if (temp_barrage->val.disappear == 0) { + if (distance(temp_barrage->val, world->Main_car) < 2 * SCREEN_HEIGHT) { + apply_sprite(renderer, textures->barrage, &temp_barrage->val); + } + } + temp_barrage = temp_barrage->nxt; + } + + + list_t temp_enemy = world->Enemy_car; + + while (temp_enemy != NULL) { + if (distance(temp_enemy->val, world->Main_car) < 2 * SCREEN_HEIGHT) { + if (temp_enemy->val.life >= 0) { + apply_sprite(renderer, textures->enemy_car, &temp_enemy->val); + } + } + + temp_enemy = temp_enemy->nxt; + } + + apply_sprite(renderer, textures->main_car, &world->Main_car); + + + if (world->nb_bullets != 0) { + list_t temp_bullet = world->bullet; + for (int i = 0; i < world->nb_bullets; i++) { + apply_sprite(renderer, textures->bullet, &temp_bullet->val); + temp_bullet = temp_bullet->nxt; + } + } + + + if (world->Main_car.life == 0) { + SDL_Color color = {255, 50, 50}; + char fin_jeu[20] = "GAME OVER"; + int W = 800; + int H = 200; + int X = SCREEN_WIDTH / 2 - W / 2; + int Y = SCREEN_HEIGHT / 4; + apply_text(renderer, X, Y, W, H, fin_jeu, textures->font, color); + } + + + update_screen(renderer); +} + +void apply_sprite(SDL_Renderer *renderer, SDL_Texture *texture, sprite_t *sprite) { + if (texture != NULL) { + apply_texture(texture, renderer, + (sprite->position.x) - ((sprite->w) / 2), + (sprite->position.y) - ((sprite->h) / 2) + ); + } +} + + +void clean(SDL_Window *window, SDL_Renderer *renderer, resources_t *textures, world_t *world) { + clean_data(world); + clean_textures(textures); + clean_sdl(renderer, window); + TTF_Quit(); +} + +void clean_textures(resources_t *textures) { + + clean_texture(textures->main_car); + + clean_texture(textures->enemy_car); + + clean_texture(textures->barrage); + + clean_texture(textures->road); + + clean_texture(textures->bullet); + + clean_texture(textures->menu); + + clean_texture(textures->new_game_button); + + clean_texture(textures->settings_button); + + clean_texture(textures->exit_button); + + clean_font(textures->font); + +} \ No newline at end of file diff --git a/newVersion-V3/graphics.h b/newVersion-V3/graphics.h new file mode 100755 index 0000000000000000000000000000000000000000..2318857eeab688e8aeb3d1ea363ea67459a25dda --- /dev/null +++ b/newVersion-V3/graphics.h @@ -0,0 +1,32 @@ +/** + * \file graphics.h + * \brief Gestion de l'affichage du jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 26 septembre 2021 + */ + +#ifndef V1_GRAPHICS_H +#define V1_GRAPHICS_H + + +#include "constants.h" +#include "data.h" +#include "liste.h" +#include "fonctions_SDL.h" + + + +void init_textures(SDL_Renderer *renderer, resources_t *textures, world_t *world); + +void refresh_menu(SDL_Renderer *renderer, world_t *world, resources_t *textures); + +void refresh_graphics(SDL_Renderer *renderer, world_t *world, resources_t *textures); + +void apply_sprite(SDL_Renderer *renderer, SDL_Texture *texture, sprite_t *sprite); + +void clean(SDL_Window *window, SDL_Renderer *renderer, resources_t *textures, world_t *world); + +void clean_textures(resources_t *textures); + + +#endif //V1_GRAPHICS_H diff --git a/newVersion-V3/liste.c b/newVersion-V3/liste.c new file mode 100755 index 0000000000000000000000000000000000000000..0f3ce3a071108f7efa3f1f79d151aa99b8b4af51 --- /dev/null +++ b/newVersion-V3/liste.c @@ -0,0 +1,10 @@ +/** + * \file liste.c + * \brief Gestion des listes + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include "liste.h" + + diff --git a/newVersion-V3/liste.h b/newVersion-V3/liste.h new file mode 100755 index 0000000000000000000000000000000000000000..c96b31e6148fa755c9bae99c7fbab2cb27dffe6e --- /dev/null +++ b/newVersion-V3/liste.h @@ -0,0 +1,27 @@ +/** + * \file liste.h + * \brief Gestion des listes + * \author YATIME Marouane - AIT OUALI Marouane + * \date 26 septembre 2021 + */ + +#ifndef V1_LISTE_H +#define V1_LISTE_H + + +#include "constants.h" +#include "data.h" + +list_t ajouter(list_t liste, sprite_t valeur); + +bool estVide(list_t liste); + +list_t supprimerElementEnTete(list_t liste); + +list_t supprimerElementEnFin(list_t liste); + +list_t l_vide(); + +int tailleListe(list_t liste); + +#endif //V1_LISTE_H diff --git a/newVersion-V3/logic.c b/newVersion-V3/logic.c new file mode 100755 index 0000000000000000000000000000000000000000..84f598b2d6867a42f393d40427eed509ab872585 --- /dev/null +++ b/newVersion-V3/logic.c @@ -0,0 +1,14 @@ +/** + * \file logic.c + * \brief Gestion de la logique du jeu (physique) + * \author YATIME Marouane - AIT OUALI Marouane + * \date 26 septembre 2021 + */ + +#include "logic.h" + + +double distance(sprite_t s1, sprite_t s2) { + +} + diff --git a/newVersion-V3/logic.h b/newVersion-V3/logic.h new file mode 100755 index 0000000000000000000000000000000000000000..a621b8c6d4b33dbdee0a9688f75ca8c245be760b --- /dev/null +++ b/newVersion-V3/logic.h @@ -0,0 +1,18 @@ +/** + * \file logic.h + * \brief Gestion de la logique du jeu (physique) + * \author YATIME Marouane - AIT OUALI Marouane + * \date 26 septembre 2021 + */ + +#ifndef V1_LOGIC_H +#define V1_LOGIC_H + +#include "data.h" + +double distance(sprite_t s1, sprite_t s2); + +int sprites_collide(sprite_t* sp1, sprite_t* sp2); + + +#endif //V1_LOGIC_H diff --git a/newVersion-V3/main b/newVersion-V3/main new file mode 100755 index 0000000000000000000000000000000000000000..841963cc27744312ee2d5f6e891a93d014752bbe Binary files /dev/null and b/newVersion-V3/main differ diff --git a/newVersion-V3/main.c b/newVersion-V3/main.c new file mode 100755 index 0000000000000000000000000000000000000000..8e7810fd9703244fa5f50750d83ad8781d149aa9 --- /dev/null +++ b/newVersion-V3/main.c @@ -0,0 +1,45 @@ +/** + * \file main.c + * \brief Boucle de jeu + * \author YATIME Marouane - AIT OUALI Marouane + * \date 20 decembre 2021 + */ + +#include "constants.h" +#include "data.h" +#include "graphics.h" +#include "events.h" + +int main() { + + SDL_Event event; + world_t world; + resources_t textures; + SDL_Renderer *renderer; + SDL_Window *fenetre; + + time_t t; + srand((unsigned) time(&t)); + world.time_debut_jeu = t; + + init_game(&fenetre, &renderer, &textures, &world); + + while (!is_game_over(&world)) { + if (world.stop_menu == 0) { + handle_events(&event, renderer, &world, &textures); + update_menu(&world, &textures, renderer); + refresh_menu(renderer, &world, &textures); + } else { + refresh_graphics(renderer, &world, &textures); + update_data(&world, &textures, renderer); + handle_events(&event, renderer, &world, &textures); + } + SDL_Delay(4); + } + + + clean(fenetre, renderer, &textures, &world); + + SDL_Quit(); + return 0; +}