From b0302904e2dd805bf396cd2defa1c5821bab1d68 Mon Sep 17 00:00:00 2001 From: Samibenzid <benzid-sami@hotmail.com> Date: Fri, 5 May 2023 16:37:49 +0200 Subject: [PATCH] Ajout du menu --- Makefile | 4 ++-- library/Display/Display.c | 3 +++ library/World/world.c | 9 +++++++++ library/World/world.h | 7 +++++++ library/menu/menu.c | 19 +++++++++++++++++++ library/menu/menu.h | 17 +++++++++++++++-- main.c | 2 ++ 7 files changed, 57 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 27efdec..95d1943 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ LDFLAGS = -lm -lmingw32 -lSDL2main -lSDL2 -lSDL2_ttf SDL2_INCLUDE_DIR = src/include SDL2_LIBRARIES_DIR = src/lib -INC = sdl2-light.h sdl2-ttf-light.h library/Display/Display.h library/World/world.h library/Sprites/sprites.h library/utility/utility.h -SRC = main.c sdl2-light.c sdl2-ttf-light.c library/Display/Display.c library/World/world.c library/Sprites/sprites.c library/utility/utility.c +INC = sdl2-light.h sdl2-ttf-light.h library/Display/Display.h library/World/world.h library/Sprites/sprites.h library/utility/utility.h library/menu/menu.h +SRC = main.c sdl2-light.c sdl2-ttf-light.c library/Display/Display.c library/World/world.c library/Sprites/sprites.c library/utility/utility.c library/menu/menu.c OBJ = $(SRC:%.c=%.o) diff --git a/library/Display/Display.c b/library/Display/Display.c index 6fc28aa..faa3d0d 100644 --- a/library/Display/Display.c +++ b/library/Display/Display.c @@ -87,6 +87,9 @@ void refresh_graphics(SDL_Renderer *renderer, world_t *world,ressources_t *textu apply_text(renderer, 10, 10, 100, 33, world->str, textures->font, textures->color); }else{ apply_text(renderer, 10, 10, 100, 33, "Menu", textures->font, textures->color); + apply_text(renderer, 10, 10, 100, 33, "Jouer", textures->font, textures->color); + apply_text(renderer, 10, 10, 100, 33, "Magasin", textures->font, textures->color); + apply_text(renderer, 10, 10, 100, 33, "Exit", textures->font, textures->color); } update_screen(renderer); diff --git a/library/World/world.c b/library/World/world.c index 07e0bdb..dbbf35f 100644 --- a/library/World/world.c +++ b/library/World/world.c @@ -19,6 +19,10 @@ void update_data(world_t *world){ allEvents(world); world->timer = SDL_GetTicks(); + }else{ + if (collidePoint(world->play, world->mouseX, world->mouseY)){ + world->isMenu = false; + } } } @@ -37,6 +41,8 @@ void init_data(world_t * world){ init_walls(world); world->ligneArriver = init_sprite(world->ligneArriver, 0, -world->nb_lines_murs*METEORITE_SIZE-30 , SCREEN_WIDTH, FINISH_LINE_HEIGHT, 'z'); + world->play = init_btn(0, 0, 100, 100); + print_sprite(world->vaisseau); world->startTimer = SDL_GetTicks(); world->timer = SDL_GetTicks(); @@ -44,6 +50,9 @@ void init_data(world_t * world){ world->angle = 0.0; world->isFlipping = 0; world->isMenu = true; + + world->mouseX = 0; + world->mouseY = 0; } diff --git a/library/World/world.h b/library/World/world.h index b580f78..93d1abc 100644 --- a/library/World/world.h +++ b/library/World/world.h @@ -4,6 +4,7 @@ #include "../../constante.c" #include "../../src/include/SDL2/SDL.h" #include <stdbool.h> +#include "../menu/menu.h" /** * \file world.h @@ -37,6 +38,9 @@ struct world_s{ sprite_t *vaisseau ; /*!< Représentation du vaisseau */ sprite_t **murs; /*<Représentation des météorites>*/ sprite_t **murs2; /*<Représentation des météorites et de l'air>*/ + + btn_t *play; + int nb_murs; // Nombre de météorites int nb_lines_murs; // Nombre de lignes de météorites sprite_t *ligneArriver; @@ -48,6 +52,9 @@ struct world_s{ double angle; // Angle de rotation de la map int isFlipping; // Indique si l'on est en train de faire une rotation de l'écran et dans quelle sens (0 : non droite, 1 : vers la droite, -1 : vers la gauche, -2 : non gauche) bool isMenu; + + int mouseX; + int mouseY; }; typedef struct world_s world_t; diff --git a/library/menu/menu.c b/library/menu/menu.c index e69de29..6fb361e 100644 --- a/library/menu/menu.c +++ b/library/menu/menu.c @@ -0,0 +1,19 @@ +#include "menu.h" + +#include <stdio.h> +#include <stdlib.h> + +btn_t *init_btn(int x, int y, int w, int h){ + btn_t *btn = malloc(sizeof(btn_t)); + btn->rect.x = x; + btn->rect.y = y; + btn->rect.w = w; + btn->rect.h = h; + + return btn; +} + +int collidePoint(btn_t *btn, int x, int y){ + if (btn->rect.x > x && btn->rect.x + btn->rect.w < x && btn->rect.y > y && btn->rect.y + btn->rect.h < y;) return 1; + return 0; +} \ No newline at end of file diff --git a/library/menu/menu.h b/library/menu/menu.h index 0e52d5e..7857e54 100644 --- a/library/menu/menu.h +++ b/library/menu/menu.h @@ -2,7 +2,20 @@ #include <stdlib.h> #include "../../src/include/SDL2/SDL.h" +#ifndef DEF_CONSTANTES +#define DEF_CONSTANTES + +#define LARGEUR_FENETRE 704 +#define HAUTEUR_FENETRE 704 + + struct btn{ SDL_Rect rect; - SDL_Texture *texture; -} \ No newline at end of file +} + +typedef struct btn_t ; + +btn_t *init_btn(int x, int y, int w, int h); +int collidePoint(btn_t *btn, int x, int y); + +#endif \ No newline at end of file diff --git a/main.c b/main.c index 28879a8..528cb88 100644 --- a/main.c +++ b/main.c @@ -32,6 +32,8 @@ void handle_events(SDL_Event *event,world_t *world){ world->vaisseau->x += MOVING_STEP; } } + SDL_GetMouseState(&world->mouseX, &world->mouseY); + while( SDL_PollEvent( event ) ) { -- GitLab