Skip to content
Snippets Groups Projects
Commit 59a92487 authored by koz01's avatar koz01
Browse files

2023_Wed_7-15_solution

parent 0b3d117a
Branches
No related merge requests found
package lab; package lab;
import javafx.geometry.Point2D; import javafx.geometry.Point2D;
import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image; import javafx.scene.image.Image;
...@@ -80,4 +81,8 @@ public class BulletAnimated { ...@@ -80,4 +81,8 @@ public class BulletAnimated {
accelerate = true; accelerate = true;
} }
public Rectangle2D getBoundingBox() {
return new Rectangle2D(position.getX(), position.getY(), size, size);
}
} }
package lab;
import javafx.geometry.Point2D;
import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
public class Dragon {
private static final int SIZE = 40;
private final Image image = new Image(Dragon.class.getResourceAsStream("dragon.gif"));
private final World world;
private Point2D position;
private Point2D speed;
public Dragon(World world, Point2D position, Point2D speed) {
this.world = world;
this.position = position;
this.speed = speed;
}
public void draw(GraphicsContext gc) {
Point2D temp = world.getCanvasPoint(position, SIZE);
gc.drawImage(image, temp.getX(), temp.getY(), SIZE, SIZE);
}
public void simulate(double deltaT) {
position = position.add(speed.multiply(deltaT));
position = new Point2D((position.getX() + world.getWidth()) % world.getWidth()
, (position.getY() + world.getHeight()) % world.getHeight());
}
public Rectangle2D getBoundingBox() {
return new Rectangle2D(position.getX(), position.getY(), SIZE, SIZE);
}
public void hit() {
speed = speed.multiply(-1);
}
}
package lab; package lab;
import javafx.geometry.Point2D; import javafx.geometry.Point2D;
import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
public class World { public class World {
...@@ -8,12 +9,23 @@ public class World { ...@@ -8,12 +9,23 @@ public class World {
private double height; private double height;
private BulletAnimated bulletAnimatted; private BulletAnimated bulletAnimatted;
private Cannon cannon; private Cannon cannon;
private Dragon []dragons;
private double actualTime;
private double lastHit;
public World(double width, double height) { public World(double width, double height) {
this.width = width; this.width = width;
this.height = height; this.height = height;
cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20)); cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20));
bulletAnimatted = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40); bulletAnimatted = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40);
//init array
dragons = new Dragon[] {
new Dragon(this, new Point2D(50, 20), new Point2D(70, 50))
,new Dragon(this, new Point2D(150, 20), new Point2D(-140, 50))
,new Dragon(this, new Point2D(100, 70), new Point2D(7, 50))
,new Dragon(this, new Point2D(115, 900), new Point2D(170, 50))
,new Dragon(this, new Point2D(60, 20), new Point2D(70, 50))};
} }
public Point2D getCanvasPoint(Point2D worldPoint, double heightOfEntity) { public Point2D getCanvasPoint(Point2D worldPoint, double heightOfEntity) {
...@@ -24,13 +36,31 @@ public class World { ...@@ -24,13 +36,31 @@ public class World {
gc.clearRect(0, 0, width, height); gc.clearRect(0, 0, width, height);
cannon.draw(gc); cannon.draw(gc);
bulletAnimatted.draw(gc); bulletAnimatted.draw(gc);
//for each dragon from dragons call draw
for(Dragon dragon: dragons) {
dragon.draw(gc);
}
} }
public void simulate(double timeDelta) { public void simulate(double timeDelta) {
actualTime += timeDelta;
bulletAnimatted.simulate(timeDelta); bulletAnimatted.simulate(timeDelta);
cannon.simulate(timeDelta); cannon.simulate(timeDelta);
//for each dragon from dragons call simulate
for(Dragon dragon: dragons) {
dragon.simulate(timeDelta);
}
if (actualTime - lastHit > 1) {
Rectangle2D bbOfBullet = bulletAnimatted.getBoundingBox();
for(Dragon dragon: dragons) {
if (dragon.getBoundingBox().intersects(bbOfBullet)) {
dragon.hit();
lastHit = actualTime;
}
}
}
} }
public double getWidth() { public double getWidth() {
return width; return width;
} }
......
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