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 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;
		}
	}
}
Example #3
0
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;
		}
	}
}