示例#1
0
  /**
   * Calculates movements and collisions between objects in play
   *
   * @return
   */
  public String calculate() {
    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_PLAYING)) {
      /** *Movement** */
      for (Projectile proj : projectiles) {
        proj.move();
      }
      moveEnemies();

      /** *Collisions** */
      calculatePlayerVsWall();
      calculateProjectileEscape();
      calculateCollisionEnemyVsProjectile();
      if (enemies.isEmpty()) {
        gameStatus = GameConstants.GAME_STATUS_GAME_OVER;
      }
      calculateEnemyReachingPlayer();

      for (Explosion exp : explosions) {
        if (exp.isDead()) {
          exp.dispose();
          explosions.remove(exp);
          break;
        }
      }
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_RETURN))
      return GameConstants.APPLICATION_MENU;

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_RETRY)) loadLevel(1);

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO)) {
      intro_enemy_offset -= intro_speed;
      intro_player_offset--;
      if (intro_enemy_offset <= 0 && intro_player_offset <= 0) {
        gameStatus = GameConstants.GAME_STATUS_INTRO_START;
        intro_start_time = System.currentTimeMillis();
      } else if (intro_enemy_offset < 0) {
        intro_enemy_offset = 0;
      } else if (intro_player_offset < 0) {
        intro_player_offset = 0;
      }
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_INTRO_START)) {
      long current = System.currentTimeMillis();
      if (current - intro_start_time >= 1000) {
        startTime = System.currentTimeMillis();
        gameStatus = GameConstants.GAME_STATUS_PLAYING;
      }
    }

    if (gameStatus.equalsIgnoreCase(GameConstants.GAME_STATUS_OUTRO)) {
      if (enemy_hero == null) {
        selectEnemy();
        outro_distance_x = enemy_hero.x - player1.x;
        outro_distance_y = enemy_hero.y - player1.y;
      } else {
        if (calculateOverlap(enemy_hero, player1) || enemy_hero.y <= player1.y) {
          gameStatus = GameConstants.GAME_STATUS_GAME_OVER;
        }

        enemy_hero.x -= outro_distance_x / outro_distance_y;
        enemy_hero.y -= outro_distance_y / outro_distance_y;
      }
    }

    return null;
  }