ajout de la fonctionalite fermer avec la croix

This commit is contained in:
cyjullien1
2025-01-06 12:10:19 +01:00
parent 42a0aa7dd5
commit ae41297a87
7 changed files with 117 additions and 8 deletions

Binary file not shown.

BIN
image/lose.png LFS

Binary file not shown.

BIN
image/win.png LFS

Binary file not shown.

View File

@@ -54,5 +54,6 @@ char *timeToText(time_t time);
void nullScore(score *player_score);
void winOrLoseLoop(dis *display_user,score *score_user, bool win);
unsigned int scoreCalculator(score *score_user, bool win);
int inEditorLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
int nbr_targets, dis *display_user, score *score_user);
#endif // FONCTION_H

5
maps/custom_3.txt Normal file
View File

@@ -0,0 +1,5 @@
##########
#PC I#
# C #
#I #
##########

View File

@@ -304,6 +304,10 @@ int inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
{
while (SDL_PollEvent (&event))
{
if (event.type == SDL_QUIT) {
return 0; // Quitter si l'utilisateur ferme la fenêtre
}
if (event.type == SDL_KEYDOWN)
{
input = event.key.keysym.scancode;
@@ -424,6 +428,96 @@ int inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
return -1;
}
/**
*
* \brief La fonction permet de faire la boucle de l'éditeur.
* \param tab2d Le tableau 2d carre.
* \param N LE nombre d'element de tab2d.
* \param playerPos La position de depart du joueur.
* \param targets Le tableau de toutes les positions des points d'interer de la
* maps.
* \param int nbr_targets Le nombre de point d'interer.
* \param display_user Tout les information SDL pour afficher le jeu.
* \param score_user Toute les données nécessaire pour calculer le score fini
* du joueur.
* \return renvoie -2 ce qui signifie l'editeur
*/
int inEditorLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets,
int nbr_targets, dis *display_user, score *score_user)
{
int fov = -1;
int indice_button = -1;
vect size_menu
= { display_user->size_menu - 10, display_user->size_window / 3 - 10 };
vect coor_time
= { 40, display_user->size_window - display_user->size_menu + 50 };
vect coor_move_player
= { display_user->size_window / 3 + 60,
display_user->size_window - display_user->size_menu + 50 };
vect coor_move_box
= { (display_user->size_window / 3) * 2 + 10,
display_user->size_window - display_user->size_menu + 50 };
char input;
bool finish = false;
SDL_Event event;
screenDisplayGameSDL (tab2d, *dim_tab, display_user, playerPos, fov);
while (!finish)
{
while (SDL_PollEvent (&event))
{
if (event.type == SDL_QUIT) {
return 0; // Quitter si l'utilisateur ferme la fenêtre
}
if (event.type == SDL_MOUSEBUTTONDOWN) {
if (event.button.button == SDL_BUTTON_LEFT) {
// Lorsque le clic gauche est effectué
int x, y;
SDL_GetMouseState(&x, &y); // Récupérer la position de la souris
printf("Clic gauche à la position: (%d, %d)\n", x, y);
}
}
if (event.type == SDL_KEYDOWN)
{
input = event.key.keysym.scancode;
switch (input)
{
case SDL_SCANCODE_ESCAPE:
return -1000;
finish = true;
break;
case SDL_SCANCODE_D:
break;
case SDL_SCANCODE_A:
break;
case SDL_SCANCODE_W:
break;
case SDL_SCANCODE_S:
break;
case SDL_SCANCODE_RETURN:
if (tab2d[playerPos->x][playerPos->y] == PLAYER_ON_BUTTON)
return indice_button;
break;
default:
}
screenDisplayGameSDL (tab2d, *dim_tab, display_user, playerPos,
fov);
}
}
SDL_Delay (16);
}
return -2;
}
/**
* \brief Cette fonction verrifie si la partie est gagnante.
* \param tab2d Le tableau 2D du jeu.
@@ -686,3 +780,6 @@ unsigned int scoreCalculator(score *score_user, bool win)
}
return result;
}

View File

@@ -43,11 +43,12 @@ int main ()
&display_user, &score_user, true);
nullScore(&score_user);
SDL_RenderClear(display_user.renderer);
SDL_Event event;
// Loop pour le jeu entier menu et les jeux.
while(output != 0)
{
SDL_RenderClear(display_user.renderer);
backgroundDisplay(&display_user);
if(output == -1)
@@ -57,6 +58,10 @@ int main ()
output = inGameLoop(menu, &dim_menu, &pos, &null, 1, &display_user, &score_user, true);
nullScore(&score_user);
}
else if(output == -2)
{
output = inEditorLoop(menu, &dim_menu, &pos, &null, 1, &display_user, &score_user);
}
else
{
score_user.before = time(NULL);
@@ -79,6 +84,7 @@ int main ()
if(output != -1000) winOrLoseLoop(&display_user, &score_user, output==1);
output = -1;
}
}