Skip to content
Snippets Groups Projects
Commit 00522675 authored by jez04's avatar jez04
Browse files

feat: solution

parent 2ce8c707
Branches
No related merge requests found
......@@ -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;
}
}
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());
}
}
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);
}
}
src/main/resources/lab/red-monster.gif

6.64 KiB

0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment