Пример #1
0
  /** optimizes obstacle list vertically */
  public void optimizeObstaclesVertically() {
    boolean changed = false;
    if (!tileObstacles.isEmpty()) {
      Obstacle comparedObstacle1, comparedObstacle2;
      for (int i = 0; i < tileObstacles.size(); i++) {
        comparedObstacle1 = tileObstacles.get(i);
        for (int j = i + 1; j < tileObstacles.size(); j++) {
          comparedObstacle2 = tileObstacles.get(j);

          if (comparedObstacle1.getX() == comparedObstacle2.getX()) {
            if (comparedObstacle1.getWidth() == comparedObstacle2.getWidth()) {
              if (comparedObstacle1.getY() + comparedObstacle1.getHeight()
                  == comparedObstacle2.getY()) {
                // obstacle1 above obstacle2
                tileObstacles.add(
                    new Obstacle(
                        comparedObstacle1.getX(),
                        comparedObstacle1.getY(),
                        comparedObstacle1.getWidth(),
                        comparedObstacle1.getHeight() + comparedObstacle2.getHeight()));
                tileObstacles.remove(comparedObstacle1);
                tileObstacles.remove(comparedObstacle2);
                changed = true;
              }
              if (comparedObstacle1.getY() - comparedObstacle2.getHeight()
                  == comparedObstacle2.getY()) {
                // obstacle2 above obstacle1
                tileObstacles.add(
                    new Obstacle(
                        comparedObstacle1.getX(),
                        comparedObstacle2.getY(),
                        comparedObstacle1.getWidth(),
                        comparedObstacle1.getHeight() + comparedObstacle2.getHeight()));
                tileObstacles.remove(comparedObstacle1);
                tileObstacles.remove(comparedObstacle2);
                changed = true;
              }
            }
          }
        }
      }
    }
    // System.out.println(tileObstacles.size());
    if (changed) optimizeObstaclesVertically();
  }