From f716b57ff9a2460c034c5411b80149c27e397a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Arreola=20Rodr=C3=ADguez?= Date: Sun, 4 Sep 2022 20:58:21 -0500 Subject: [PATCH] Agrego pantalla de fin perfecto. --- data/Makefile.am | 1 + data/images/gamefinish.png | Bin 0 -> 7936 bytes src/beans.c | 174 ++++++++++++++++++++++++------------- 3 files changed, 114 insertions(+), 61 deletions(-) create mode 100644 data/images/gamefinish.png diff --git a/data/Makefile.am b/data/Makefile.am index 7d94b88..36b52d2 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -136,6 +136,7 @@ nobase_dist_gamedata_DATA = images/background.png \ images/crash_3.png \ images/crash_4.png \ images/gameintro.png \ + images/gamefinish.png \ images/penguin_intro_back.png \ images/penguin_intro_color.png \ images/penguin_intro_front.png \ diff --git a/data/images/gamefinish.png b/data/images/gamefinish.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0f89b5d572a1b7ba6a1d0b7bbafbdd84dac6ee GIT binary patch literal 7936 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 0) { - /* fprintf (stdout, "Evento: %i\n", event.type);*/ - switch (event.type) { - case SDL_QUIT: - /* Vamos a cerrar la aplicación */ - done = GAME_QUIT; - break; - case SDL_MOUSEMOTION: - break; - case SDL_MOUSEBUTTONDOWN: - break; - case SDL_MOUSEBUTTONUP: - break; - case SDL_KEYDOWN: - /* Tengo una tecla presionada */ - key = event.key.keysym.sym; - - if (key == SDLK_F11 || (key == SDLK_RETURN && (event.key.keysym.mod & KMOD_ALT))) { - SDL_WM_ToggleFullScreen (screen); - } - if (key == SDLK_ESCAPE) { - done = GAME_QUIT; - } - break; - } - } - - SDL_Flip (screen); - - now_time = SDL_GetTicks (); - if (now_time < last_time + FPS) SDL_Delay(last_time + FPS - now_time); - - } while (!done); - - return done; -} -#endif - int game_loop (void) { int done = 0; SDL_Event event; SDLKey key; Uint32 last_time, now_time; SDL_Rect rect; - int penguinx, handposx; + int penguinx, handposx, handposy; BeanBag *thisbag, *nextbag; int bags = 0; @@ -1306,6 +1266,13 @@ int game_loop (void) { char buffer[20]; SDL_Surface *numbers[3][20]; double z; + int map; + Uint32 blanco2; + SDL_Surface *trans; + + trans = SDL_CreateRGBSurface (SDL_SWSURFACE | SDL_SRCALPHA, texts[TEXT_GET_PAID]->w, texts[TEXT_GET_PAID]->h, 32, RMASK, GMASK, BMASK, AMASK); + blanco2 = SDL_MapRGBA (trans->format, 255, 255, 255, 128); + SDL_FillRect (trans, NULL, blanco2); /* Blanco */ SDL_Color negro, blanco, amarillo; blanco.r = blanco.g = blanco.b = 255; @@ -1385,9 +1352,21 @@ int game_loop (void) { } } } + map = map_button_in_game (event.button.x, event.button.y, next_level_visible); + cp_button_down (map); break; case SDL_MOUSEBUTTONUP: - /* Tengo un mouse Up */ + map_button_in_game (event.button.x, event.button.y, next_level_visible); + map = cp_button_up (map); + + switch (map) { + case BUTTON_GET_BONUS: + done = 1; + break; + /*case BUTTON_EXPLAIN_PLAY_GAME: + done = 1; + break;*/ + } break; case SDL_KEYDOWN: /* Tengo una tecla presionada */ @@ -1403,9 +1382,13 @@ int game_loop (void) { } } - if (bags < 6 && next_level_visible == NO_NEXT_LEVEL) { - SDL_GetMouseState (&handposx, NULL); + SDL_GetMouseState (&handposx, &handposy); + /* Debido a que ignoramos eventos, hay que manejar el mouse motion aquí */ + map = map_button_in_game (handposx, handposy, next_level_visible); + cp_button_motion (map); + + if (bags < 6 && next_level_visible == NO_NEXT_LEVEL) { penguinx = handposx; if (penguinx < 190) { penguinx = 190; @@ -1640,7 +1623,7 @@ int game_loop (void) { } thisbag = nextbag; - } + } /* Fin del recorrer bolsas */ SDL_BlitSurface (images[IMG_BACKGROUND], NULL, screen, NULL); @@ -1912,7 +1895,53 @@ int game_loop (void) { animacion++; } - if (next_level_visible == NEXT_LEVEL) { + if (next_level_visible == GAME_WIN) { + /* Dibujar la pantalla de fin */ + rect.x = 144; + rect.y = 59; + rect.w = images[IMG_GAMEFINISH]->w; + rect.h = images[IMG_GAMEFINISH]->h; + + SDL_BlitSurface (images[IMG_GAMEFINISH], NULL, screen, &rect); + + rect.x = 144 + (images[IMG_GAMEFINISH]->w - texts[TEXT_CONGRATULATIONS]->w) / 2; + rect.y = 93; + rect.w = texts[TEXT_CONGRATULATIONS]->w; + rect.h = texts[TEXT_CONGRATULATIONS]->h; + + SDL_BlitSurface (texts[TEXT_CONGRATULATIONS], NULL, screen, &rect); + + rect.x = 144 + (images[IMG_GAMEFINISH]->w - texts[TEXT_BONUS]->w) / 2; + rect.y = 162; + rect.w = texts[TEXT_BONUS]->w; + rect.h = texts[TEXT_BONUS]->h; + + SDL_BlitSurface (texts[TEXT_BONUS], NULL, screen, &rect); + + rect.x = 144 + (images[IMG_GAMEFINISH]->w - texts[TEXT_GET_PAID]->w) / 2; + rect.y = 293; + rect.w = texts[TEXT_GET_PAID]->w; + rect.h = texts[TEXT_GET_PAID]->h; + + SDL_BlitSurface (texts[TEXT_GET_PAID], NULL, screen, &rect); + + if (cp_button_frames[BUTTON_GET_BONUS] != BLANK_UP) { + rect.x = 144 + (images[IMG_GAMEFINISH]->w - texts[TEXT_GET_PAID]->w) / 2;; + rect.y = 293; + rect.w = trans->w; + rect.h = trans->h; + + SDL_BlitSurface (trans, NULL, screen, &rect); + } + + /* Dibujar el camión normal */ + rect.x = 568; + rect.y = 72; + rect.w = images[IMG_TRUCK]->w; + rect.h = images[IMG_TRUCK]->h; + + SDL_BlitSurface (images[IMG_TRUCK], NULL, screen, &rect); + } else if (next_level_visible == NEXT_LEVEL) { if (animacion == 0) { if (use_sound) Mix_PlayChannel (-1, sounds[SND_TRUCK], 0); } else if (animacion == 56) { @@ -2014,6 +2043,8 @@ int game_loop (void) { } } + SDL_FreeSurface (trans); + return done; } /* Set video mode: */ @@ -2034,6 +2065,7 @@ void setup (void) { char *systemdata_path = get_systemdata_path (); Collider *c; TTF_Font *ttf48_klickclack, *ttf52_klickclack, *ttf40_klickclack, *ttf18_burbank; + TTF_Font *ttf35_klickclack, *ttf26_klickclack; /* Inicializar el Video SDL */ if (SDL_Init(SDL_INIT_VIDEO) < 0) { @@ -2180,8 +2212,11 @@ void setup (void) { ttf48_klickclack = TTF_OpenFont (buffer_file, 48); ttf40_klickclack = TTF_OpenFont (buffer_file, 40); ttf52_klickclack = TTF_OpenFont (buffer_file, 52); + ttf35_klickclack = TTF_OpenFont (buffer_file, 35); + ttf26_klickclack = TTF_OpenFont (buffer_file, 26); - if (!ttf24_klickclack || !ttf196_klickclack || !ttf48_klickclack || !ttf52_klickclack || !ttf40_klickclack) { + if (!ttf24_klickclack || !ttf196_klickclack || !ttf48_klickclack || !ttf52_klickclack || + !ttf40_klickclack || !ttf35_klickclack || !ttf26_klickclack) { fprintf (stderr, _("Failed to load font file 'Klick Clack'\n" "The error returned by SDL is:\n" @@ -2246,10 +2281,16 @@ void setup (void) { texts[TEXT_ONE_UP] = draw_text_with_shadow (ttf44_comiccrazy, 3, _(text_strings[TEXT_ONE_UP]), amarillo, negro); + texts[TEXT_CONGRATULATIONS] = draw_text (ttf35_klickclack, _(text_strings[TEXT_CONGRATULATIONS]), &azul1); + texts[TEXT_BONUS] = draw_text (ttf18_burbank, _(text_strings[TEXT_BONUS]), &azul1); + texts[TEXT_GET_PAID] = draw_text (ttf26_klickclack, _(text_strings[TEXT_GET_PAID]), &azul1); + TTF_CloseFont (ttf18_burbank); TTF_CloseFont (ttf48_klickclack); TTF_CloseFont (ttf52_klickclack); TTF_CloseFont (ttf40_klickclack); + TTF_CloseFont (ttf35_klickclack); + TTF_CloseFont (ttf26_klickclack); } void setup_and_color_penguin (void) { @@ -2477,3 +2518,14 @@ int map_button_in_explain (int x, int y, int escena) { return BUTTON_NONE; } +int map_button_in_game (int x, int y, int next_level) { + int sub_x; + if (next_level == GAME_WIN) { + sub_x = 144 + (images[IMG_GAMEFINISH]->w - texts[TEXT_GET_PAID]->w) / 2; + if (x >= sub_x && x < sub_x + texts[TEXT_GET_PAID]->w && y >= 293 && y < 293 + texts[TEXT_GET_PAID]->h) { + return BUTTON_GET_BONUS; + } + } + return BUTTON_NONE; +} +