diff --git a/src/main/java/lab/App.java b/src/main/java/lab/App.java index 71244dbfc7ef2b558e09052b2172a825b83a576d..d5f60893d77939385c4e01f8a2803aea4c54f790 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 a13d5192cb718e83d99735c0b14d569253de3d18..4519477afdda718ccaa1c3e62e8db1506eec2bef 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 817ed95fa86f528fa9878800f2a6126d816533ac..b233dcdfa5a5a23c7b8b76ccb45c08c4a1cc53f5 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]); } }