Пример #1
0
static void invaders_DrawScene()
{
	aliens_slow--;
	if(aliens_slow <= 0) {
		GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
		aliens_draw(itest);
		
		itest = (itest != 0) ? 0 : 1;
		aliens_update_position();
		
		GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));
		aliens_draw(itest);
		
		aliens_slow = aliens_left / 4 - level + 4;
	}
	/* evaluate if fire or not */
	if((rand() % 10) == 0 && alien_firing < ALIEN_MAX_FIRES) {
		/* find cols active and set relative row tostart */
		int cols[ALIENS_COLS];
		int i, j, ncol, hitcol;
		alien_firing++;
		ncol = 0;
		for(i = 0; i < ALIENS_COLS; i++){
			for(j = aliens_rows - 1; j >= 0; j--){
				if(alien_status[i * aliens_rows + j] > 0) {
					cols[ncol++] = j;
					break;
				}
			}
		}
		hitcol=rand() % ncol;
		Dprintf("%d\n", hitcol);
		alienfire[alien_firing - 1].posx = cell_minx + hitcol *
			ALIEN_CELL_WIDTH + ALIEN_CELL_WIDTH / 2;
		alienfire[alien_firing - 1].posy = cell_miny + cols[hitcol] *
			ALIEN_CELL_HEIGHT + ALIEN_CELL_HEIGHT;
		alienfire[alien_firing-1].dir = 1;
	}
	
	GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
	me_draw();
	fire_draw();

	fire_update();
	GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));
	me_draw();
	fire_draw();
}
Пример #2
0
void aliens_tick(){
	alien* iterator = invaders->head;

	if(ufo != NULL){
		if(ufo->state == ALIEN_DESTROYED){
			ufo->ticks++;
			if(ufo->ticks > 60)
				ufo_destruct();
		}
	}

	while(iterator != NULL){
		if(iterator->state == ALIEN_DESTROYED){
			iterator->ticks++;
			if(iterator->ticks > 30){
				if(alien_remove(iterator) == 1)
					return;
			}
		}
		iterator = iterator->next;
	}

	if(invaders->alien_num != 0){
		aliens_draw();
	}
}