diff --git a/include/function.h b/include/function.h index 450ca78..3cedfb9 100644 --- a/include/function.h +++ b/include/function.h @@ -47,8 +47,9 @@ 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, 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); #endif // FONCTION_H diff --git a/script/function.c b/script/function.c index 0dfcd80..4c9758f 100644 --- a/script/function.c +++ b/script/function.c @@ -114,6 +114,10 @@ char canIGoDirection (char valueOfNCase, char valueOfNPlusOneCase) // move the box but player on a target return 5; } + if (valueOfNCase == BUTTON) + { + return 7; + } if (valueOfNCase == TARGET) { // move player on target @@ -215,6 +219,9 @@ tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER; = PLAYER_ON_TARGET; score_user->move_box++; break; + case 7: + tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER_ON_BUTTON; + break; default: printf ("Commande inconnue !\n"); } @@ -225,6 +232,10 @@ tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER; { tab[playerPos->x][playerPos->y] = TARGET; } + else if(playerState == PLAYER_ON_BUTTON) + { + tab[playerPos->x][playerPos->y] = BUTTON; + } else { tab[playerPos->x][playerPos->y] = EMPTY; @@ -248,11 +259,12 @@ tab[playerPos->x + direction.x][playerPos->y + direction.y] = PLAYER; * du joueur. * \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 fov = -1; - if (menu) fov = 5; + int indice_button = -1; + vect size_menu = { display_user->size_menu - 10, display_user->size_window / 3 - 10 }; vect coor_time @@ -263,8 +275,13 @@ void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets, vect coor_move_box = { (display_user->size_window / 3) * 2 + 10, display_user->size_window - display_user->size_menu + 10 }; - displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu, 50); - displayTextSDL (display_user, "MB : 0", coor_move_box, size_menu, 50); + + if (menu) fov = 5; + else{ + displayTextSDL (display_user, "MP : 0", coor_move_player, size_menu, 50); + displayTextSDL (display_user, "MB : 0", coor_move_box, size_menu, 50); + } + time_t time_start = time (NULL); time_t current_time = time (NULL); time_t delay = 0; @@ -302,32 +319,67 @@ void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets, direction.x = 1; direction.y = 0; break; + case SDL_SCANCODE_RETURN: + if (tab2d[playerPos->x][playerPos->y] == PLAYER_ON_BUTTON) return indice_button; + break; default: direction.x = 0; direction.y = 0; } move (tab2d, playerPos, direction, score_user); - 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]; - snprintf (nbr_b, 20, "MB : %d", score_user->move_box); + if (!menu) + { - displayTextSDL (display_user, nbr_p, coor_move_player, + char nbr_p[20]; + snprintf (nbr_p, 20, "MP : %d", score_user->move_player); + char nbr_b[20]; + snprintf (nbr_b, 20, "MB : %d", score_user->move_box); + + displayTextSDL (display_user, nbr_p, coor_move_player, size_menu, 50); - displayTextSDL (display_user, nbr_b, coor_move_box, size_menu, + displayTextSDL (display_user, nbr_b, coor_move_box, size_menu, 50); - if (isWin (tab2d, targets, nbr_targets)) - { - puts ("Win!"); - finish = true; + if (isWin (tab2d, targets, nbr_targets)) + { + puts ("Win!"); + finish = true; + } + if (islose (tab2d, dim_tab->x)) + { + puts ("lose!"); + finish = true; + } + } - if (islose (tab2d, dim_tab->x)) + else if (tab2d[playerPos->x][playerPos->y] == PLAYER_ON_BUTTON) { - puts ("lose!"); - finish = true; + 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); @@ -335,12 +387,13 @@ void inGameLoop (char **tab2d, vect *dim_tab, vect *playerPos, vect *targets, { delay = current_time; 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); } SDL_Delay (16); } + return -1; } diff --git a/script/main.c b/script/main.c index e7705ee..c339633 100644 --- a/script/main.c +++ b/script/main.c @@ -43,7 +43,7 @@ int main () = fileToTab2D ("maps/original_1.txt", tab2d, SIZE_PLAY, playerPos, &nbr_targets); inGameLoop (menu, &dim_menu, &pos, targets, nbr_targets, &display_user, &score_user, true); - + SDL_RenderClear(display_user.renderer); vect dim = {SIZE_PLAY, SIZE_PLAY}; inGameLoop (tab2d, &dim, playerPos, targets, nbr_targets, &display_user, &score_user, false);