Agrego pantalla de fin perfecto.
parent
c43da2cd0d
commit
f716b57ff9
|
@ -136,6 +136,7 @@ nobase_dist_gamedata_DATA = images/background.png \
|
||||||
images/crash_3.png \
|
images/crash_3.png \
|
||||||
images/crash_4.png \
|
images/crash_4.png \
|
||||||
images/gameintro.png \
|
images/gameintro.png \
|
||||||
|
images/gamefinish.png \
|
||||||
images/penguin_intro_back.png \
|
images/penguin_intro_back.png \
|
||||||
images/penguin_intro_color.png \
|
images/penguin_intro_color.png \
|
||||||
images/penguin_intro_front.png \
|
images/penguin_intro_front.png \
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 7.8 KiB |
174
src/beans.c
174
src/beans.c
|
@ -75,6 +75,7 @@
|
||||||
/* Enumerar las imágenes */
|
/* Enumerar las imágenes */
|
||||||
enum {
|
enum {
|
||||||
IMG_GAMEINTRO,
|
IMG_GAMEINTRO,
|
||||||
|
IMG_GAMEFINISH,
|
||||||
|
|
||||||
IMG_PENGUIN_INTRO_BACK,
|
IMG_PENGUIN_INTRO_BACK,
|
||||||
IMG_PENGUIN_INTRO_COLOR,
|
IMG_PENGUIN_INTRO_COLOR,
|
||||||
|
@ -205,6 +206,7 @@ enum {
|
||||||
/* Los nombres de archivos */
|
/* Los nombres de archivos */
|
||||||
const char *images_names[NUM_IMAGES] = {
|
const char *images_names[NUM_IMAGES] = {
|
||||||
"images/gameintro.png",
|
"images/gameintro.png",
|
||||||
|
"images/gamefinish.png",
|
||||||
|
|
||||||
"images/penguin_intro_back.png",
|
"images/penguin_intro_back.png",
|
||||||
"images/penguin_intro_color.png",
|
"images/penguin_intro_color.png",
|
||||||
|
@ -370,6 +372,8 @@ enum {
|
||||||
BUTTON_NEXT_PAGE,
|
BUTTON_NEXT_PAGE,
|
||||||
BUTTON_EXPLAIN_PLAY_GAME,
|
BUTTON_EXPLAIN_PLAY_GAME,
|
||||||
|
|
||||||
|
BUTTON_GET_BONUS,
|
||||||
|
|
||||||
NUM_BUTTONS
|
NUM_BUTTONS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -565,6 +569,10 @@ enum {
|
||||||
|
|
||||||
TEXT_ONE_UP,
|
TEXT_ONE_UP,
|
||||||
|
|
||||||
|
TEXT_CONGRATULATIONS,
|
||||||
|
TEXT_BONUS,
|
||||||
|
TEXT_GET_PAID,
|
||||||
|
|
||||||
NUM_TEXTS
|
NUM_TEXTS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -594,6 +602,10 @@ const char *text_strings[NUM_TEXTS] = {
|
||||||
gettext_noop ("Click left mouse button when at the red platform to\ndrop off bags (if you have any)."),
|
gettext_noop ("Click left mouse button when at the red platform to\ndrop off bags (if you have any)."),
|
||||||
|
|
||||||
gettext_noop ("1 Up"),
|
gettext_noop ("1 Up"),
|
||||||
|
|
||||||
|
gettext_noop ("CONGRATULATIONS!!!"),
|
||||||
|
gettext_noop ("All the trucks have been unloaded! You are a\nperfect employee! You get a 60 coin bonus!"),
|
||||||
|
gettext_noop ("CLICK HERE to GET PAID!!!"),
|
||||||
};
|
};
|
||||||
|
|
||||||
const SDL_Color penguin_colors[18] = {
|
const SDL_Color penguin_colors[18] = {
|
||||||
|
@ -649,6 +661,7 @@ void add_bag (int tipo);
|
||||||
void delete_bag (BeanBag *p);
|
void delete_bag (BeanBag *p);
|
||||||
int map_button_in_intro (int x, int y);
|
int map_button_in_intro (int x, int y);
|
||||||
int map_button_in_explain (int x, int y, int escena);
|
int map_button_in_explain (int x, int y, int escena);
|
||||||
|
int map_button_in_game (int x, int y, int next_level);
|
||||||
|
|
||||||
/* Variables globales */
|
/* Variables globales */
|
||||||
SDL_Surface * screen;
|
SDL_Surface * screen;
|
||||||
|
@ -690,13 +703,13 @@ int main (int argc, char *argv[]) {
|
||||||
cp_registrar_boton (BUTTON_UI_PLAY_GAME, BLANK_UP);
|
cp_registrar_boton (BUTTON_UI_PLAY_GAME, BLANK_UP);
|
||||||
cp_registrar_boton (BUTTON_NEXT_PAGE, BLANK_UP);
|
cp_registrar_boton (BUTTON_NEXT_PAGE, BLANK_UP);
|
||||||
cp_registrar_boton (BUTTON_EXPLAIN_PLAY_GAME, BLANK_UP);
|
cp_registrar_boton (BUTTON_EXPLAIN_PLAY_GAME, BLANK_UP);
|
||||||
|
cp_registrar_boton (BUTTON_GET_BONUS, BLANK_UP);
|
||||||
|
|
||||||
cp_button_start ();
|
cp_button_start ();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (game_intro () == GAME_QUIT) break;
|
if (game_intro () == GAME_QUIT) break;
|
||||||
if (game_loop () == GAME_QUIT) break;
|
if (game_loop () == GAME_QUIT) break;
|
||||||
//if (game_finish () == GAME_QUIT) break;
|
|
||||||
} while (1 == 0);
|
} while (1 == 0);
|
||||||
|
|
||||||
SDL_Quit ();
|
SDL_Quit ();
|
||||||
|
@ -1222,66 +1235,13 @@ int game_explain (void) {
|
||||||
return done;
|
return done;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
int game_finish (void) {
|
|
||||||
int done = 0;
|
|
||||||
SDL_Event event;
|
|
||||||
SDLKey key;
|
|
||||||
SDL_Rect rect;
|
|
||||||
Uint32 last_time, now_time;
|
|
||||||
|
|
||||||
/* Predibujar todo */
|
|
||||||
SDL_FillRect (screen, NULL, 0);
|
|
||||||
SDL_Flip (screen);
|
|
||||||
|
|
||||||
do {
|
|
||||||
last_time = SDL_GetTicks ();
|
|
||||||
|
|
||||||
while (SDL_PollEvent(&event) > 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 game_loop (void) {
|
||||||
int done = 0;
|
int done = 0;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
SDLKey key;
|
SDLKey key;
|
||||||
Uint32 last_time, now_time;
|
Uint32 last_time, now_time;
|
||||||
SDL_Rect rect;
|
SDL_Rect rect;
|
||||||
int penguinx, handposx;
|
int penguinx, handposx, handposy;
|
||||||
BeanBag *thisbag, *nextbag;
|
BeanBag *thisbag, *nextbag;
|
||||||
|
|
||||||
int bags = 0;
|
int bags = 0;
|
||||||
|
@ -1306,6 +1266,13 @@ int game_loop (void) {
|
||||||
char buffer[20];
|
char buffer[20];
|
||||||
SDL_Surface *numbers[3][20];
|
SDL_Surface *numbers[3][20];
|
||||||
double z;
|
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;
|
SDL_Color negro, blanco, amarillo;
|
||||||
blanco.r = blanco.g = blanco.b = 255;
|
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;
|
break;
|
||||||
case SDL_MOUSEBUTTONUP:
|
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;
|
break;
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
/* Tengo una tecla presionada */
|
/* Tengo una tecla presionada */
|
||||||
|
@ -1403,9 +1382,13 @@ int game_loop (void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bags < 6 && next_level_visible == NO_NEXT_LEVEL) {
|
SDL_GetMouseState (&handposx, &handposy);
|
||||||
SDL_GetMouseState (&handposx, NULL);
|
|
||||||
|
|
||||||
|
/* 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;
|
penguinx = handposx;
|
||||||
if (penguinx < 190) {
|
if (penguinx < 190) {
|
||||||
penguinx = 190;
|
penguinx = 190;
|
||||||
|
@ -1640,7 +1623,7 @@ int game_loop (void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
thisbag = nextbag;
|
thisbag = nextbag;
|
||||||
}
|
} /* Fin del recorrer bolsas */
|
||||||
|
|
||||||
SDL_BlitSurface (images[IMG_BACKGROUND], NULL, screen, NULL);
|
SDL_BlitSurface (images[IMG_BACKGROUND], NULL, screen, NULL);
|
||||||
|
|
||||||
|
@ -1912,7 +1895,53 @@ int game_loop (void) {
|
||||||
animacion++;
|
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 (animacion == 0) {
|
||||||
if (use_sound) Mix_PlayChannel (-1, sounds[SND_TRUCK], 0);
|
if (use_sound) Mix_PlayChannel (-1, sounds[SND_TRUCK], 0);
|
||||||
} else if (animacion == 56) {
|
} else if (animacion == 56) {
|
||||||
|
@ -2014,6 +2043,8 @@ int game_loop (void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_FreeSurface (trans);
|
||||||
|
|
||||||
return done;
|
return done;
|
||||||
}
|
}
|
||||||
/* Set video mode: */
|
/* Set video mode: */
|
||||||
|
@ -2034,6 +2065,7 @@ void setup (void) {
|
||||||
char *systemdata_path = get_systemdata_path ();
|
char *systemdata_path = get_systemdata_path ();
|
||||||
Collider *c;
|
Collider *c;
|
||||||
TTF_Font *ttf48_klickclack, *ttf52_klickclack, *ttf40_klickclack, *ttf18_burbank;
|
TTF_Font *ttf48_klickclack, *ttf52_klickclack, *ttf40_klickclack, *ttf18_burbank;
|
||||||
|
TTF_Font *ttf35_klickclack, *ttf26_klickclack;
|
||||||
|
|
||||||
/* Inicializar el Video SDL */
|
/* Inicializar el Video SDL */
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||||
|
@ -2180,8 +2212,11 @@ void setup (void) {
|
||||||
ttf48_klickclack = TTF_OpenFont (buffer_file, 48);
|
ttf48_klickclack = TTF_OpenFont (buffer_file, 48);
|
||||||
ttf40_klickclack = TTF_OpenFont (buffer_file, 40);
|
ttf40_klickclack = TTF_OpenFont (buffer_file, 40);
|
||||||
ttf52_klickclack = TTF_OpenFont (buffer_file, 52);
|
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,
|
fprintf (stderr,
|
||||||
_("Failed to load font file 'Klick Clack'\n"
|
_("Failed to load font file 'Klick Clack'\n"
|
||||||
"The error returned by SDL is:\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_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 (ttf18_burbank);
|
||||||
TTF_CloseFont (ttf48_klickclack);
|
TTF_CloseFont (ttf48_klickclack);
|
||||||
TTF_CloseFont (ttf52_klickclack);
|
TTF_CloseFont (ttf52_klickclack);
|
||||||
TTF_CloseFont (ttf40_klickclack);
|
TTF_CloseFont (ttf40_klickclack);
|
||||||
|
TTF_CloseFont (ttf35_klickclack);
|
||||||
|
TTF_CloseFont (ttf26_klickclack);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_and_color_penguin (void) {
|
void setup_and_color_penguin (void) {
|
||||||
|
@ -2477,3 +2518,14 @@ int map_button_in_explain (int x, int y, int escena) {
|
||||||
return BUTTON_NONE;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue