FlappyTurtle/Welt.java

87 lines
2.2 KiB
Java

import java.util.ArrayList;
import java.util.Random;
class Welt implements Drawable
{
private static final int DISTANCE = 250;
private final ArrayList<Rectangle> _obstacles;
private double _speed = 150;
private double _acc = 0.5;
private final Random _random;
public Welt(Manager manager)
{
manager.addDrawable(this);
_random = new Random();
_obstacles = new ArrayList<Rectangle>();
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<Rectangle> remove = new ArrayList<Rectangle>();
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);
}
}
}
}