Skip to content
Snippets Groups Projects
Commit f8135907 authored by Cristian Weiland's avatar Cristian Weiland
Browse files

Implementa funcao mas nao funciona ainda.

parent 34713fb6
Branches
No related tags found
1 merge request!25Animacao flash
Imgs/blastoise.png

75.7 KiB

Imgs/coin.jpg

72.3 KiB

Imgs/smoke.bmp

7.7 KiB

...@@ -34,6 +34,11 @@ ...@@ -34,6 +34,11 @@
#define FIREBALLS_P_PESSOA 2 #define FIREBALLS_P_PESSOA 2
#define COMANDOS_POR_PERSONAGEM 8 #define COMANDOS_POR_PERSONAGEM 8
/* Defines para flash */
#define FLASH_SPRITE_WIDTH 22
#define FLASH_SPRITE_HEIGHT 22
#define MAX_FLASH_POSSIVEL 5
typedef struct Pessoa { typedef struct Pessoa {
int x,y,desx,desy,selx,sely,hp; // Desx e desy escolhem o char na imagem; Selx e sely escolhem qual sprite do char (olhando pra cima,esq,...) int x,y,desx,desy,selx,sely,hp; // Desx e desy escolhem o char na imagem; Selx e sely escolhem qual sprite do char (olhando pra cima,esq,...)
int xneon,yneon; int xneon,yneon;
...@@ -48,7 +53,7 @@ typedef struct Pessoa { ...@@ -48,7 +53,7 @@ typedef struct Pessoa {
} Pessoa; } Pessoa;
typedef struct Magia { typedef struct Magia {
int dano,x,y,dist,xexpl,yexpl, energia; int dano, x, y, dist, xsprite, ysprite, xexpl, yexpl, energia, count;
bool ativa, explosao; bool ativa, explosao;
ALLEGRO_BITMAP* sprite; ALLEGRO_BITMAP* sprite;
int d; /* Direcao == -1 significa que nao foi calculada ainda. int d; /* Direcao == -1 significa que nao foi calculada ainda.
...@@ -59,6 +64,7 @@ typedef struct Magias { ...@@ -59,6 +64,7 @@ typedef struct Magias {
int explox[PESSOAS][FIREBALLS_P_PESSOA], exploy[PESSOAS][FIREBALLS_P_PESSOA]; // Selecionam a posicao da explosao no bitmap explo.bmp. int explox[PESSOAS][FIREBALLS_P_PESSOA], exploy[PESSOAS][FIREBALLS_P_PESSOA]; // Selecionam a posicao da explosao no bitmap explo.bmp.
Magia fireball[PESSOAS][FIREBALLS_P_PESSOA]; Magia fireball[PESSOAS][FIREBALLS_P_PESSOA];
Magia iceball[PESSOAS][ICEBALLS_P_PESSOA]; Magia iceball[PESSOAS][ICEBALLS_P_PESSOA];
Magia flash[PESSOAS][MAX_FLASH_POSSIVEL];
} Magias; } Magias;
typedef struct Sprite { typedef struct Sprite {
...@@ -66,6 +72,7 @@ typedef struct Sprite { ...@@ -66,6 +72,7 @@ typedef struct Sprite {
ALLEGRO_BITMAP **fireballs, *explosion; // Sprite da bola de fogo (cima, dir, esq, baixo) + explosao da fireball. ALLEGRO_BITMAP **fireballs, *explosion; // Sprite da bola de fogo (cima, dir, esq, baixo) + explosao da fireball.
ALLEGRO_BITMAP **iceballs, *gelos; // Sprite da bola de fogo (cima, dir, esq, baixo) + explosao da fireball. ALLEGRO_BITMAP **iceballs, *gelos; // Sprite da bola de fogo (cima, dir, esq, baixo) + explosao da fireball.
ALLEGRO_BITMAP **neons; // Todos os neons (4 cores, na sequencia: amarelo - azul - verde - vermelho) ALLEGRO_BITMAP **neons; // Todos os neons (4 cores, na sequencia: amarelo - azul - verde - vermelho)
ALLEGRO_BITMAP *animacao_flash;
ALLEGRO_BITMAP *bar, *healthbar, *energybar, *frente; ALLEGRO_BITMAP *bar, *healthbar, *energybar, *frente;
ALLEGRO_BITMAP *chars, *dead, *chars_congelados; ALLEGRO_BITMAP *chars, *dead, *chars_congelados;
} Sprite; } Sprite;
......
...@@ -144,6 +144,14 @@ Sprite init_sprites(FILE *errext) { ...@@ -144,6 +144,14 @@ Sprite init_sprites(FILE *errext) {
exit(1); exit(1);
} }
// s.animacao_flash = al_load_bitmap("Imgs/smoke.bmp");
s.animacao_flash = al_load_bitmap("Imgs/Explo.bmp");
if(!(s.animacao_flash)) {
fprintf(errext,"Falha ao abrir a imagem smoke.");
fclose(errext);
exit(1);
}
s.neons[0] = al_load_bitmap("Imgs/neonamarelo.bmp"); s.neons[0] = al_load_bitmap("Imgs/neonamarelo.bmp");
if(!s.neons[0]) { if(!s.neons[0]) {
fprintf(errext,"Falha ao abrir a imagem s.neons[0]."); fprintf(errext,"Falha ao abrir a imagem s.neons[0].");
...@@ -235,6 +243,7 @@ Sprite init_sprites(FILE *errext) { ...@@ -235,6 +243,7 @@ Sprite init_sprites(FILE *errext) {
al_convert_mask_to_alpha(s.explosion,al_map_rgb(255,0,255)); al_convert_mask_to_alpha(s.explosion,al_map_rgb(255,0,255));
al_convert_mask_to_alpha(s.healthbar,al_map_rgb(255,0,255)); al_convert_mask_to_alpha(s.healthbar,al_map_rgb(255,0,255));
al_convert_mask_to_alpha(s.energybar,al_map_rgb(255,0,255)); al_convert_mask_to_alpha(s.energybar,al_map_rgb(255,0,255));
al_convert_mask_to_alpha(s.animacao_flash,al_map_rgb(255,0,255));
al_convert_mask_to_alpha(s.chars_congelados,al_map_rgb(255,0,255)); al_convert_mask_to_alpha(s.chars_congelados,al_map_rgb(255,0,255));
for(i=0;i<4;i++) { for(i=0;i<4;i++) {
al_convert_mask_to_alpha(s.neons[i],al_map_rgb(255,0,255)); al_convert_mask_to_alpha(s.neons[i],al_map_rgb(255,0,255));
......
...@@ -170,9 +170,3 @@ int imprime_4_chars_for(int cont,char** matriz,int *cor,bool *temneon,int njogad ...@@ -170,9 +170,3 @@ int imprime_4_chars_for(int cont,char** matriz,int *cor,bool *temneon,int njogad
al_destroy_font(font); al_destroy_font(font);
return 1; return 1;
} }
/*
MAX_ENERGY - 100%
P[I].ENERGIA - X%
*/
\ No newline at end of file
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
void init_magias(Magias *m, int njogadores) { void init_magias(Magias *m, int njogadores) {
int i,j; int i,j;
/* Inicializa fireball. */
/*
for(i=0; i<njogadores; ++i) { for(i=0; i<njogadores; ++i) {
for(j=0; j<2; ++j) { for(j=0; j<2; ++j) {
m->fireball[i][j].ativa = false; // Nao foi usada. m->fireball[i][j].ativa = false; // Nao foi usada.
...@@ -13,6 +15,8 @@ void init_magias(Magias *m, int njogadores) { ...@@ -13,6 +15,8 @@ void init_magias(Magias *m, int njogadores) {
m->exploy[i][j] = 220; m->exploy[i][j] = 220;
} }
} }
*/
/* Inicializa iceball. */
for(i=0; i<njogadores; ++i) { for(i=0; i<njogadores; ++i) {
for(j=0; j<2; ++j) { for(j=0; j<2; ++j) {
m->iceball[i][j].ativa = false; // Nao foi usada. m->iceball[i][j].ativa = false; // Nao foi usada.
...@@ -21,6 +25,20 @@ void init_magias(Magias *m, int njogadores) { ...@@ -21,6 +25,20 @@ void init_magias(Magias *m, int njogadores) {
m->iceball[i][j].energia = 30; m->iceball[i][j].energia = 30;
m->iceball[i][j].dist = 0; // Nao percorreu nenhuma distancia. m->iceball[i][j].dist = 0; // Nao percorreu nenhuma distancia.
m->iceball[i][j].d = -1; // Nao tem direçao. m->iceball[i][j].d = -1; // Nao tem direçao.
}/*
for(j=0; j<MAX_FLASH_POSSIVEL; ++j) {
m->flash[i][j].ativa = false; // Nao foi usada.
m->flash[i][j].count = 0;
m->flash[i][j].xsprite = 88;
}*/
}
/* Inicializa animacao do flash. */
for(i=0; i<njogadores; ++i) {
for(j=0; j<MAX_FLASH_POSSIVEL; ++j) {
m->flash[i][j].ativa = false; // Nao foi usada.
m->flash[i][j].count = 0;
//m->flash[i][j].xsprite = 88;
//puts("Oi");
} }
} }
} }
...@@ -214,17 +232,37 @@ void usa_iceball(char **matriz, Pessoa *p, Magias *m, Sprite s, int njogadores) ...@@ -214,17 +232,37 @@ void usa_iceball(char **matriz, Pessoa *p, Magias *m, Sprite s, int njogadores)
} }
} }
void usa_magias(char **matriz, Pessoa *p, int njogadores, Sprite s, int *flash, Magias *m) void animacao_flash(Pessoa *p, int njogadores, Sprite s, Magias *m) {
{ int i, j;
usa_flash(p, flash, matriz, njogadores); for(i=0; i<njogadores; ++i) {
usa_fireball(matriz, p, m, njogadores); for(j=0; j<MAX_FLASH_POSSIVEL; ++j) {
explosao(p, njogadores,s, m); if(m->flash[i][j].ativa == true) { // Enquanto xsprite = 88, ele nao imprime a animacao. Quando xprite = 0, ele comeca a animacao.
m->flash[i][j].xsprite = 0;
m->flash[i][j].ativa = false;
m->flash[i][j].count = 0;
}
if(m->flash[i][j].xsprite < 88) { // Imprime a animação.
al_draw_bitmap_region(s.animacao_flash,m->flash[i][j].xsprite,0,FLASH_SPRITE_WIDTH,FLASH_SPRITE_HEIGHT,m->flash[i][j].x,m->flash[i][j].y,0);
if(m->flash[i][j].count == 3) {
m->flash[i][j].xsprite += FLASH_SPRITE_WIDTH;
m->flash[i][j].count = 0;
}
++(m->flash[i][j].count);
}
}
}
}
void usa_magias(char **matriz, Pessoa *p, int njogadores, Sprite s, int *flash, Magias *m) {
usa_flash(p, flash, matriz, njogadores, m);
animacao_flash(p, njogadores, s, m);
usa_iceball(matriz, p, m, s, njogadores); usa_iceball(matriz, p, m, s, njogadores);
// usa_fireball(matriz, p, m, njogadores);
// explosao(p, njogadores, s, m);
return ; return ;
} }
int calcula_direcao(Pessoa *p,int i) int calcula_direcao(Pessoa *p,int i) {
{
if(p[i].andou_c == 1 || (p[i].andou_b == 0 && p[i].andou_c == 0 && p[i].andou_d == 0 && p[i].andou_e == 0)) { // Olhando pra cima. if(p[i].andou_c == 1 || (p[i].andou_b == 0 && p[i].andou_c == 0 && p[i].andou_d == 0 && p[i].andou_e == 0)) { // Olhando pra cima.
return 0; return 0;
} }
...@@ -240,8 +278,7 @@ int calcula_direcao(Pessoa *p,int i) ...@@ -240,8 +278,7 @@ int calcula_direcao(Pessoa *p,int i)
return -1; // Deu erro. return -1; // Deu erro.
} }
void usa_flash(Pessoa *p, int *flash, char **matriz, int njogadores) void usa_flash(Pessoa *p, int *flash, char **matriz, int njogadores, Magias *m) {
{
/* Por favor otimizar isso aqui. O for(j=0; j<19) tem 8 ifs dentro. Nao da pra puxar o if pra fora /* Por favor otimizar isso aqui. O for(j=0; j<19) tem 8 ifs dentro. Nao da pra puxar o if pra fora
e escolher qual deles eh feito, e dai fazer as 19 iteracoes? Alem disso, se colidiu uma vez, colidiu e escolher qual deles eh feito, e dai fazer as 19 iteracoes? Alem disso, se colidiu uma vez, colidiu
pra sempre, entao pode dar um break/return (cuidar com diagonais dai!) pra sempre, entao pode dar um break/return (cuidar com diagonais dai!)
...@@ -250,6 +287,14 @@ void usa_flash(Pessoa *p, int *flash, char **matriz, int njogadores) ...@@ -250,6 +287,14 @@ void usa_flash(Pessoa *p, int *flash, char **matriz, int njogadores)
for(i=0; i<njogadores; ++i) { for(i=0; i<njogadores; ++i) {
if(flash[i] && p[i].energia >= 60 && p[i].hp > 0 && p[i].freeze <= 0) { if(flash[i] && p[i].energia >= 60 && p[i].hp > 0 && p[i].freeze <= 0) {
flash[i] = 0; flash[i] = 0;
// Ativar a animação.
for(j=0; j<MAX_FLASH_POSSIVEL; ++j) {
if(m->flash[i][j].xsprite >= 88) {
// Escolhi uma instância da animação. Ativa ela e sai.
m->flash[i][j].ativa = true;
break;
}
}
p[i].energia -= 60; p[i].energia -= 60;
/* Existem 8 casos (8 direçoes possiveis de andar, 4 sentidos e 4 diagonais). */ /* Existem 8 casos (8 direçoes possiveis de andar, 4 sentidos e 4 diagonais). */
for(j=0; j<19; ++j) { for(j=0; j<19; ++j) {
......
...@@ -9,8 +9,9 @@ void calcula_status(Pessoa *p, int njogadores); ...@@ -9,8 +9,9 @@ void calcula_status(Pessoa *p, int njogadores);
void usa_fireball(char **matriz, Pessoa *p, Magias *m, int njogadores); void usa_fireball(char **matriz, Pessoa *p, Magias *m, int njogadores);
void explosao(Pessoa *p, int njogadores, Sprite s,int explox[4][2],int exploy[4][2], Magias *m); void explosao(Pessoa *p, int njogadores, Sprite s,int explox[4][2],int exploy[4][2], Magias *m);
void usa_iceball(char **matriz, Pessoa *p, Magias *m, Sprite s, int njogadores); void usa_iceball(char **matriz, Pessoa *p, Magias *m, Sprite s, int njogadores);
void animacao_flash(Pessoa *p, int njogadores, Sprite s, Magias *m);
void usa_magias(char **matriz, Pessoa *pessoas, int njogadores, Sprite s, int *flash, Magias *m); void usa_magias(char **matriz, Pessoa *pessoas, int njogadores, Sprite s, int *flash, Magias *m);
int calcula_direcao(Pessoa *p,int i); int calcula_direcao(Pessoa *p,int i);
void usa_flash(Pessoa *p, int *flash, char **matriz, int njogadores); void usa_flash(Pessoa *p, int *flash, char **matriz, int njogadores, Magias *m);
#endif #endif
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment