void processa_buffer(Buffer* buffer){
	processa_wave(buffer->invasores);
	processa_tanque(buffer->tanque);
	processa_colisao(buffer);

	if(get_bottom_wave(buffer->invasores) <= get_top_tanque(buffer->tanque))
		game_over();
}
void processa_colisao(Buffer* buffer){
	Missil* missil = get_missil_tanque(buffer->tanque);
	if (missil)
		if( get_y_missil(missil) < 0)
			destroi_missil_tanque(buffer->tanque);
		else if(get_y_missil(missil) > get_bottom_wave(buffer->invasores) && colide_wave(buffer->invasores, missil))
			destroi_missil_tanque(buffer->tanque);
		else
			for (int i = 0; i < buffer->n_escudos && missil; i++)
				if (colide_escudo(buffer->escudo[i], missil)){
					destroi_missil_tanque(buffer->tanque);
					break;
				}
}
Esempio n. 3
0
void processa_buffer(Buffer* buffer){
	processa_wave(buffer->invasores);
	processa_nave(buffer->ovni);
	move_nave(buffer->ovni);
	processa_tanque(buffer->tanque);
	processa_colisao(buffer);

	//Caso vitorioso:
	if (get_linhas_wave(buffer->invasores) == 0)
		end_game(buffer);

	//Derrota:
	if(get_bottom_wave(buffer->invasores) >= get_top_tanque(buffer->tanque) || *buffer->vidas < 0){
		*buffer->vidas = -1;
		end_game(buffer);
	}
}
Esempio n. 4
0
void processa_colisao(Buffer* buffer){
	Missil* missil_tanque = get_missil_tanque(buffer->tanque);
	if (missil_tanque)
		if( get_y_missil(missil_tanque) < 0)
			destroi_missil_tanque(buffer->tanque);
		else {
			int pts = colide_wave(buffer->invasores, missil_tanque);
			if(pts){
				*buffer->score += pts;
				destroi_missil_tanque(buffer->tanque);
			}
			else if(colide_nave(buffer->ovni, missil_tanque)){
				play_sound(buffer->sound_mng, UFO_HIGHPITCH);
				*buffer->score += PONTOS_NAVE_MAE;
				buffer->ovni = NULL; 
				destroi_missil_tanque(buffer->tanque);
			}
			else
				for (int i = 0; i < buffer->n_escudos && missil_tanque; i++)
					if (colide_escudo(buffer->escudo[i], missil_tanque)){
						destroi_missil_tanque(buffer->tanque);
						break;
					}
		}
	for (int i=0; i<MAX_MISSEIS; i++){
		Missil* missil_wave = get_missil_wave(buffer->invasores, i);
		if (missil_wave){
			if ( get_y_missil(missil_wave) > buffer->altura_inicial)
				destroi_missil_wave(buffer->invasores, i);
			else{
				for (int j = 0; j < buffer->n_escudos && missil_wave; j++)
					if (colide_escudo(buffer->escudo[j], missil_wave)){
						destroi_missil_wave(buffer->invasores, i);
						break;
					}
				if (colide_tanque(buffer->tanque, missil_wave)){
						destroi_missil_wave(buffer->invasores, i);
						tanque_morreu(buffer);
				}
			}
		}
	}
	if(get_bottom_wave(buffer->invasores) >= get_top_escudo(buffer->escudo[0]))
		for(int i=0; i<buffer->n_escudos; i++)
			destroi_topo_escudo(buffer->escudo[i]);
}