diff --git a/include/display.h b/include/display.h index 2135970..a348725 100644 --- a/include/display.h +++ b/include/display.h @@ -10,8 +10,8 @@ int getMaxSize (dis display_user); void displayImage (SDL_Renderer *renderer, SDL_Texture *texture, vect pos, int size); void initSDL (dis *display_user); -void screenDisplayGameSDL (char **tab, 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); #endif // !DISPLAY_H diff --git a/include/function.h b/include/function.h index 2043374..2ca7ee9 100644 --- a/include/function.h +++ b/include/function.h @@ -16,6 +16,7 @@ #define PLAYER 5 #define PLAYER_ON_TARGET 6 #define BUTTON 7 +#define PLAYER_ON_BUTTON 8 typedef struct Vecteur { @@ -49,5 +50,6 @@ 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); 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 5b37299..a975daf 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); +char ** generatorMenu(char *name_directory, int *x , int *y, vect *pos_player); #endif // !READ_H diff --git a/maps/original_1.txt b/maps/original_1.txt index e5df6f4..1e6df81 100644 --- a/maps/original_1.txt +++ b/maps/original_1.txt @@ -1,11 +1,11 @@ - ##### - # # - #C # - ### C## - # C C # -### # ## # ###### +################### +##### ########### +#####C ########### +##### C########### +### C C ########## +### # ## ########## # # ## ##### II# # C C II# ##### ### #P## II# - # ######### - ####### +##### ######### +################### diff --git a/script/display.c b/script/display.c index c51b509..fb458e8 100644 --- a/script/display.c +++ b/script/display.c @@ -25,7 +25,7 @@ void screenDisplay (char **tab, int x ,int y ) { // puts("0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 "); - char element[7] = { '#', '_', 'S', '.', '*', '@', '+' }; + char element[9] = { '#', '_', 'S', '.', '*', '@', '+' , 'o', 'O'}; for (int i = 0; i < x; ++i) { for (int j = 0; j < y; ++j) @@ -41,23 +41,41 @@ void screenDisplay (char **tab, int x ,int y ) * \param tab Le tableau 2d de la zone de jeu. * \param display_user La structure qui possede tous ce qu'il faut pour * l'affichage SDL + * \param player_pos la position du joueur + * \param fov Le fov de la vision du joueur, -1 si desactiver. * \return Void */ -void screenDisplayGameSDL (char **tab, dis *display_user) +void screenDisplayGameSDL (char **tab, dis *display_user, vect *player_pos, int fov) { unsigned int display_game = display_user->size_window - display_user->size_menu; int size = display_game / display_user->size_box; unsigned int marge = display_user->size_menu / 2; - unsigned int i, j; + unsigned int i, j, x = 0, y = 0; + int start_i = 0, start_j = 0; + unsigned int limit_i = display_user->size_box, limit_j = display_user->size_box; + if (fov >= 0 ) + { + start_i = player_pos->y - fov+1; + if(start_i < 0) start_i = 0; + 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; + 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); + } + + SDL_Surface *img; SDL_Texture *texture; - for (i = 0; i < display_user->size_box; ++i) + for (i = start_i; i < limit_i; ++i) { - for (j = 0; j < display_user->size_box; ++j) + for (j = start_j; j < limit_j; ++j) { - vect pos = { i * size + marge, j * size }; + vect pos = { x * size + marge, y * size}; switch (tab[j][i]) { case EMPTY: @@ -87,7 +105,10 @@ void screenDisplayGameSDL (char **tab, dis *display_user) displayImage (display_user->renderer, texture, pos, size); SDL_FreeSurface (img); SDL_DestroyTexture (texture); + y++; } + y = 0; + x++; } SDL_RenderPresent (display_user->renderer); diff --git a/script/function.c b/script/function.c index dba7d6b..2f63186 100644 --- a/script/function.c +++ b/script/function.c @@ -305,7 +305,7 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, } move (tab2d, playerPos, direction, score_user); - screenDisplayGameSDL (tab2d, display_user); + screenDisplayGameSDL (tab2d, display_user, playerPos, -1); char nbr_p[20]; snprintf (nbr_p, 20, "MP : %d", score_user->move_player); char nbr_b[20]; @@ -326,7 +326,6 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, finish = true; } } - SDL_PollEvent (&event); } current_time = time (NULL); if (current_time > delay) @@ -341,6 +340,7 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets, } } + /** * \brief Cette fonction verrifie si la partie est gagnante. * \param tab2d Le tableau 2D du jeu. diff --git a/script/main.c b/script/main.c index 44fc740..8a56f85 100644 --- a/script/main.c +++ b/script/main.c @@ -10,9 +10,10 @@ #include #include #include +#include -#define SIZE_PLAY 19 -#define SIZE_MENU 200; +#define SIZE_PLAY 20 +#define SIZE_MENU 200 int main () { @@ -31,15 +32,17 @@ int main () score score_user = {0, 0, 0,0}; int x,y; - char**menu = generatorMenu("maps", &x, &y); + vect *pos = malloc(sizeof(vect)); + char**menu = generatorMenu("maps", &x, &y, pos); screenDisplay(menu, x, y); + targets = fileToTab2D ("maps/original_1.txt", tab2d, SIZE_PLAY, playerPos, &nbr_targets); - screenDisplayGameSDL (tab2d, &display_user); + screenDisplayGameSDL (tab2d, &display_user, NULL, -1); inGameLoop (tab2d, SIZE_PLAY, playerPos, targets, nbr_targets, &display_user, &score_user); - + //screenDisplay(tab2d, SIZE_PLAY, SIZE_PLAY); SDL_DestroyWindow (display_user.window); SDL_DestroyRenderer (display_user.renderer); diff --git a/script/read.c b/script/read.c index 3518350..a465fb2 100644 --- a/script/read.c +++ b/script/read.c @@ -88,26 +88,40 @@ int countCustomMaps(char *name_directory) } -char ** generatorMenu(char *name_directory, int *x, int *y) +char ** generatorMenu(char *name_directory, int *x, int *y, vect *pos_player) { + pos_player->x = 4; + pos_player->y = 1; int nbr_custom = countCustomMaps("maps"); (*x) = 7; - (*y)= 5*(3+nbr_custom) +2; + (*y)= 5*(3+nbr_custom) +7; char **menu = creatArea2D(*x,*y); int i = 1; for (i = 1;i < *y-1; ++i) { menu[4][i] = EMPTY; + if (i == *y-2) + { + menu[4][i] = BUTTON; + } } int j,k ; - for (j = 5; j < *y; j+=5) + for (j = 5; j < *y-5; j+=5) { for (k = 1 ; k < 4; ++k) { - menu[k][j] = EMPTY; + if (k == 1) + { + menu[k][j] = BUTTON; + } + else + { + menu[k][j] = EMPTY; + } + } } return menu;