Aufgaben 10
This commit is contained in:
parent
5cae1734d7
commit
301c4993a7
@ -0,0 +1,48 @@
|
||||
package de.thdeg.greiner.superpangworld.graphics.base;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Offers different movement patterns for moveable game objects.
|
||||
*/
|
||||
public class MovementPatterns {
|
||||
|
||||
|
||||
private HashMap<String, ArrayList<Position>> patterns;
|
||||
private Random random;
|
||||
|
||||
/**
|
||||
* Create the MovementPatterns object providing access to different movement patterns.
|
||||
*/
|
||||
public MovementPatterns(){
|
||||
patterns = new HashMap<>();
|
||||
random = new Random();
|
||||
|
||||
ArrayList<Position> square = new ArrayList<>((Arrays.asList(new Position(30,30),new Position(930,30),
|
||||
new Position(930,510),new Position(30,510))));
|
||||
ArrayList<Position> zigZag = new ArrayList<>((Arrays.asList( new Position(300,200),new Position(400,340),new Position(500,200),
|
||||
new Position(600,340),new Position(700,200),new Position(800,340))));
|
||||
|
||||
patterns.put("square",square);
|
||||
patterns.put("zigzag",zigZag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a movement pattern by its name.
|
||||
* @param pattern the pattern name
|
||||
* @return the movement pattern
|
||||
*/
|
||||
public ArrayList<Position> getPattern(String pattern){
|
||||
return patterns.get(pattern);
|
||||
}
|
||||
|
||||
/**
|
||||
* get a random movement pattern.
|
||||
* @return the movement pattern
|
||||
*/
|
||||
public ArrayList<Position> getRandomPattern(){
|
||||
int index = random.nextInt(patterns.values().size());
|
||||
return new ArrayList<ArrayList<Position>>(patterns.values()).get(index);
|
||||
}
|
||||
|
||||
}
|
@ -2,16 +2,22 @@ package de.thdeg.greiner.superpangworld.graphics.moveable;
|
||||
|
||||
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
||||
import de.thdeg.greiner.superpangworld.graphics.base.GameObject;
|
||||
import de.thdeg.greiner.superpangworld.graphics.base.MovementPatterns;
|
||||
import de.thdeg.greiner.superpangworld.graphics.base.MovingGameObject;
|
||||
import de.thdeg.greiner.superpangworld.graphics.base.Position;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Random;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
/** Ball with random movement. */
|
||||
public class RandomBall extends GameObject implements MovingGameObject {
|
||||
private final Position targetPosition;
|
||||
private final Random random;
|
||||
private ArrayList<Position> movementPattern;
|
||||
private int movementPatternIndex;
|
||||
private Position targetPosition;
|
||||
private MovementPatterns movementPatterns;
|
||||
|
||||
|
||||
/**
|
||||
* Creates the GameObject with the GameView to be displayed on.
|
||||
@ -20,10 +26,15 @@ public class RandomBall extends GameObject implements MovingGameObject {
|
||||
*/
|
||||
public RandomBall(GameView gameView) {
|
||||
super(gameView);
|
||||
this.targetPosition = new Position(800, 200);
|
||||
this.random = new Random();
|
||||
this.size = 50;
|
||||
this.speedInPixel = 4;
|
||||
|
||||
movementPatterns = new MovementPatterns();
|
||||
|
||||
movementPattern = movementPatterns.getRandomPattern();
|
||||
movementPatternIndex = 0;
|
||||
targetPosition = movementPattern.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -33,7 +44,13 @@ public class RandomBall extends GameObject implements MovingGameObject {
|
||||
position.right((targetPosition.x - position.x) / distance * speedInPixel);
|
||||
position.down((targetPosition.y - position.y) / distance * speedInPixel);
|
||||
} else {
|
||||
setRandomTargetPosition();
|
||||
if(movementPatternIndex < movementPattern.size()-1){
|
||||
movementPatternIndex++;
|
||||
}else{
|
||||
movementPattern = movementPatterns.getRandomPattern();
|
||||
movementPatternIndex = 0;
|
||||
}
|
||||
targetPosition = movementPattern.get(movementPatternIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user