test pour menu

This commit is contained in:
2024-12-24 15:51:26 +01:00
parent 7f9433f505
commit c50388def9
8 changed files with 67 additions and 27 deletions

View File

@@ -10,8 +10,8 @@ int getMaxSize (dis display_user);
void displayImage (SDL_Renderer *renderer, SDL_Texture *texture, vect pos, void displayImage (SDL_Renderer *renderer, SDL_Texture *texture, vect pos,
int size); int size);
void initSDL (dis *display_user); 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 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 #endif // !DISPLAY_H

View File

@@ -16,6 +16,7 @@
#define PLAYER 5 #define PLAYER 5
#define PLAYER_ON_TARGET 6 #define PLAYER_ON_TARGET 6
#define BUTTON 7 #define BUTTON 7
#define PLAYER_ON_BUTTON 8
typedef struct Vecteur typedef struct Vecteur
{ {
@@ -49,5 +50,6 @@ vect plusVect (vect one, vect two);
void inGameLoop (char **tab2d, int N, vect *playerPos, void inGameLoop (char **tab2d, int N, vect *playerPos,
vect *targets, int nbr_targets, dis *display_user, score *score_user); vect *targets, int nbr_targets, dis *display_user, score *score_user);
char *timeToText(time_t time); char *timeToText(time_t time);
void inMenuLoop(char **menu, int x, int y, vect *playerPos, vect *buttons, dis *display_user);
#endif // FONCTION_H #endif // FONCTION_H

View File

@@ -4,5 +4,5 @@
vect *fileToTab2D (const char *name_file, char **tab, vect *fileToTab2D (const char *name_file, char **tab,
const unsigned N, vect *player, int *nbr_targets); const unsigned N, vect *player, int *nbr_targets);
int countCustomMaps(char *name_directory); 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 #endif // !READ_H

View File

@@ -1,11 +1,11 @@
##### ###################
# # ##### ###########
#C # #####C ###########
### C## ##### C###########
# C C # ### C C ##########
### # ## # ###### ### # ## ##########
# # ## ##### II# # # ## ##### II#
# C C II# # C C II#
##### ### #P## II# ##### ### #P## II#
# ######### ##### #########
####### ###################

View File

@@ -25,7 +25,7 @@
void screenDisplay (char **tab, int x ,int y ) 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 "); // 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 i = 0; i < x; ++i)
{ {
for (int j = 0; j < y; ++j) 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 tab Le tableau 2d de la zone de jeu.
* \param display_user La structure qui possede tous ce qu'il faut pour * \param display_user La structure qui possede tous ce qu'il faut pour
* l'affichage SDL * l'affichage SDL
* \param player_pos la position du joueur
* \param fov Le fov de la vision du joueur, -1 si desactiver.
* \return Void * \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 unsigned int display_game
= display_user->size_window - display_user->size_menu; = display_user->size_window - display_user->size_menu;
int size = display_game / display_user->size_box; int size = display_game / display_user->size_box;
unsigned int marge = display_user->size_menu / 2; 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_Surface *img;
SDL_Texture *texture; 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]) switch (tab[j][i])
{ {
case EMPTY: case EMPTY:
@@ -87,7 +105,10 @@ void screenDisplayGameSDL (char **tab, dis *display_user)
displayImage (display_user->renderer, texture, pos, size); displayImage (display_user->renderer, texture, pos, size);
SDL_FreeSurface (img); SDL_FreeSurface (img);
SDL_DestroyTexture (texture); SDL_DestroyTexture (texture);
y++;
} }
y = 0;
x++;
} }
SDL_RenderPresent (display_user->renderer); SDL_RenderPresent (display_user->renderer);

View File

@@ -305,7 +305,7 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets,
} }
move (tab2d, playerPos, direction, score_user); move (tab2d, playerPos, direction, score_user);
screenDisplayGameSDL (tab2d, display_user); screenDisplayGameSDL (tab2d, display_user, playerPos, -1);
char nbr_p[20]; char nbr_p[20];
snprintf (nbr_p, 20, "MP : %d", score_user->move_player); snprintf (nbr_p, 20, "MP : %d", score_user->move_player);
char nbr_b[20]; char nbr_b[20];
@@ -326,7 +326,6 @@ void inGameLoop (char **tab2d, int N, vect *playerPos, vect *targets,
finish = true; finish = true;
} }
} }
SDL_PollEvent (&event);
} }
current_time = time (NULL); current_time = time (NULL);
if (current_time > delay) 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. * \brief Cette fonction verrifie si la partie est gagnante.
* \param tab2d Le tableau 2D du jeu. * \param tab2d Le tableau 2D du jeu.

View File

@@ -10,9 +10,10 @@
#include <SDL2/SDL_image.h> #include <SDL2/SDL_image.h>
#include <SDL2/SDL_render.h> #include <SDL2/SDL_render.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#define SIZE_PLAY 19 #define SIZE_PLAY 20
#define SIZE_MENU 200; #define SIZE_MENU 200
int main () int main ()
{ {
@@ -31,12 +32,14 @@ int main ()
score score_user = {0, 0, 0,0}; score score_user = {0, 0, 0,0};
int x,y; 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); screenDisplay(menu, x, y);
targets targets
= fileToTab2D ("maps/original_1.txt", tab2d, SIZE_PLAY, playerPos, &nbr_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, inGameLoop (tab2d, SIZE_PLAY, playerPos, targets, nbr_targets,
&display_user, &score_user); &display_user, &score_user);

View File

@@ -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"); int nbr_custom = countCustomMaps("maps");
(*x) = 7; (*x) = 7;
(*y)= 5*(3+nbr_custom) +2; (*y)= 5*(3+nbr_custom) +7;
char **menu = creatArea2D(*x,*y); char **menu = creatArea2D(*x,*y);
int i = 1; int i = 1;
for (i = 1;i < *y-1; ++i) for (i = 1;i < *y-1; ++i)
{ {
menu[4][i] = EMPTY; menu[4][i] = EMPTY;
if (i == *y-2)
{
menu[4][i] = BUTTON;
}
} }
int j,k ; int j,k ;
for (j = 5; j < *y; j+=5) for (j = 5; j < *y-5; j+=5)
{ {
for (k = 1 ; k < 4; ++k) for (k = 1 ; k < 4; ++k)
{ {
menu[k][j] = EMPTY; if (k == 1)
{
menu[k][j] = BUTTON;
}
else
{
menu[k][j] = EMPTY;
}
} }
} }
return menu; return menu;