Praktikum 9
This commit is contained in:
parent
a10a43d7ed
commit
686f7442c8
@ -0,0 +1,79 @@
|
|||||||
|
package de.thdeg.berl.ufofight.graphics.movingobjects;
|
||||||
|
|
||||||
|
import de.thdeg.berl.ufofight.gameview.GameView;
|
||||||
|
import de.thdeg.berl.ufofight.graphics.base.GameObject;
|
||||||
|
import de.thdeg.berl.ufofight.graphics.base.MovingGameObject;
|
||||||
|
import de.thdeg.berl.ufofight.graphics.base.Position;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/** This ball follows another ball. */
|
||||||
|
public class FollowerBall extends GameObject implements MovingGameObject {
|
||||||
|
|
||||||
|
private enum Status {FOLLOW, CENTER, HIDE}
|
||||||
|
|
||||||
|
private final RandomBall followMe;
|
||||||
|
private Position targetPosition;
|
||||||
|
private Status status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the GameObject with the GameView to be displayed on.
|
||||||
|
*
|
||||||
|
* @param gameView Window to show the GameObject on.
|
||||||
|
* @param followMe The RandomBall to follow.
|
||||||
|
*/
|
||||||
|
public FollowerBall(GameView gameView, RandomBall followMe) {
|
||||||
|
super(gameView);
|
||||||
|
this.status = Status.CENTER;
|
||||||
|
this.followMe = followMe;
|
||||||
|
this.position = new Position(GameView.WIDTH, GameView.HEIGHT);
|
||||||
|
this.size = 50;
|
||||||
|
this.speedInPixel = 2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePosition() {
|
||||||
|
if (gameView.timerExpired("Status", "FollowerBall")) {
|
||||||
|
gameView.setTimer("Status", "FollowerBall", 3000);
|
||||||
|
switch (status) {
|
||||||
|
case HIDE:
|
||||||
|
status = Status.CENTER;
|
||||||
|
break;
|
||||||
|
case CENTER:
|
||||||
|
status = Status.FOLLOW;
|
||||||
|
break;
|
||||||
|
case FOLLOW:
|
||||||
|
status = Status.HIDE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (status == Status.FOLLOW) {
|
||||||
|
targetPosition = followMe.getPosition().clone();
|
||||||
|
targetPosition.y += 25;
|
||||||
|
} else if (status == Status.CENTER) {
|
||||||
|
targetPosition = new Position(GameView.WIDTH / 2d, GameView.HEIGHT / 2d);
|
||||||
|
}
|
||||||
|
if (status != Status.HIDE) {
|
||||||
|
double distance = position.distance(targetPosition);
|
||||||
|
if (distance >= speedInPixel) {
|
||||||
|
position.right((targetPosition.x - position.x) / distance * speedInPixel);
|
||||||
|
position.down((targetPosition.y - position.y) / distance * speedInPixel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateStatus() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addToCanvas() {
|
||||||
|
if (status == Status.HIDE) {
|
||||||
|
gameView.addOvalToCanvas(position.x, position.y, size, size, 2, true, Color.WHITE);
|
||||||
|
} else {
|
||||||
|
gameView.addOvalToCanvas(position.x, position.y, size, size, 2, true, Color.GREEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package de.thdeg.berl.ufofight.graphics.movingobjects;
|
||||||
|
|
||||||
|
import de.thdeg.berl.ufofight.gameview.GameView;
|
||||||
|
import de.thdeg.berl.ufofight.graphics.base.GameObject;
|
||||||
|
import de.thdeg.berl.ufofight.graphics.base.MovingGameObject;
|
||||||
|
import de.thdeg.berl.ufofight.graphics.base.Position;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/** Ball with random movement. */
|
||||||
|
public class RandomBall extends GameObject implements MovingGameObject {
|
||||||
|
private final Position targetPosition;
|
||||||
|
private final Random random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the GameObject with the GameView to be displayed on.
|
||||||
|
*
|
||||||
|
* @param gameView Window to show the GameObject on.
|
||||||
|
*/
|
||||||
|
public RandomBall(GameView gameView) {
|
||||||
|
super(gameView);
|
||||||
|
this.targetPosition = new Position(800, 200);
|
||||||
|
this.random = new Random();
|
||||||
|
this.size = 50;
|
||||||
|
this.speedInPixel = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updatePosition() {
|
||||||
|
double distance = position.distance(targetPosition);
|
||||||
|
if (distance >= speedInPixel) {
|
||||||
|
position.right((targetPosition.x - position.x) / distance * speedInPixel);
|
||||||
|
position.down((targetPosition.y - position.y) / distance * speedInPixel);
|
||||||
|
} else {
|
||||||
|
setRandomTargetPosition();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateStatus() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set position to aim at */
|
||||||
|
public void setRandomTargetPosition() {
|
||||||
|
targetPosition.x = random.nextInt(GameView.WIDTH);
|
||||||
|
targetPosition.y = random.nextInt(GameView.HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addToCanvas() {
|
||||||
|
gameView.addOvalToCanvas(position.x, position.y, size, size, 2, true, Color.YELLOW);
|
||||||
|
gameView.addOvalToCanvas(targetPosition.x, targetPosition.y, size, size, 2, false, Color.WHITE);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user