import java.util.ArrayList; import java.util.Random; class Welt implements Drawable { private static final int DISTANCE = 250; private final ArrayList _obstacles; private double _speed = 150; private double _acc = 2; private final Random _random; public Welt(GameScreen game) { game.addDrawable(this); _random = new Random(); _obstacles = new ArrayList(); reset(); } public void reset() { _obstacles.clear(); createObstacle(TurtleWelt.WIDTH); } private void createObstacle(int x) { int gap = _random.nextInt(TurtleWelt.HEIGHT - 200) + 50; _obstacles.add(new Rectangle(x, 0, 30, gap, "black", false)); _obstacles.add(new Rectangle(x, gap + 100, 30, TurtleWelt.HEIGHT, "black", false)); } public void update(double elapsed) { ArrayList remove = new ArrayList(); for (Rectangle r : _obstacles) { // Move all obstacles accoring to speed r.setPos(r.getX() - (elapsed * 1e-3 * _speed), r.getY()); // Mark obstacles that are off screen for removal to avoid // concurrent modifications if (r.getX() < -r.getWidth()) { remove.add(r); } } for (Rectangle r : remove) { _obstacles.remove(r); } // Add a new obstacle after DISTANCE Rectangle lastObstacle = _obstacles.get(_obstacles.size() - 1); if (lastObstacle.getX() + lastObstacle.getWidth() < TurtleWelt.WIDTH - DISTANCE) { createObstacle(TurtleWelt.WIDTH); } // Increase speed according to acceleration _speed += _acc * elapsed * 1e-3; } public boolean checkCollision(Rectangle r) { for (Rectangle o : _obstacles) { if (r.intersects(o)) { return true; } } return false; } public void draw(Turtle t, double elapsed) { for (Rectangle r : _obstacles) { if (r.getX() < TurtleWelt.WIDTH) { r.draw(t, elapsed); } } } public double getSpeed() { return _speed; } }