diff --git a/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java index 7605608..26c88ed 100644 --- a/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java +++ b/src/main/java/com/example/aircraftcarrier/AircraftCarrierController.java @@ -1,8 +1,7 @@ package com.example.aircraftcarrier; -import com.example.aircraftcarrier.Logic.Drawing.DrawingSimpleAircraftCarrier; +import com.example.aircraftcarrier.Logic.Drawing.*; import com.example.aircraftcarrier.Logic.Enum.DirectionType; -import com.example.aircraftcarrier.Logic.Drawing.DrawingAircraftCarrier; import com.example.aircraftcarrier.Logic.MovementStategy.*; import javafx.event.Event; import javafx.fxml.FXML; @@ -35,6 +34,9 @@ public class AircraftCarrierController implements Initializable { @FXML private ChoiceBox choiceBoxStrategy; private String[] strategyText = new String[]{"к центру", "к углу"}; + @FXML + private ChoiceBox choiceBoxShape; + private String[] shapeText = new String[]{"квадрат", "треугольник", "круг"}; @FXML protected void ButtonStrategy_Click() { @@ -107,8 +109,16 @@ public class AircraftCarrierController implements Initializable { try { DrawingAircraftCarrier a = (DrawingAircraftCarrier) drawingAircraftCarrier; - a.setDrawingBlock(Integer.parseInt(inputCountBlocks.getCharacters().toString())); - } catch (NumberFormatException ignored) {} + int countBlock = Integer.parseInt(inputCountBlocks.getCharacters().toString()); + IDrawingBlock imo = switch (choiceBoxShape.getValue()) { + case "квадрат" -> new DrawingBlock(); + case "треугольник" -> new DrawingBlockTriangle(); + case "круг" -> new DrawingBlockCircle(); + default -> throw new Exception("нет нужной опции"); + }; + imo.setBlockCount(countBlock); + a.setDrawingBlock(imo); + } catch (Exception ignored) {} drawingAircraftCarrier.setCanvasWidth((int) canvas.getWidth()); drawingAircraftCarrier.setCanvasHeight((int) canvas.getHeight()); @@ -159,5 +169,6 @@ public class AircraftCarrierController implements Initializable { canvas.widthProperty().bind(Root.widthProperty()); canvas.heightProperty().bind(Root.heightProperty()); choiceBoxStrategy.getItems().addAll(strategyText); + choiceBoxShape.getItems().addAll(shapeText); } } \ No newline at end of file diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingAircraftCarrier.java b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingAircraftCarrier.java index aaf44a8..b5b3950 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingAircraftCarrier.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingAircraftCarrier.java @@ -1,11 +1,12 @@ package com.example.aircraftcarrier.Logic.Drawing; import com.example.aircraftcarrier.Logic.Entity.EntityAircraftCarrier; +import com.example.aircraftcarrier.Logic.MovementStategy.IMoveableObject; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier { - public DrawingBlock drawingBlock; + public IDrawingBlock drawingBlock; public DrawingAircraftCarrier( int speed, int weight, @@ -23,9 +24,8 @@ public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier { hasСabin); } - public void setDrawingBlock(int count) { - drawingBlock = new DrawingBlock(); - drawingBlock.setBlockCount(count); + public void setDrawingBlock(IDrawingBlock iDrawingBlock) { + drawingBlock = iDrawingBlock; } @Override @@ -37,7 +37,7 @@ public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier { super.Draw(gc); if (entityAircraftCarrier.isHasDeck()) { - gc.setFill(aircraftCarrier.getPrimaryColor()); + gc.setFill(entityAircraftCarrier.getPrimaryColor()); gc.fillRect(x + 50, y + 40, 55, 20); } if (entityAircraftCarrier.isHasСabin()) { diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java index 54084e5..c23cb46 100644 --- a/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java +++ b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlock.java @@ -4,7 +4,7 @@ import com.example.aircraftcarrier.Logic.Enum.BlockCount; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; -public class DrawingBlock { +public class DrawingBlock implements IDrawingBlock { private BlockCount blockCount; public void setBlockCount(int blockCountValue) { diff --git a/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlockCircle.java b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlockCircle.java new file mode 100644 index 0000000..ad6cfda --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlockCircle.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 DrawingBlockCircle implements IDrawingBlock { + private BlockCount blockCount; + + public DrawingBlockCircle() {} + public DrawingBlockCircle(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.fillOval(x,y,10,10); + gc.fillOval(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/Logic/Drawing/DrawingBlockTriangle.java b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlockTriangle.java new file mode 100644 index 0000000..8e676d2 --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/DrawingBlockTriangle.java @@ -0,0 +1,40 @@ +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 DrawingBlockTriangle implements IDrawingBlock { + private BlockCount blockCount; + + public DrawingBlockTriangle() {} + public DrawingBlockTriangle(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); + double[] X_first = new double[]{x+5,x+10,x}; + double[] Y_first = new double[]{y,y+10,y+10}; + double[] X_second = new double[]{x+15+5,x+15+10,x+15}; + double[] Y_second = Y_first; + gc.fillPolygon(X_first, Y_first,3); + gc.fillPolygon(X_second, Y_second,3); + } + + 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/Logic/Drawing/IDrawingBlock.java b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/IDrawingBlock.java new file mode 100644 index 0000000..62af07c --- /dev/null +++ b/src/main/java/com/example/aircraftcarrier/Logic/Drawing/IDrawingBlock.java @@ -0,0 +1,10 @@ +package com.example.aircraftcarrier.Logic.Drawing; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public interface IDrawingBlock { + void setBlockCount(int blockCountValue); + + void Draw(GraphicsContext gc, int x, int y, Color color); +} diff --git a/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml b/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml index d69e822..868658c 100644 --- a/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml +++ b/src/main/resources/com/example/aircraftcarrier/AircraftCarrierView.fxml @@ -16,5 +16,6 @@