Agrego florero y su colisión.

master
Félix Arreola Rodríguez 2019-10-06 23:20:59 -05:00
parent decf73ee5f
commit 06bfe64baf
6 changed files with 124 additions and 11 deletions

View File

@ -128,7 +128,9 @@ nobase_dist_gamedata_DATA = images/background.png \
images/anvil_23.png \
images/oneup.png \
images/fish.png \
images/fish_dropped.png
images/fish_dropped.png \
images/flower.png \
images/flower_dropped.png
# Instalar los archivos .desktop e iconos
applicationsdir = $(datadir)/applications

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -190,6 +190,9 @@ enum {
IMG_FISH,
IMG_FISH_DROPPED,
IMG_FLOWER,
IMG_FLOWER_DROPPED,
NUM_IMAGES
};
@ -294,7 +297,10 @@ const char *images_names[NUM_IMAGES] = {
"images/oneup.png",
"images/fish.png",
"images/fish_dropped.png"
"images/fish_dropped.png",
"images/flower.png",
"images/flower_dropped.png"
};
enum {
@ -700,7 +706,7 @@ const int anvil_collider_offsets [23][2] = {
{482, 399}
};
const int fish_collider_offests [10][2] = {
const int fish_collider_offsets [10][2] = {
{337, 157},
{326, 173},
{315, 191},
@ -713,6 +719,20 @@ const int fish_collider_offests [10][2] = {
{240, 351},
};
const int flower_collider_offsets [11][2] = {
{465, 163},
{455, 174},
{446, 184},
{436, 194},
{427, 210},
{419, 226},
{410, 242},
{403, 264},
{396, 286},
{388, 308},
{381, 330}
};
const int oneup_offsets[35][2] = {
{636, 142},
{624, 130},
@ -789,6 +809,42 @@ const int fish_offsets[35][2] = {
{122, 433}
};
const int flower_offsets[32][2] = {
{646, 217},
{626, 192},
{606, 167},
{587, 147},
{569, 128},
{551, 115},
{534, 101},
{519, 94},
{503, 87},
{492, 85},
{481, 82},
{475, 82},
{467, 82},
{463, 83},
{457, 85},
{452, 86},
{443, 91},
{435, 95},
{426, 100},
{417, 110},
{408, 120},
{399, 131},
{390, 146},
{382, 162},
{374, 178},
{366, 198},
{359, 218},
{352, 239},
{345, 264},
{339, 288},
{332, 313},
{334, 382}
};
/* Prototipos de función */
int game_intro (void);
int game_loop (void);
@ -805,7 +861,7 @@ SDL_Surface * images[NUM_IMAGES];
SDL_Surface * penguin_images[NUM_PENGUIN_FRAMES];
int use_sound;
Collider *colliders[NUM_COLLIDERS];
Collider *colliders_hazard_anvil;
Collider *colliders_hazard_block;
Collider *colliders_hazard_fish[10];
int color_penguin = 0;
@ -951,7 +1007,7 @@ int game_loop (void) {
int bags = 0;
int penguin_frame = 0;
int i, j, k;
int i, j, k, l;
int vidas = 3;
int animacion;
int try_visible = FALSE, gameover_visible = FALSE;
@ -960,7 +1016,7 @@ int game_loop (void) {
int bag_activity = 15;
int airbone = 0, max_airbone = 1;
int nivel = 1;
int anvil_out = FALSE, fish_out = FALSE;
int anvil_out = FALSE, fish_out = FALSE, flower_out = FALSE;
int oneup_toggle = TRUE;
int fish_max = 4;
int fish_counter = 0;
@ -1082,6 +1138,10 @@ int game_loop (void) {
fish_counter++;
fish_out = TRUE;
airbone++;
} else if (i == 7 && nivel >= 4 && flower_out == FALSE) {
add_bag (7);
flower_out = TRUE;
airbone++;
}
}
}
@ -1132,12 +1192,13 @@ int game_loop (void) {
* score = score + (nivel * 2); */
}
airbone--;
printf ("Airbone: %i\n", airbone);
delete_bag (thisbag);
thisbag = nextbag;
continue;
}
} else if (j < 0 && thisbag->bag == 5 && next_level_visible == FALSE) {
i = collider_hittest (colliders_hazard_anvil, anvil_collider_offsets[thisbag->frame][0], anvil_collider_offsets[thisbag->frame][1], colliders[k], penguinx - 120, 251);
i = collider_hittest (colliders_hazard_block, anvil_collider_offsets[thisbag->frame][0], anvil_collider_offsets[thisbag->frame][1], colliders[k], penguinx - 120, 251);
if (i == SDL_TRUE) {
bags = 7;
@ -1177,10 +1238,10 @@ int game_loop (void) {
thisbag = nextbag;
continue;
}
} else if (thisbag->frame >= 22 && thisbag->frame <= 31 && thisbag->bag == 6 && next_level_visible == FALSE) {
k = thisbag->frame - 22;
} else if (thisbag->bag == 6 && thisbag->frame >= 22 && thisbag->frame <= 31 && next_level_visible == FALSE) {
l = thisbag->frame - 22;
i = collider_hittest (colliders_hazard_fish[k], fish_collider_offests[k][0], fish_collider_offests[k][1], colliders[k], penguinx - 120, 251);
i = collider_hittest (colliders_hazard_fish[l], fish_collider_offsets[l][0], fish_collider_offsets[l][1], colliders[k], penguinx - 120, 251);
if (i == SDL_TRUE) {
bags = 8;
@ -1202,6 +1263,31 @@ int game_loop (void) {
thisbag = nextbag;
continue;
}
} else if (thisbag->bag == 7 && thisbag->frame >= 18 && thisbag->frame <= 28 && next_level_visible == FALSE) {
l = thisbag->frame - 18;
i = collider_hittest (colliders_hazard_block, flower_collider_offsets[l][0], flower_collider_offsets[l][1], colliders[k], penguinx - 120, 251);
if (i == SDL_TRUE) {
bags = 9;
/* TODO: Reproducir el sonido de golpe de florero */
/* TODO: Acomodar la animación de "Crash" */
if (vidas > 0) {
try_visible = TRUE;
animacion = 0;
airbone = 1000; /* El airbone bloquea que salgan más objetos */
vidas--;
} else {
gameover_visible = TRUE;
}
flower_out = FALSE;
airbone--;
delete_bag (thisbag);
thisbag = nextbag;
continue;
}
}
if (thisbag->bag <= 3 && j == 0) {
@ -1215,6 +1301,9 @@ int game_loop (void) {
/* Eliminar el pescado del airbone */
airbone--;
fish_out = FALSE;
} else if (thisbag->bag == 7 && j == 0) {
airbone--;
flower_out = FALSE;
}
if (thisbag->bag == 4 && j >= 0) {
@ -1362,6 +1451,25 @@ int game_loop (void) {
} else {
SDL_BlitSurface (images[i], NULL, screen, &rect);
}
} else if (thisbag->bag == 7) {
if (thisbag->frame < thisbag->throw_length) {
i = IMG_FLOWER;
rect.x = thisbag->object_points[thisbag->frame][0];
rect.y = thisbag->object_points[thisbag->frame][1];
} else {
i = IMG_FLOWER_DROPPED;
rect.x = thisbag->object_points[31][0];
rect.y = thisbag->object_points[31][1];
j = thisbag->frame - thisbag->throw_length;
}
rect.w = images[i]->w;
rect.h = images[i]->h;
if (i == IMG_FLOWER_DROPPED && j > 25) {
SDL_gfxBlitRGBAWithAlpha (images[i], NULL, screen, &rect, 255 - SDL_ALPHA_OPAQUE * (j - 25) / 10);
} else {
SDL_BlitSurface (images[i], NULL, screen, &rect);
}
}
thisbag = thisbag->next;
@ -1529,7 +1637,7 @@ void setup (void) {
}
/* Generar los colliders de bloque */
colliders_hazard_anvil = collider_new_block (9, 45);
colliders_hazard_block = collider_new_block (9, 45);
colliders_hazard_fish[0] = collider_new_block (22, 18);
colliders_hazard_fish[1] = collider_new_block (21, 18);
@ -1764,6 +1872,9 @@ void add_bag (int tipo) {
} else if (tipo == 6) {
new->throw_length = 34;
new->object_points = fish_offsets;
} else if (tipo == 7) {
new->throw_length = 31;
new->object_points = flower_offsets;
}
/* Ahora sus campos para lista doble ligada */