diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/MovementPatterns.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/MovementPatterns.java new file mode 100644 index 0000000..9aab45f --- /dev/null +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/MovementPatterns.java @@ -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> patterns; + private Random random; + + /** + * Create the MovementPatterns object providing access to different movement patterns. + */ + public MovementPatterns(){ + patterns = new HashMap<>(); + random = new Random(); + + ArrayList square = new ArrayList<>((Arrays.asList(new Position(30,30),new Position(930,30), + new Position(930,510),new Position(30,510)))); + ArrayList 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 getPattern(String pattern){ + return patterns.get(pattern); + } + + /** + * get a random movement pattern. + * @return the movement pattern + */ + public ArrayList getRandomPattern(){ + int index = random.nextInt(patterns.values().size()); + return new ArrayList>(patterns.values()).get(index); + } + +} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.java index ef7c73b..a5bbe2e 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.java @@ -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 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); } } diff --git a/out/artifacts/Programmieren_2_jar/Programmieren 2.jar b/out/artifacts/Programmieren_2_jar/Programmieren 2.jar index e70bcc4..ad67651 100644 Binary files a/out/artifacts/Programmieren_2_jar/Programmieren 2.jar and b/out/artifacts/Programmieren_2_jar/Programmieren 2.jar differ diff --git a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/MovementPatterns.class b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/MovementPatterns.class new file mode 100644 index 0000000..b0cfa0a Binary files /dev/null and b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/MovementPatterns.class differ diff --git a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.class b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.class index bb2c23e..e64ef2a 100644 Binary files a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.class and b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/RandomBall.class differ