import greenfoot.*;
| A lunar lander
|
| @author Poul Henriksen
| @author Michael Kölling
|
| @version 1.1
|
public class Lander
extends Actor
{
| Current speed
|
private double speed = 0;
| Allowed speed for landing speed
|
private double MAX_LANDING_SPEED = 12;
| Power of the rocket
|
private double thrust = -3;
| The location
|
private double altitude;
| The speed is divided by this.
|
private double speedFactor = 10;
| Rocket image without thrust
|
private GreenfootImage rocket;
| Rocket image with thrust
|
private GreenfootImage rocketWithThrust;
| Moon we are trying to land on
|
private Moon moon;
| Bottom of lander (offset in pixels from centre)
|
private int bottom = 15;
public Lander()
{
rocket = getImage();
rocketWithThrust = new GreenfootImage("thrust.png");
rocketWithThrust.drawImage(rocket, 0, 0);
}
public void act()
{
processKeys();
applyGravity();
altitude += speed / speedFactor;
setLocation(getX(), (int) (altitude));
checkCollision();
}
| Lander has been added to the world.
|
public void addedToWorld(World world)
{
moon = (Moon) world;
altitude = getY();
}
| Handle keyboard input.
|
private void processKeys()
{
if(Greenfoot.isKeyDown("down"))
{
speed+=thrust;
setImage(rocketWithThrust);
} else {
setImage(rocket);
}
}
| Let the gravity change the speed.
|
private void applyGravity()
{
speed += moon.getGravity();
}
| Whether we have touched the landing platform yet.
|
private boolean isLanding()
{
Color colorBelow = moon.getColorAt(getX(), getY() + bottom);
return (speed <= MAX_LANDING_SPEED) && !colorBelow.equals(moon.getSpaceColor());
}
| Is the lander exploding?
|
private boolean isExploding()
{
Color colorBelow = moon.getColorAt(getX(), getY() + bottom);
return (speed > MAX_LANDING_SPEED) && !colorBelow.equals(moon.getSpaceColor());
}
| Check if we are colliding with anything and take appropiate action.
|
private void checkCollision()
{
if (isLanding()) {
setImage(rocket);
moon.addObject(new Flag(), getX(), getY());
Greenfoot.stop();
}
else if (isExploding()) {
moon.addObject(new Explosion(), getX(), getY());
moon.removeObject(this);
}
}
}
top,
use,
map,
class Lander
. Lander
. act
. addedToWorld
. processKeys
. applyGravity
. isLanding
. isExploding
. checkCollision
98 neLoCode
+ 19 LoComm