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(); }
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(); } }