From 97e94c4a21eb6a06860a9a04a3bc067ff6f580c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz> Date: Mon, 25 Sep 2023 10:11:26 +0200 Subject: [PATCH] Allow define position for dragons. --- src/main/java/lab/App.java | 37 +++++++++++++++++++++++++-- src/main/java/lab/GameController.java | 5 ++-- src/main/java/lab/World.java | 15 +++-------- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/main/java/lab/App.java b/src/main/java/lab/App.java index 71244db..d5f6089 100644 --- a/src/main/java/lab/App.java +++ b/src/main/java/lab/App.java @@ -1,7 +1,10 @@ package lab; +import java.util.Random; + import javafx.application.Application; import javafx.fxml.FXMLLoader; +import javafx.geometry.Point2D; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; @@ -13,6 +16,7 @@ import javafx.stage.WindowEvent; */ public class App extends Application { + private static final int DEFAULT_NUMBER_OF_DRAGONS = 2; public static void main(String[] args) { launch(args); } @@ -32,10 +36,11 @@ public class App extends Application { primaryStage.setScene(scene); primaryStage.resizableProperty().set(false); - primaryStage.setTitle("Java 1 - 6th laboratory"); + primaryStage.setTitle("Java 1"); primaryStage.show(); controller = loader.getController(); - controller.startGame(); + Point2D[][] dragonsInit = getDragonsInit(scene.getWidth(), scene.getHeight()); + controller.startGame(dragonsInit); //Exit program when main window is closed primaryStage.setOnCloseRequest(this::exitProgram); } catch (Exception e) { @@ -45,6 +50,34 @@ public class App extends Application { + private Point2D[][] getDragonsInit(double width, double height) { + + //ask whether would like to enter dragons + + //return default + return getDefaultDragonsInit(width, height); + + } + + + + private Point2D[][] getDefaultDragonsInit(double width, double height) { + Random rnd = new Random(); + Point2D[][] result = new Point2D[DEFAULT_NUMBER_OF_DRAGONS][]; + for (int i = 0; i < result.length; i++) { + int x = rnd.nextInt((int) width); + int y = rnd.nextInt((int) height); + int vel_x = (rnd.nextInt(10) - 5) * 10; + int vel_y = (rnd.nextInt(10) - 5) * 10; + result[i] = new Point2D[2]; + result[i][0] = new Point2D(x, y); + result[i][1] = new Point2D(vel_x, vel_y); + } + return result; + } + + + private void exitProgram(WindowEvent evt) { controller.stopGame(); System.exit(0); diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java index a13d519..4519477 100644 --- a/src/main/java/lab/GameController.java +++ b/src/main/java/lab/GameController.java @@ -3,6 +3,7 @@ import javafx.animation.AnimationTimer; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; +import javafx.geometry.Point2D; import javafx.scene.canvas.Canvas; import javafx.scene.control.Label; import javafx.scene.control.Slider; @@ -31,8 +32,8 @@ public class GameController { public GameController() { } - public void startGame() { - this.world = new World(canvas.getWidth(), canvas.getHeight()); + public void startGame(Point2D[][] dragonInit) { + this.world = new World(canvas.getWidth(), canvas.getHeight(), dragonInit); //Draw scene on a separate thread to avoid blocking UI. animationTimer = new DrawingThread(canvas, world); angleSlider.valueProperty().addListener(this::angleChanged); diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java index 817ed95..b233dcd 100644 --- a/src/main/java/lab/World.java +++ b/src/main/java/lab/World.java @@ -1,13 +1,10 @@ package lab; -import java.util.Random; - import javafx.geometry.Point2D; import javafx.scene.canvas.GraphicsContext; public class World { - private final static int NUMBER_OF_DRAGONS = 2; private double width; private double height; @@ -20,22 +17,18 @@ public class World { private DrawableSimulable []entities; - public World(double width, double height) { + public World(double width, double height, Point2D [][]dragonInit) { super(); this.width = width; this.height = height; Cannon cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20)); - entities = new DrawableSimulable[2 + NUMBER_OF_DRAGONS]; + entities = new DrawableSimulable[2 + dragonInit.length]; entities[0] = cannon; entities[1] = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40); - Random rnd = new Random(); for (int i = 2; i < entities.length; i++) { - int x = rnd.nextInt((int) width); - int y = rnd.nextInt((int) height); - int vel_x = (rnd.nextInt(10) - 5) * 10; - int vel_y = (rnd.nextInt(10) - 5) * 10; - entities[i] = new Dragon(this, new Point2D(x, y), new Point2D(vel_x, vel_y)); + + entities[i] = new Dragon(this, dragonInit[i - 2][0], dragonInit[i - 2][1]); } } -- GitLab