menu affichage

This commit is contained in:
2024-12-28 17:53:03 +01:00
parent cabdc9b3de
commit ceffa3f628
3 changed files with 76 additions and 22 deletions

View File

@@ -47,8 +47,9 @@ bool isWin (char **tab2d, vect *targets, int nbr_targets);
bool islose (char **tab2d, const int N); bool islose (char **tab2d, const int N);
bool blockBox (char **tab2d, vect box_coor); bool blockBox (char **tab2d, vect box_coor);
vect plusVect (vect one, vect two); vect plusVect (vect one, vect two);
void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos,
vect *targets, int nbr_targets, dis *display_user, score *score_user, bool menu); int 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); char *timeToText(time_t time);
#endif // FONCTION_H #endif // FONCTION_H

View File

@@ -114,6 +114,10 @@ char canIGoDirection (char valueOfNCase, char valueOfNPlusOneCase)
// move the box but player on a target // move the box but player on a target
return 5; return 5;
} }
if (valueOfNCase == BUTTON)
{
return 7;
}
if (valueOfNCase == TARGET) if (valueOfNCase == TARGET)
{ {
// move player on target // move player on target
@@ -215,6 +219,9 @@ tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER;
= PLAYER_ON_TARGET; = PLAYER_ON_TARGET;
score_user->move_box++; score_user->move_box++;
break; break;
case 7:
tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER_ON_BUTTON;
break;
default: default:
printf ("Commande inconnue !\n"); printf ("Commande inconnue !\n");
} }
@@ -225,6 +232,10 @@ tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER;
{ {
tab[playerPos->x][playerPos->y] = TARGET; tab[playerPos->x][playerPos->y] = TARGET;
} }
else if(playerState == PLAYER_ON_BUTTON)
{
tab[playerPos->x][playerPos->y] = BUTTON;
}
else else
{ {
tab[playerPos->x][playerPos->y] = EMPTY; tab[playerPos->x][playerPos->y] = EMPTY;
@@ -248,11 +259,12 @@ tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER;
* du joueur. * du joueur.
* \return Void * \return Void
*/ */
void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets, int inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
int nbr_targets, dis *display_user, score *score_user, bool menu) int nbr_targets, dis *display_user, score *score_user, bool menu)
{ {
int fov = -1; int fov = -1;
if (menu) fov = 5; int indice_button = -1;
vect size_menu vect size_menu
= { display_user->size_menu - 10, display_user->size_window / 3 - 10 }; = { display_user->size_menu - 10, display_user->size_window / 3 - 10 };
vect coor_time vect coor_time
@@ -263,8 +275,13 @@ void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
vect coor_move_box vect coor_move_box
= { (display_user->size_window / 3) * 2 + 10, = { (display_user->size_window / 3) * 2 + 10,
display_user->size_window - display_user->size_menu + 10 }; display_user->size_window - display_user->size_menu + 10 };
if (menu) fov = 5;
else{
displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu, 50); displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu, 50);
displayTextSDL (display_user, "MB : 0", coor_move_box, size_menu, 50); displayTextSDL (display_user, "MB : 0", coor_move_box, size_menu, 50);
}
time_t time_start = time (NULL); time_t time_start = time (NULL);
time_t current_time = time (NULL); time_t current_time = time (NULL);
time_t delay = 0; time_t delay = 0;
@@ -302,13 +319,18 @@ void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
direction.x = 1; direction.x = 1;
direction.y = 0; direction.y = 0;
break; break;
case SDL_SCANCODE_RETURN:
if (tab2d[playerPos->x][playerPos->y] == PLAYER_ON_BUTTON) return indice_button;
break;
default: default:
direction.x = 0; direction.x = 0;
direction.y = 0; direction.y = 0;
} }
move (tab2d, playerPos, direction, score_user); move (tab2d, playerPos, direction, score_user);
screenDisplayGameSDL (tab2d, *dim_tab, display_user, playerPos, fov); screenDisplayGameSDL (tab2d, *dim_tab, display_user, playerPos, fov);
if (!menu)
{
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];
@@ -328,6 +350,36 @@ void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
puts ("lose!"); puts ("lose!");
finish = true; finish = true;
} }
}
else if (tab2d[playerPos->x][playerPos->y] == PLAYER_ON_BUTTON)
{
vect size_txt = {display_user->size_menu, display_user->size_window};
char txt_empty[100] = " ";
displayTextSDL (display_user, txt_empty, coor_time, size_txt, 100);
char txt_button[50] = "";
indice_button = playerPos->y / 5;
if(indice_button <= 3)
{
snprintf(txt_button, 50, "Voulez-vous faire le niveau Original %d ?", indice_button );
}
else if (indice_button == dim_tab->y /5)
{
snprintf(txt_button, 50, "Voulez-vous faire une map Custom (%d)?", indice_button-3);
}
else
{
snprintf(txt_button, 50, "Voulez-vous faire le niveau Custom %d ?", indice_button - 3);
}
displayTextSDL (display_user, txt_button, coor_time, size_txt, 50);
}
else {
vect size_txt = {display_user->size_menu, display_user->size_window};
char txt_empty[100] = " ";
displayTextSDL (display_user, txt_empty, coor_time, size_txt, 100);
}
} }
} }
current_time = time (NULL); current_time = time (NULL);
@@ -335,12 +387,13 @@ void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
{ {
delay = current_time; delay = current_time;
char *char_time = timeToText (time (NULL) - time_start); char *char_time = timeToText (time (NULL) - time_start);
displayTextSDL (display_user, char_time, coor_time, size_menu, 50); if (!menu) displayTextSDL (display_user, char_time, coor_time, size_menu, 50);
free (char_time); free (char_time);
} }
SDL_Delay (16); SDL_Delay (16);
} }
return -1;
} }

View File

@@ -43,7 +43,7 @@ int main ()
= fileToTab2D ("maps/original_1.txt", tab2d, SIZE_PLAY, playerPos, &nbr_targets); = fileToTab2D ("maps/original_1.txt", tab2d, SIZE_PLAY, playerPos, &nbr_targets);
inGameLoop (menu, &dim_menu, &pos, targets, nbr_targets, inGameLoop (menu, &dim_menu, &pos, targets, nbr_targets,
&display_user, &score_user, true); &display_user, &score_user, true);
SDL_RenderClear(display_user.renderer);
vect dim = {SIZE_PLAY, SIZE_PLAY}; vect dim = {SIZE_PLAY, SIZE_PLAY};
inGameLoop (tab2d, &dim, playerPos, targets, nbr_targets, inGameLoop (tab2d, &dim, playerPos, targets, nbr_targets,
&display_user, &score_user, false); &display_user, &score_user, false);