From 116675a1e3bdd056c247454833e63bcaf9138893 Mon Sep 17 00:00:00 2001 From: "yu.shlyapin" Date: Wed, 5 Feb 2025 20:56:06 +0400 Subject: [PATCH 1/3] lab1 v 0.1 --- .idea/encodings.xml | 7 + .idea/uiDesigner.xml | 124 ++++++++++++++++++ .idea/vcs.xml | 6 + pom.xml | 2 +- ...n.java => AircraftCarrierApplication.java} | 6 +- .../AircraftCarrierController.java | 85 ++++++++++++ .../aircraftcarrier/DirectionType.java | 9 ++ .../DrawingAircraftCarrier.java | 87 ++++++++++++ .../EntityAircraftCarrier.java | 55 ++++++++ .../aircraftcarrier/HelloController.java | 14 -- .../aircraftcarrier/AircraftCarrierView.fxml | 16 +++ .../example/aircraftcarrier/hello-view.fxml | 16 --- src/main/resources/down-arrow.png | Bin 0 -> 1130 bytes src/main/resources/left-arrow.png | Bin 0 -> 1102 bytes src/main/resources/right-arrow.png | Bin 0 -> 361 bytes src/main/resources/up-arrow.png | Bin 0 -> 1125 bytes 16 files changed, 393 insertions(+), 34 deletions(-) create mode 100644 .idea/encodings.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml rename src/main/java/com/example/aircraftcarrier/{HelloApplication.java => AircraftCarrierApplication.java} (61%) create mode 100644 src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java create mode 100644 src/main/java/com/example/aircraftcarrier/DirectionType.java create mode 100644 src/main/java/com/example/aircraftcarrier/DrawingAircraftCarrier.java create mode 100644 src/main/java/com/example/aircraftcarrier/EntityAircraftCarrier.java delete mode 100644 src/main/java/com/example/aircraftcarrier/HelloController.java create mode 100644 src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml delete mode 100644 src/main/resources/com/example/aircraftcarrier/hello-view.fxml create mode 100644 src/main/resources/down-arrow.png create mode 100644 src/main/resources/left-arrow.png create mode 100644 src/main/resources/right-arrow.png create mode 100644 src/main/resources/up-arrow.png diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9617294..fb82612 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ default-cli - com.example.aircraftcarrier/com.example.aircraftcarrier.HelloApplication + com.example.aircraftcarrier/AircraftCarrierApplication app app diff --git a/src/main/java/com/example/aircraftcarrier/HelloApplication.java b/src/main/java/com/example/aircraftcarrier/AircraftCarrierApplication.java similarity index 61% rename from src/main/java/com/example/aircraftcarrier/HelloApplication.java rename to src/main/java/com/example/aircraftcarrier/AircraftCarrierApplication.java index be0492f..35ac0ee 100644 --- a/src/main/java/com/example/aircraftcarrier/HelloApplication.java +++ b/src/main/java/com/example/aircraftcarrier/AircraftCarrierApplication.java @@ -7,11 +7,11 @@ import javafx.stage.Stage; import java.io.IOException; -public class HelloApplication extends Application { +public class AircraftCarrierApplication extends Application { @Override public void start(Stage stage) throws IOException { - FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml")); - Scene scene = new Scene(fxmlLoader.load(), 320, 240); + FXMLLoader fxmlLoader = new FXMLLoader(AircraftCarrierApplication.class.getResource("/com/example/aircraftcarrier/AircraftCarrierView.fxml")); + Scene scene = new Scene(fxmlLoader.load()); stage.setTitle("Hello!"); stage.setScene(scene); stage.show(); diff --git a/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java new file mode 100644 index 0000000..94c5aee --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java @@ -0,0 +1,85 @@ +package com.example.aircraftcarrier; + +import javafx.event.ActionEvent; +import javafx.event.Event; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.canvas.Canvas; +import javafx.scene.control.Button; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.scene.paint.Color; + +import java.net.URL; +import java.util.Random; +import java.util.ResourceBundle; + + +public class AircraftCarrierController implements Initializable { + Random random = new Random(); + DrawingAircraftCarrier drawingAircraftCarrier; + + @FXML + private Canvas canvas; + @FXML + protected void buttonCreate_Click() { + drawingAircraftCarrier = new DrawingAircraftCarrier( + random.nextInt(100)+100, + random.nextInt(1000)+1000, + Color.rgb( + random.nextInt(256), + random.nextInt(256), + random.nextInt(256) + ), + Color.rgb( + random.nextInt(256), + random.nextInt(256), + random.nextInt(256) + ), + random.nextBoolean(), + random.nextBoolean() + ); + drawingAircraftCarrier.setCanvasWidth(canvas.getWidth(),canvas.getHeight()); + drawingAircraftCarrier.setPosition( + random.nextInt(50)+10, + random.nextInt(50)+10 + ); + drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D()); + } + + @FXML + protected void MoveEvent(Event e) { + if (drawingAircraftCarrier == null) return; + + DirectionType directionType; + + if (e instanceof KeyEvent keyEvent) { + directionType = switch (keyEvent.getCode()) { + case KeyCode.W -> DirectionType.Up; + case KeyCode.S -> DirectionType.Down; + case KeyCode.A -> DirectionType.Left; + case KeyCode.D -> DirectionType.Right; + default -> DirectionType.Unknown; + }; + } else { + String direction = ((Button)e.getSource()).getId(); + directionType = switch (direction) { + case "up" -> DirectionType.Up; + case "down" -> DirectionType.Down; + case "left" -> DirectionType.Left; + case "right" -> DirectionType.Right; + default -> DirectionType.Unknown; + }; + } + + if (directionType == DirectionType.Unknown) return; + + drawingAircraftCarrier.Move(directionType); + drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D()); + } + + @Override + public void initialize(URL url, ResourceBundle resourceBundle) { + System.out.println("start"); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/aircraftcarrier/DirectionType.java b/src/main/java/com/example/aircraftcarrier/DirectionType.java new file mode 100644 index 0000000..66fd773 --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/DirectionType.java @@ -0,0 +1,9 @@ +package com.example.aircraftcarrier; + +public enum DirectionType { + Unknown, + Up, + Down, + Right, + Left; +} diff --git a/src/main/java/com/example/aircraftcarrier/DrawingAircraftCarrier.java b/src/main/java/com/example/aircraftcarrier/DrawingAircraftCarrier.java new file mode 100644 index 0000000..a7828fb --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/DrawingAircraftCarrier.java @@ -0,0 +1,87 @@ +package com.example.aircraftcarrier; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; +import javafx.scene.paint.Paint; + +public class DrawingAircraftCarrier { + public EntityAircraftCarrier aircraftCarrier; + private int x; + private int y; + private int widthCanvas; + private int heightCanvas; + private static final int widthPicture = 250; + private static final int heightPicture = 100; + + public DrawingAircraftCarrier( + int speed, + int weight, + Color primaryColor, + Color secondaryColor, + boolean hasDeck, + boolean hasСabin + ) { + aircraftCarrier = new EntityAircraftCarrier(speed, + weight, + primaryColor, + secondaryColor, + hasDeck, + hasСabin); + } + + public void setCanvasWidth(double width, double height) { +// if (x+widthPicture > widthCanvas || y+heightPicture > heightCanvas); + widthCanvas = (int)width; + heightCanvas = (int)height; + } + + public void setPosition(int newX, int newY) { + if (x == 0 || y == 0) { + x = newX; + y = newY; + } + if (x < 0 || y < 0 || x+widthPicture > widthCanvas || y+heightPicture > heightCanvas) return; + x = newX; + y = newY; + } + + public void Draw(GraphicsContext gc) { + gc.clearRect(0,0,widthCanvas,heightCanvas); + + double[] X = new double[]{x,x+200,x+250,x+200,x}; + double[] Y = new double[]{y,y,y+50,y+100,y+100}; + gc.strokePolygon(X, Y,5); + + gc.strokeOval(x+175,y+35,30,30); + + gc.setFill(aircraftCarrier.getPrimaryColor()); + gc.fillRect(x+50,y+40,55,20); + gc.setFill(aircraftCarrier.getSecondaryColor()); + gc.fillRect(x+105,y+25,30,50); + } + + public void Move(DirectionType direction) { + switch (direction) { + case Up: + if (y - aircraftCarrier.Step > 0) { + y -= aircraftCarrier.Step; + } + break; + case Down: + if (y + aircraftCarrier.Step + heightPicture < heightCanvas) { + y += aircraftCarrier.Step; + } + break; + case Right: + if (x + aircraftCarrier.Step + widthPicture < widthCanvas) { + x += aircraftCarrier.Step; + } + break; + case Left: + if (x - aircraftCarrier.Step > 0) { + x -= aircraftCarrier.Step; + } + break; + } + } +} diff --git a/src/main/java/com/example/aircraftcarrier/EntityAircraftCarrier.java b/src/main/java/com/example/aircraftcarrier/EntityAircraftCarrier.java new file mode 100644 index 0000000..8714e5d --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/EntityAircraftCarrier.java @@ -0,0 +1,55 @@ +package com.example.aircraftcarrier; + +import javafx.scene.paint.Color; + +public class EntityAircraftCarrier { + private int Speed; + private double Weight; + public int Step; + private Color PrimaryColor; + private Color SecondaryColor; + private boolean HasDeck; + private boolean HasСabin; + + + public EntityAircraftCarrier( + int speed, + double weight, + Color primaryColor, + Color secondaryColor, + boolean hasDeck, + boolean hasСabin + ) { + this.Speed = speed; + this.Weight = weight; + this.PrimaryColor = primaryColor; + this.SecondaryColor = secondaryColor; + this.HasDeck = hasDeck; + this.HasСabin = hasСabin; + this.Step = (int) (Speed * 100 / Weight); + } + + public int getSpeed() { + return Speed; + } + + public double getWeight() { + return Weight; + } + + public Color getPrimaryColor() { + return PrimaryColor; + } + + public Color getSecondaryColor() { + return SecondaryColor; + } + + public boolean isHasDeck() { + return HasDeck; + } + + public boolean isHasСabin() { + return HasСabin; + } +} diff --git a/src/main/java/com/example/aircraftcarrier/HelloController.java b/src/main/java/com/example/aircraftcarrier/HelloController.java deleted file mode 100644 index b21e401..0000000 --- a/src/main/java/com/example/aircraftcarrier/HelloController.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.aircraftcarrier; - -import javafx.fxml.FXML; -import javafx.scene.control.Label; - -public class HelloController { - @FXML - private Label welcomeText; - - @FXML - protected void onHelloButtonClick() { - welcomeText.setText("Welcome to JavaFX Application!"); - } -} \ No newline at end of file diff --git a/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml b/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml new file mode 100644 index 0000000..ddb9fc7 --- /dev/null +++ b/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml @@ -0,0 +1,16 @@ + + + + + + + + + +