From d9d73ad660fad4ead6b9352a728ab27d92875431 Mon Sep 17 00:00:00 2001 From: "yu.shlyapin" Date: Fri, 7 Feb 2025 20:22:55 +0400 Subject: [PATCH] lab1 release --- .../AircraftCarrierApplication.java | 2 + .../AircraftCarrierController.java | 36 ++++++++++---- .../Drawing}/DrawingAircraftCarrier.java | 48 ++++++++++++------- .../Logic/Drawing/DrawingBlock.java | 36 ++++++++++++++ .../Entity}/EntityAircraftCarrier.java | 2 +- .../Logic/Enum/BlockCount.java | 31 ++++++++++++ .../{ => Logic/Enum}/DirectionType.java | 2 +- src/main/java/module-info.java | 6 +++ .../aircraftcarrier/AircraftCarrierView.fxml | 13 ++--- 9 files changed, 143 insertions(+), 33 deletions(-) rename src/main/java/com/example/aircraftcarrier/{ => Logic/Drawing}/DrawingAircraftCarrier.java (59%) create mode 100644 src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java rename src/main/java/com/example/aircraftcarrier/{ => Logic/Entity}/EntityAircraftCarrier.java (95%) create mode 100644 src/main/java/com/example/aircraftcarrier/Logic/Enum/BlockCount.java rename src/main/java/com/example/aircraftcarrier/{ => Logic/Enum}/DirectionType.java (63%) diff --git a/src/main/java/com/example/aircraftcarrier/AircraftCarrierApplication.java b/src/main/java/com/example/aircraftcarrier/AircraftCarrierApplication.java index 35ac0ee..049f7b4 100644 --- a/src/main/java/com/example/aircraftcarrier/AircraftCarrierApplication.java +++ b/src/main/java/com/example/aircraftcarrier/AircraftCarrierApplication.java @@ -1,6 +1,8 @@ package com.example.aircraftcarrier; import javafx.application.Application; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; diff --git a/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java index 94c5aee..15a37bb 100644 --- a/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java +++ b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java @@ -1,13 +1,16 @@ package com.example.aircraftcarrier; -import javafx.event.ActionEvent; +import com.example.aircraftcarrier.Logic.Enum.DirectionType; +import com.example.aircraftcarrier.Logic.Drawing.DrawingAircraftCarrier; 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.control.TextField; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; +import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Color; import java.net.URL; @@ -19,13 +22,17 @@ public class AircraftCarrierController implements Initializable { Random random = new Random(); DrawingAircraftCarrier drawingAircraftCarrier; + @FXML + private AnchorPane Root; @FXML private Canvas canvas; @FXML + private TextField inputCountBlocks; + @FXML protected void buttonCreate_Click() { drawingAircraftCarrier = new DrawingAircraftCarrier( - random.nextInt(100)+100, - random.nextInt(1000)+1000, + random.nextInt(100) + 100, + random.nextInt(1000) + 1000, Color.rgb( random.nextInt(256), random.nextInt(256), @@ -39,12 +46,21 @@ public class AircraftCarrierController implements Initializable { random.nextBoolean(), random.nextBoolean() ); - drawingAircraftCarrier.setCanvasWidth(canvas.getWidth(),canvas.getHeight()); - drawingAircraftCarrier.setPosition( - random.nextInt(50)+10, - random.nextInt(50)+10 - ); - drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D()); + + try { + drawingAircraftCarrier.setDrawingBlock(Integer.parseInt(inputCountBlocks.getCharacters().toString())); + } catch (NumberFormatException ignored) {} + + drawingAircraftCarrier.setCanvasWidth((int) canvas.getWidth()); + drawingAircraftCarrier.setCanvasHeight((int) canvas.getHeight()); + if ( + drawingAircraftCarrier.setPosition( + random.nextInt(50) + 10, + random.nextInt(50) + 10 + ) + ) { + drawingAircraftCarrier.Draw(canvas.getGraphicsContext2D()); + } } @FXML @@ -81,5 +97,7 @@ public class AircraftCarrierController implements Initializable { @Override public void initialize(URL url, ResourceBundle resourceBundle) { System.out.println("start"); + canvas.widthProperty().bind(Root.widthProperty()); + canvas.heightProperty().bind(Root.heightProperty()); } } \ No newline at end of file diff --git a/src/main/java/com/example/aircraftcarrier/DrawingAircraftCarrier.java b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingAircraftCarrier.java similarity index 59% rename from src/main/java/com/example/aircraftcarrier/DrawingAircraftCarrier.java rename to src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingAircraftCarrier.java index a7828fb..058ca72 100644 --- a/src/main/java/com/example/aircraftcarrier/DrawingAircraftCarrier.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingAircraftCarrier.java @@ -1,11 +1,14 @@ -package com.example.aircraftcarrier; +package com.example.aircraftcarrier.Logic.Drawing; +import com.example.aircraftcarrier.Logic.Enum.BlockCount; +import com.example.aircraftcarrier.Logic.Enum.DirectionType; +import com.example.aircraftcarrier.Logic.Entity.EntityAircraftCarrier; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; -import javafx.scene.paint.Paint; public class DrawingAircraftCarrier { public EntityAircraftCarrier aircraftCarrier; + public DrawingBlock drawingBlock; private int x; private int y; private int widthCanvas; @@ -29,20 +32,26 @@ public class DrawingAircraftCarrier { hasСabin); } - public void setCanvasWidth(double width, double height) { -// if (x+widthPicture > widthCanvas || y+heightPicture > heightCanvas); - widthCanvas = (int)width; - heightCanvas = (int)height; + public void setDrawingBlock(int count) { + drawingBlock = new DrawingBlock(); + drawingBlock.setBlockCount(count); } - 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; + public void setCanvasWidth(int width) { + if (x+widthPicture > width); + widthCanvas = width; + } + + public void setCanvasHeight(int height) { + if (y+heightPicture > height) return; + heightCanvas = height; + } + + public boolean setPosition(int newX, int newY) { + if (newX < 0 || newY < 0 || newX + widthPicture > widthCanvas || newY + heightPicture > heightCanvas) return false; x = newX; y = newY; + return true; } public void Draw(GraphicsContext gc) { @@ -54,10 +63,17 @@ public class DrawingAircraftCarrier { 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); + if (aircraftCarrier.isHasDeck()) { + gc.setFill(aircraftCarrier.getPrimaryColor()); + gc.fillRect(x + 50, y + 40, 55, 20); + } + if (aircraftCarrier.isHasСabin()) { + gc.setFill(aircraftCarrier.getSecondaryColor()); + gc.fillRect(x + 105, y + 25, 30, 50); + } + + if (drawingBlock == null) return; + drawingBlock.Draw(gc,x,y,aircraftCarrier.getSecondaryColor()); } public void Move(DirectionType direction) { diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java new file mode 100644 index 0000000..82b7d67 --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java @@ -0,0 +1,36 @@ +package com.example.aircraftcarrier.Logic.Drawing; + +import com.example.aircraftcarrier.Logic.Enum.BlockCount; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class DrawingBlock { + private BlockCount blockCount; + + public DrawingBlock() {} + public DrawingBlock(int blockCountValue) { + this.blockCount = BlockCount.GetBlockCount(blockCountValue); + } + + public void setBlockCount(int blockCountValue) { + this.blockCount = BlockCount.GetBlockCount(blockCountValue); + } + + private void DrawTwoBlock(GraphicsContext gc, int x, int y, Color color) { + gc.setFill(color); + gc.fillRect(x,y,10,10); + gc.fillRect(x+15,y,10,10); + } + + public void Draw(GraphicsContext gc, int x, int y, Color color) { + switch (blockCount) { + case Six: + DrawTwoBlock(gc,x+20,y+50,color); + case Four: + DrawTwoBlock(gc,x+20,y+35,color); + case Two: + DrawTwoBlock(gc,x+20,y+20,color); + break; + } + } +} diff --git a/src/main/java/com/example/aircraftcarrier/EntityAircraftCarrier.java b/src/main/java/com/example/aircraftcarrier/Logic/Entity/EntityAircraftCarrier.java similarity index 95% rename from src/main/java/com/example/aircraftcarrier/EntityAircraftCarrier.java rename to src/main/java/com/example/aircraftcarrier/Logic/Entity/EntityAircraftCarrier.java index 8714e5d..493724e 100644 --- a/src/main/java/com/example/aircraftcarrier/EntityAircraftCarrier.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Entity/EntityAircraftCarrier.java @@ -1,4 +1,4 @@ -package com.example.aircraftcarrier; +package com.example.aircraftcarrier.Logic.Entity; import javafx.scene.paint.Color; diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Enum/BlockCount.java b/src/main/java/com/example/aircraftcarrier/Logic/Enum/BlockCount.java new file mode 100644 index 0000000..5dcbd1b --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/Logic/Enum/BlockCount.java @@ -0,0 +1,31 @@ +package com.example.aircraftcarrier.Logic.Enum; + +public enum BlockCount { + Two(2), + Four(4), + Six(6), + Other(); + + private Integer count; + + BlockCount() { + this.count = null; + } + + BlockCount(int count) { + this.count = count; + } + + public static BlockCount GetBlockCount(int count) { + return switch (count) { + case 2 -> Two; + case 4 -> Four; + case 6 -> Six; + default -> Other; + }; + } + + public Integer getCount() { + return count; + } +} diff --git a/src/main/java/com/example/aircraftcarrier/DirectionType.java b/src/main/java/com/example/aircraftcarrier/Logic/Enum/DirectionType.java similarity index 63% rename from src/main/java/com/example/aircraftcarrier/DirectionType.java rename to src/main/java/com/example/aircraftcarrier/Logic/Enum/DirectionType.java index 66fd773..425a393 100644 --- a/src/main/java/com/example/aircraftcarrier/DirectionType.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Enum/DirectionType.java @@ -1,4 +1,4 @@ -package com.example.aircraftcarrier; +package com.example.aircraftcarrier.Logic.Enum; public enum DirectionType { Unknown, diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 280b348..9b57da2 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -5,4 +5,10 @@ module com.example.aircraftcarrier { opens com.example.aircraftcarrier to javafx.fxml; exports com.example.aircraftcarrier; + exports com.example.aircraftcarrier.Logic.Drawing; + opens com.example.aircraftcarrier.Logic.Drawing to javafx.fxml; + exports com.example.aircraftcarrier.Logic.Entity; + opens com.example.aircraftcarrier.Logic.Entity to javafx.fxml; + exports com.example.aircraftcarrier.Logic.Enum; + opens com.example.aircraftcarrier.Logic.Enum to javafx.fxml; } \ 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 index ddb9fc7..313e711 100644 --- a/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml +++ b/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml @@ -4,13 +4,14 @@ - + - +