Пример #1
0
void level_init(state_t *state)
{
	state->level = levels;
	state->wave = levels->waves;
	path_load(state, &state->level->map);
	until_spawn = 0;
	state->until_next = WAVE_DELAY * 1000;
}
Пример #2
0
void move() {
  // Для алгоритма поиска поути
  if(!path_find()) {
    if(playSound) soundBadMove();
    return;
  }

  if(showPath) {
    // Рисуем шаги на экране
    path_save();
    while(1) {
      switch(path_nextStep()) {
        case 1: drawSpriteStep(path_x, path_y+1, 0); break;
        case 2: drawSpriteStep(path_x, path_y-1, 1); break;
        case 3: drawSpriteStep(path_x+1, path_y, 2); break;
        case 4: drawSpriteStep(path_x-1, path_y, 3); break;
      }
      drawSprite(path_x, path_y, path_c);
      if(path_n==LAST_STEP) break;
      if(playSound) soundJumpSel();
      delay(STEP_SPEED);
    };
 
    // Удаляем нарисованные шаги с экрана
    path_load();
    while(1) {
      drawSprite(path_x, path_y, 0);
      path_nextStep();
      if(path_n==LAST_STEP) break;
    };
  } else {
    drawSprite(selX, selY, 0);
    drawSprite(cursorX, cursorY, path_c);
  }

  // Реально перемещаем шарик. Все выше было лишь анимацией.
  game[cursorX][cursorY] = path_c;

  // Снимаем курсор
  selX = -1;

  // Очищаем игровое поле от временных значений
  path_end();
  
  // Добавляем 3 шарика
  gameStep();
}
Пример #3
0
void level_update(int dt, state_t *state)
{
	int next = state->until_next;
	wave_t *wave = state->wave;
	level_t *level = state->level;

	next = next > dt ? next - dt : 0;

	/* do not advance wave until we are done spawning noobs */
	if(next == 0 && level != NULL && state->level_noobs >= wave->noobs) {
		if(wave->next != NULL) {
			state->wave = wave = wave->next;
			next = WAVE_DELAY * 1000;
			state->level_noobs = 0;
		}
		/* only advance level if we have killed/leaked all noobs */
		else if(state->kills + state->leaks >= state->total_noobs) {
			state->level = level->next;
			if(state->level != NULL) {
				state->wave = wave = state->level->waves;
				tower_init();
				grid_init();
				state->towers = 0;
				state->power_used = 0;
				path_load(state, &level->next->map);
			}
			next = WAVE_DELAY * 1000;
			state->level_noobs = 0;
		}
	}
	state->until_next = next;

	until_spawn = until_spawn > dt ? until_spawn - dt : 0;
	if(state->level_noobs == wave->noobs)
		return;
	if(until_spawn == 0) {
		noob_spawn(wave->speed, wave->hp, wave->shield,
		           wave->armor_type, state);
		if(level != NULL)
			state->level_noobs++;
		until_spawn += wave->delay;
	}
}