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

feat: solution

parent a43deb92
No related merge requests found
......@@ -8,11 +8,14 @@ public class DrawingThread extends AnimationTimer {
private final Canvas canvas;
private final GraphicsContext gc;
private Level level;
private long lastTime;
public DrawingThread(Canvas canvas) {
this.canvas = canvas;
this.gc = canvas.getGraphicsContext2D();
this.level = new Level(canvas.getWidth(), canvas.getHeight());
lastTime = System.nanoTime();
}
/**
......@@ -20,11 +23,9 @@ public class DrawingThread extends AnimationTimer {
*/
@Override
public void handle(long now) {
// put your code here
// gc.setFill(Color.AQUA);
// gc.setStroke(Color.BLACK);
// gc.fillOval(10, 10, 20, 20);
level.draw(gc);
level.simulate(now - lastTime);
lastTime = now;
}
}
package lab;
import javafx.geometry.Dimension2D;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class Level {
private NicerObstacle nicerObstacle;
private Obstacle obstacle1;
private Obstacle obstacle2;
private Player player;
private double width;
private double height;
public Level(double width, double height) {
this.width = width;
this.height = height;
nicerObstacle = new NicerObstacle(this, new Point2D(20, 150));
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(0.5, -0.1));
}
public void draw(GraphicsContext gc) {
gc.setFill(Color.WHITE);
gc.clearRect(0, 0, width, height);
nicerObstacle.draw(gc);
obstacle1.draw(gc);
obstacle2.draw(gc);
player.draw(gc);
}
public void simulate(double delay) {
player.simulate(0);
}
}
package lab;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
public class NicerObstacle {
private Level level;
private Image image;
private Point2D position;
public NicerObstacle(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 simulate(double delay) {
}
}
package lab;
import javafx.geometry.Dimension2D;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class Obstacle {
private Level level;
private Point2D position;
private Dimension2D size;
public Obstacle(Level level) {
this(level, new Point2D(200, 100), new Dimension2D(30, 20));
}
public Obstacle(Level level, Point2D position, Dimension2D size) {
this.level = level;
this.position = position;
this.size = size;
}
public void draw(GraphicsContext gc) {
gc.save();
gc.setFill(Color.BLUEVIOLET);
gc.setStroke(Color.RED);
gc.setLineWidth(3);
gc.fillRect(position.getX(), position.getY(), size.getWidth(), size.getHeight());
gc.strokeRect(position.getX(), position.getY(), size.getWidth(), size.getHeight());
gc.restore();
}
public void simulate(double delay) {
}
}
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.Rotate;
public class Player {
private Level level;
private Point2D position;
private Point2D speed;
public Player(Level level, Point2D position, Point2D speed) {
this.level = level;
this.position = position;
this.speed = speed;
}
public void draw(GraphicsContext gc) {
gc.save();
Point2D center = position.add(10, 25);
double angle = speed.angle(1, 0);
if (speed.getY() < 0) {
angle = -angle;
}
Rotate rotateMatrix = Affine.rotate(angle, center.getX(), center.getY());
gc.setTransform(new Affine(rotateMatrix));
gc.setFill(Color.AQUA);
gc.setStroke(Color.GREEN);
gc.setLineWidth(5);
gc.fillRect(center.getX(), center.getY(), 50, 1);
gc.fillRoundRect(position.getX(), position.getY(), 20, 50, 20, 20);
gc.strokeRoundRect(position.getX(), position.getY(), 20, 50, 20, 20);
gc.restore();
}
public void simulate(double delay) {
position = position.add(speed);
speed = speed.multiply(0.998);
}
}
src/main/resources/lab/spike.gif

23.8 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