From 15b6fca4b0558c8320a0e418dfd0eb3370373611 Mon Sep 17 00:00:00 2001 From: koz01 <koz01@PCFEIB207-060.msad.vsb.cz> Date: Wed, 5 Oct 2022 08:46:31 +0200 Subject: [PATCH] Solution --- .gitignore | 1 + src/main/java/lab/Bullet.java | 40 ++++++++++++++++++++++ src/main/java/lab/BulletAnimated.java | 11 ++++++ src/main/java/lab/Cannon.java | 37 +++++++++++++++++++++ src/main/java/lab/DrawingThread.java | 6 ++-- src/main/java/lab/World.java | 48 +++++++++++++++++++++++++++ 6 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 src/main/java/lab/Bullet.java create mode 100644 src/main/java/lab/BulletAnimated.java create mode 100644 src/main/java/lab/Cannon.java create mode 100644 src/main/java/lab/World.java diff --git a/.gitignore b/.gitignore index db44c8a..ef1ca70 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .settings/ .project .classpath +/bin/ diff --git a/src/main/java/lab/Bullet.java b/src/main/java/lab/Bullet.java new file mode 100644 index 0000000..d6e6ebf --- /dev/null +++ b/src/main/java/lab/Bullet.java @@ -0,0 +1,40 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class Bullet { + + private final World world; + + private final Point2D startPosition; + + private Point2D position; + + private Point2D velocity; + + private final double size; + + public Bullet(World world, Point2D startPosition, Point2D velocity, double size) { + this.world = world; + this.startPosition = startPosition; + this.position = startPosition; + this.velocity = velocity; + this.size = size; + + } + + public void draw(GraphicsContext gc) { + gc.setFill(Color.RED); + Point2D p = world.getPositionInCanvas(position); + gc.fillOval(p.getX(), p.getY(), size, size); + + } + + public void simulate(double deltaT) { + position = position.add(velocity.multiply(deltaT)); + position = new Point2D((position.getX() + world.getWidht()) % world.getWidht(), + (position.getY() + world.getHeight()) % world.getHeight()); + } +} diff --git a/src/main/java/lab/BulletAnimated.java b/src/main/java/lab/BulletAnimated.java new file mode 100644 index 0000000..73baf26 --- /dev/null +++ b/src/main/java/lab/BulletAnimated.java @@ -0,0 +1,11 @@ +package lab; + +import javafx.scene.image.Image; + +public class BulletAnimated { + + + private final Image image = new Image(this.getClass().getResourceAsStream("fireball-transparent.gif")); + + +} diff --git a/src/main/java/lab/Cannon.java b/src/main/java/lab/Cannon.java new file mode 100644 index 0000000..e240ba3 --- /dev/null +++ b/src/main/java/lab/Cannon.java @@ -0,0 +1,37 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; +import javafx.scene.transform.Affine; +import javafx.scene.transform.Transform; + +public class Cannon { + + private double angle; + + private final Point2D position; + + private final World world; + + public Cannon(World world,int angle, Point2D position) { + this.world = world; + this.angle = angle; + this.position = position; + } + + + public void draw(GraphicsContext gc) { + gc.save(); + gc.setFill(Color.STEELBLUE); + Point2D p = world.getPositionInCanvas(position); + gc.transform(new Affine(Transform.rotate(angle - 90, p.getX(), p.getY()))); + gc.fillRect(p.getX(), p.getY(), 100, 10); + gc.restore(); + } + + public void simulate(double deltaT) { + angle = angle + 10*deltaT; + } + +} diff --git a/src/main/java/lab/DrawingThread.java b/src/main/java/lab/DrawingThread.java index f2436cd..b78d31a 100644 --- a/src/main/java/lab/DrawingThread.java +++ b/src/main/java/lab/DrawingThread.java @@ -8,9 +8,11 @@ public class DrawingThread extends AnimationTimer { private final GraphicsContext gc; private long lastTime; + private final World world; public DrawingThread(Canvas canvas) { this.gc = canvas.getGraphicsContext2D(); + this.world = new World(canvas.getWidth(), canvas.getHeight()); } /** @@ -20,11 +22,11 @@ public class DrawingThread extends AnimationTimer { public void handle(long now) { if (lastTime > 0) { double deltaT = (now - lastTime) / 1e9; - // call simulate on world + world.simulate(deltaT); } //call draw on world + world.draw(gc); lastTime= now; - } } diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java new file mode 100644 index 0000000..3e9e3aa --- /dev/null +++ b/src/main/java/lab/World.java @@ -0,0 +1,48 @@ +package lab; + +import javafx.geometry.Point2D; +import javafx.scene.canvas.GraphicsContext; + +public class World { + + private double width; + + private double height; + + private final Bullet bullet; + + private final Cannon cannon; + + public World(double width, double height) { + this.width = width; + this.height = height; + this.bullet = new Bullet(this, new Point2D(25, 150), new Point2D(100, 100), 30); + this.cannon = new Cannon(this, 45, new Point2D(20, 20)); + } + + + public void simulate(double deltaT) { + bullet.simulate(deltaT); + cannon.simulate(deltaT); + } + + + public void draw(GraphicsContext gc) { + gc.clearRect(0, 0, width, height); + bullet.draw(gc); + cannon.draw(gc); + } + + public Point2D getPositionInCanvas(Point2D point) { + return new Point2D(point.getX(), height - point.getY()); + } + + + public double getWidht() { + return width; + } + + public double getHeight() { + return height; + } +} -- GitLab