diff --git a/src/main/java/lab/Level.java b/src/main/java/lab/Level.java index d8645b95a126523edbaa8c640a5abf4634b85bb7..f4a0be293d3d4822b5a6bf4de70972303f7d0a8b 100644 --- a/src/main/java/lab/Level.java +++ b/src/main/java/lab/Level.java @@ -13,6 +13,7 @@ public class Level { private Player player; private double width; private double height; + private Monster[] monsters; public Level(double width, double height) { this.width = width; @@ -21,6 +22,10 @@ public class Level { obstacle1 = new Obstacle(this, new Point2D(300, 200), new Dimension2D(80, 40)); obstacle2 = new Obstacle(this); player = new Player(this, new Point2D(20, 250), new Point2D(100, -20)); + monsters = new Monster[5]; + for (int i = 0; i < monsters.length; i++) { + monsters[i] = new Monster(this); + } } public void draw(GraphicsContext gc) { @@ -30,10 +35,26 @@ public class Level { obstacle1.draw(gc); obstacle2.draw(gc); player.draw(gc); + for (Monster monster : monsters) { + monster.draw(gc); + } } public void simulate(double delay) { player.simulate(delay); + for (Monster monster : monsters) { + monster.simulate(delay); + if (monster.getBoundingBox().intersects(player.getBoundingBox())) { + monster.changeDirection(); + } + } } + public double getWidth() { + return width; + } + + public double getHeight() { + return height; + } } diff --git a/src/main/java/lab/Monster.java b/src/main/java/lab/Monster.java new file mode 100644 index 0000000000000000000000000000000000000000..88144d128fbcfe9ea6e9933c0ce4111c7553fda3 --- /dev/null +++ b/src/main/java/lab/Monster.java @@ -0,0 +1,49 @@ +package lab; + +import java.util.Random; + +import javafx.geometry.Point2D; +import javafx.geometry.Rectangle2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.image.Image; + +public class Monster { + + private static final Random RANDOM = new Random(); + + private Level level; + private Image image; + private Point2D position; + private Point2D speed; + + public Monster(Level level) { + this.level = level; + image = new Image(getClass().getResourceAsStream("red-monster.gif")); + position = new Point2D(level.getWidth() * 0.5 + RANDOM.nextDouble(level.getWidth() * 0.5 - image.getWidth()), + RANDOM.nextDouble(level.getHeight())); + speed = new Point2D(0, RANDOM.nextDouble(50, 150)); + } + + public Monster(Level level, Point2D position) { + this.level = level; + this.position = position; + image = new Image(getClass().getResourceAsStream("spike.gif")); + } + + public void draw(GraphicsContext gc) { + gc.drawImage(image, position.getX(), position.getY()); + } + + public void changeDirection() { + speed = speed.multiply(-1); + } + public void simulate(double delay) { + position = position.add(speed.multiply(delay / 1_000_000_000)); + position = new Point2D(position.getX(), position.getY() % level.getHeight()); + } + + public Rectangle2D getBoundingBox() { + return new Rectangle2D(position.getX(), position.getY(), image.getWidth(), image.getHeight()); + } + +} diff --git a/src/main/java/lab/Player.java b/src/main/java/lab/Player.java index 92f7fd6342eff98dfa61f3e09d0a4a1d0d02aaf7..db14f4ad79dcf628d8f9d8717dab67b8a80bef06 100644 --- a/src/main/java/lab/Player.java +++ b/src/main/java/lab/Player.java @@ -1,6 +1,7 @@ package lab; import javafx.geometry.Point2D; +import javafx.geometry.Rectangle2D; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; import javafx.scene.transform.Affine; @@ -37,7 +38,11 @@ public class Player { public void simulate(double delay) { position = position.add(speed.multiply(delay/1_000_000_000)); - speed = speed.multiply(0.9994); +// speed = speed.multiply(0.9994); + } + + public Rectangle2D getBoundingBox() { + return new Rectangle2D(position.getX(), position.getY(), 20, 50); } } diff --git a/src/main/resources/lab/red-monster.gif b/src/main/resources/lab/red-monster.gif new file mode 100644 index 0000000000000000000000000000000000000000..c545c2220ec3a52e9b046308ea4a1c1620db0f40 Binary files /dev/null and b/src/main/resources/lab/red-monster.gif differ