void desenha_jogo (Jogo* jogo) { desenha_fundo_jogo(jogo); desenha_mothership(&jogo->mothership); desenha_hud(&jogo->hud); for (int i = 0; i < jogo->numero_shields; i++) desenha_shield(&jogo->shields[i]); for (int i = 0; i < jogo->numero_de_projeteis; i++) { desenha_projetil(&jogo->projetil_stack[i]); move_projetil(&jogo->projetil_stack[i]); if (jogo->projetil_stack[i].posicao_y < 0 - jogo->projetil_stack[i].altura_sprite) { copy_projetil(&jogo->projetil_stack[i], &jogo->projetil_stack[jogo->numero_de_projeteis-1]); desenha_projetil(&jogo->projetil_stack[i]); finaliza_projetil(&jogo->projetil_stack[jogo->numero_de_projeteis-1]); jogo->numero_de_projeteis--; } } desenha_player(&jogo->player); desenha_tropa(jogo->alien); al_flip_display(); }
void cria_projetil (Projetil* projetil, double posicao_x, double posicao_y, DIRECAO direcao) { projetil->posicao_x = posicao_x; projetil->posicao_y = posicao_y; projetil->direcao = direcao; inicializa_sprite_projetil (projetil); projetil->altura_sprite = al_get_bitmap_height(projetil->sprite); projetil->largura_sprite = al_get_bitmap_width(projetil->sprite); desenha_projetil (projetil); }
void colisao_mothership_vs_projetil (Jogo *jogo) { for (int i = 0; i < jogo->numero_de_projeteis; i++) { if (!(get_posicao_x_min_projetil(&jogo->conjunto_projeteis[i]) > get_posicao_x_max_mothership(&jogo->mothership) || get_posicao_y_min_projetil(&jogo->conjunto_projeteis[i]) > get_posicao_y_max_mothership(&jogo->mothership) || get_posicao_y_max_projetil(&jogo->conjunto_projeteis[i]) < get_posicao_y_min_mothership(&jogo->mothership) || get_posicao_x_max_projetil(&jogo->conjunto_projeteis[i]) < get_posicao_x_min_mothership(&jogo->mothership))) { copy_projetil (&jogo->conjunto_projeteis[i], &jogo->conjunto_projeteis[jogo->numero_de_projeteis-1]); desenha_projetil (&jogo->conjunto_projeteis[i]); finaliza_projetil (&jogo->conjunto_projeteis[jogo->numero_de_projeteis-1]); jogo->numero_de_projeteis--; jogo->hud.score += PONTOS_MOTHERSHIP; reinicia_mothership(&jogo->mothership); return; } } }
void colisao_player_vs_projetil (Jogo *jogo) { for (int i = 0; i < jogo->numero_de_projeteis; i++) { if(((verifica_se_ponto_dentro(get_posicao_x_min_projetil(&jogo->conjunto_projeteis[i]), get_posicao_y_max_projetil(&jogo->conjunto_projeteis[i]), &jogo->player)) || (verifica_se_ponto_dentro (get_posicao_x_max_projetil(&jogo->conjunto_projeteis[i]), get_posicao_y_max_projetil(&jogo->conjunto_projeteis[i]), &jogo->player))) && jogo->conjunto_projeteis[i].direcao == BAIXO) { copy_projetil (&jogo->conjunto_projeteis[i], &jogo->conjunto_projeteis[jogo->numero_de_projeteis-1]); desenha_projetil (&jogo->conjunto_projeteis[i]); finaliza_projetil (&jogo->conjunto_projeteis[jogo->numero_de_projeteis-1]); al_rest(1); jogo->numero_de_projeteis--; jogo->hud.lives--; return; } } }