From cabdc9b3de6b96d94a37a920047da6867cf94bbb Mon Sep 17 00:00:00 2001 From: Aubin DORIVAL Date: Wed, 25 Dec 2024 16:49:31 +0100 Subject: [PATCH] menu affichage fonctionne et modification de la loop pour rectangle --- image/button.png | 3 +++ image/button.png~ | 3 +++ image/player_on_button.png | 3 +++ include/display.h | 2 +- include/function.h | 5 ++--- include/read.h | 2 +- script/display.c | 18 +++++++++++++----- script/function.c | 13 ++++++++----- script/main.c | 20 +++++++++++++------- script/read.c | 17 +++++++++-------- 10 files changed, 56 insertions(+), 30 deletions(-) create mode 100644 image/button.png create mode 100644 image/button.png~ create mode 100644 image/player_on_button.png diff --git a/image/button.png b/image/button.png new file mode 100644 index 0000000..a23b217 --- /dev/null +++ b/image/button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7c235d00fc5c26fd82c177521cc46179fd80922c9cc4178315292c17b5755a9 +size 628 diff --git a/image/button.png~ b/image/button.png~ new file mode 100644 index 0000000..7f87103 --- /dev/null +++ b/image/button.png~ @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cdaabb8d36a50740dd0ea1bea1e40134201bd1f066d0dd0cdd1012dbaf1305 +size 674 diff --git a/image/player_on_button.png b/image/player_on_button.png new file mode 100644 index 0000000..3a72ace --- /dev/null +++ b/image/player_on_button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4886d57b7b6b31b0071b3e50fa38add41e4ad86e390fcc12ec20e05ebf0b5ea5 +size 3651 diff --git a/include/display.h b/include/display.h index a348725..9712b13 100644 --- a/include/display.h +++ b/include/display.h @@ -11,7 +11,7 @@ void displayImage (SDL_Renderer *renderer, SDL_Texture *texture, vect pos, int size); void initSDL (dis *display_user); void displayTextSDL(dis *display_user,char *text, vect coor, vect size, int font_size); -void screenDisplayGameSDL (char **tab, dis *display_user, vect *player_pos, int fov); +void screenDisplayGameSDL (char **tab,vect dim_tab, dis *display_user, vect *player_pos, int fov); #endif // !DISPLAY_H diff --git a/include/function.h b/include/function.h index 2ca7ee9..450ca78 100644 --- a/include/function.h +++ b/include/function.h @@ -47,9 +47,8 @@ bool isWin (char **tab2d, vect *targets, int nbr_targets); bool islose (char **tab2d, const int N); bool blockBox (char **tab2d, vect box_coor); vect plusVect (vect one, vect two); -void inGameLoop (char **tab2d, int N, vect *playerPos, - vect *targets, int nbr_targets, dis *display_user, score *score_user); +void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, + vect *targets, int nbr_targets, dis *display_user, score *score_user, bool menu); char *timeToText(time_t time); -void inMenuLoop(char **menu, int x, int y, vect *playerPos, vect *buttons, dis *display_user); #endif // FONCTION_H diff --git a/include/read.h b/include/read.h index a975daf..bad7bd2 100644 --- a/include/read.h +++ b/include/read.h @@ -4,5 +4,5 @@ vect *fileToTab2D (const char *name_file, char **tab, const unsigned N, vect *player, int *nbr_targets); int countCustomMaps(char *name_directory); -char ** generatorMenu(char *name_directory, int *x , int *y, vect *pos_player); +char ** generatorMenu(char *name_directory, vect *size, vect *pos_player); #endif // !READ_H diff --git a/script/display.c b/script/display.c index fb458e8..7f86c30 100644 --- a/script/display.c +++ b/script/display.c @@ -45,7 +45,7 @@ void screenDisplay (char **tab, int x ,int y ) * \param fov Le fov de la vision du joueur, -1 si desactiver. * \return Void */ -void screenDisplayGameSDL (char **tab, dis *display_user, vect *player_pos, int fov) +void screenDisplayGameSDL (char **tab,vect dim_tab, dis *display_user, vect *player_pos, int fov) { unsigned int display_game = display_user->size_window - display_user->size_menu; @@ -61,10 +61,12 @@ void screenDisplayGameSDL (char **tab, dis *display_user, vect *player_pos, int start_j = player_pos->x - fov +1 ; if(start_j < 0) start_j = 0; limit_i = player_pos->y + fov; - if(limit_i > display_user->size_box) limit_i = display_user->size_box; + //if(limit_i > display_user->size_box) limit_i = display_user->size_box; + if(limit_i > dim_tab.y) limit_i = dim_tab.y; limit_j = player_pos->x + fov; - if(limit_j > display_user->size_box) limit_j = display_user->size_box; - size = display_game / (fov*2 - 1); + //if(limit_j > display_user->size_box) limit_j = display_user->size_box; + if(limit_j > dim_tab.x) limit_j = dim_tab.x; + size = display_game / (fov*2); } @@ -99,7 +101,14 @@ void screenDisplayGameSDL (char **tab, dis *display_user, vect *player_pos, int case PLAYER_ON_TARGET: img = IMG_Load ("image/player_on_target.png"); break; + case BUTTON: + img = IMG_Load("image/button.png"); + break; + case PLAYER_ON_BUTTON: + img = IMG_Load("image/player_on_button.png"); + break; } + texture = SDL_CreateTextureFromSurface (display_user->renderer, img); displayImage (display_user->renderer, texture, pos, size); @@ -110,7 +119,6 @@ void screenDisplayGameSDL (char **tab, dis *display_user, vect *player_pos, int y = 0; x++; } - SDL_RenderPresent (display_user->renderer); } diff --git a/script/function.c b/script/function.c index 2f63186..0dfcd80 100644 --- a/script/function.c +++ b/script/function.c @@ -248,10 +248,11 @@ tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER; * du joueur. * \return Void */ -void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, - int nbr_targets, dis *display_user, score *score_user) +void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets, + int nbr_targets, dis *display_user, score *score_user, bool menu) { - + int fov = -1; + if (menu) fov = 5; vect size_menu = { display_user->size_menu - 10, display_user->size_window / 3 - 10 }; vect coor_time @@ -268,9 +269,11 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, time_t current_time = time (NULL); time_t delay = 0; vect direction = { 0, 0 }; + char input; bool finish = false; SDL_Event event; + screenDisplayGameSDL (tab2d, *dim_tab, display_user, playerPos, fov); while (!finish) { while (SDL_PollEvent (&event)) @@ -305,7 +308,7 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, } move (tab2d, playerPos, direction, score_user); - screenDisplayGameSDL (tab2d, display_user, playerPos, -1); + screenDisplayGameSDL (tab2d, *dim_tab, display_user, playerPos, fov); char nbr_p[20]; snprintf (nbr_p, 20, "MP : %d", score_user->move_player); char nbr_b[20]; @@ -320,7 +323,7 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, puts ("Win!"); finish = true; } - if (islose (tab2d, N)) + if (islose (tab2d, dim_tab->x)) { puts ("lose!"); finish = true; diff --git a/script/main.c b/script/main.c index 8a56f85..e7705ee 100644 --- a/script/main.c +++ b/script/main.c @@ -31,17 +31,23 @@ int main () score score_user = {0, 0, 0,0}; - int x,y; - vect *pos = malloc(sizeof(vect)); - char**menu = generatorMenu("maps", &x, &y, pos); - screenDisplay(menu, x, y); + vect dim_menu = {0, 0}; + vect pos = {4, 1}; + char**menu = generatorMenu("maps", &dim_menu, &pos); + printf("x %d, y %d\n", dim_menu.x, dim_menu.y); + + screenDisplay(menu, dim_menu.x, dim_menu.y); targets = fileToTab2D ("maps/original_1.txt", tab2d, SIZE_PLAY, playerPos, &nbr_targets); - screenDisplayGameSDL (tab2d, &display_user, NULL, -1); - inGameLoop (tab2d, SIZE_PLAY, playerPos, targets, nbr_targets, - &display_user, &score_user); + inGameLoop (menu, &dim_menu, &pos, targets, nbr_targets, + &display_user, &score_user, true); + + vect dim = {SIZE_PLAY, SIZE_PLAY}; + inGameLoop (tab2d, &dim, playerPos, targets, nbr_targets, + &display_user, &score_user, false); + //screenDisplay(tab2d, SIZE_PLAY, SIZE_PLAY); SDL_DestroyWindow (display_user.window); diff --git a/script/read.c b/script/read.c index a465fb2..328f2cb 100644 --- a/script/read.c +++ b/script/read.c @@ -88,19 +88,19 @@ int countCustomMaps(char *name_directory) } -char ** generatorMenu(char *name_directory, int *x, int *y, vect *pos_player) +char ** generatorMenu(char *name_directory, vect *size, vect *pos_player) { pos_player->x = 4; pos_player->y = 1; - int nbr_custom = countCustomMaps("maps"); - (*x) = 7; - (*y)= 5*(3+nbr_custom) +7; - char **menu = creatArea2D(*x,*y); + int nbr_custom = countCustomMaps(name_directory); + size->x = 9; + size->y = 5*(3+nbr_custom) +7; + char **menu = creatArea2D(size->x,size->y); int i = 1; - for (i = 1;i < *y-1; ++i) + for (i = 1;i < size->y-1; ++i) { menu[4][i] = EMPTY; - if (i == *y-2) + if (i == size->y-2) { menu[4][i] = BUTTON; } @@ -108,7 +108,7 @@ char ** generatorMenu(char *name_directory, int *x, int *y, vect *pos_player) int j,k ; - for (j = 5; j < *y-5; j+=5) + for (j = 5; j < size->y-5; j+=5) { for (k = 1 ; k < 4; ++k) @@ -124,6 +124,7 @@ char ** generatorMenu(char *name_directory, int *x, int *y, vect *pos_player) } } + menu[4][1] = PLAYER; return menu; }