lab2 release

This commit is contained in:
yu.shlyapin 2025-02-08 19:28:54 +04:00
parent f40d570442
commit c1652c191a
7 changed files with 108 additions and 10 deletions

View File

@ -1,8 +1,7 @@
package com.example.aircraftcarrier; 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.Enum.DirectionType;
import com.example.aircraftcarrier.Logic.Drawing.DrawingAircraftCarrier;
import com.example.aircraftcarrier.Logic.MovementStategy.*; import com.example.aircraftcarrier.Logic.MovementStategy.*;
import javafx.event.Event; import javafx.event.Event;
import javafx.fxml.FXML; import javafx.fxml.FXML;
@ -35,6 +34,9 @@ public class AircraftCarrierController implements Initializable {
@FXML @FXML
private ChoiceBox<String> choiceBoxStrategy; private ChoiceBox<String> choiceBoxStrategy;
private String[] strategyText = new String[]{"к центру", "к углу"}; private String[] strategyText = new String[]{"к центру", "к углу"};
@FXML
private ChoiceBox<String> choiceBoxShape;
private String[] shapeText = new String[]{"квадрат", "треугольник", "круг"};
@FXML @FXML
protected void ButtonStrategy_Click() { protected void ButtonStrategy_Click() {
@ -107,8 +109,16 @@ public class AircraftCarrierController implements Initializable {
try { try {
DrawingAircraftCarrier a = (DrawingAircraftCarrier) drawingAircraftCarrier; DrawingAircraftCarrier a = (DrawingAircraftCarrier) drawingAircraftCarrier;
a.setDrawingBlock(Integer.parseInt(inputCountBlocks.getCharacters().toString())); int countBlock = Integer.parseInt(inputCountBlocks.getCharacters().toString());
} catch (NumberFormatException ignored) {} 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.setCanvasWidth((int) canvas.getWidth());
drawingAircraftCarrier.setCanvasHeight((int) canvas.getHeight()); drawingAircraftCarrier.setCanvasHeight((int) canvas.getHeight());
@ -159,5 +169,6 @@ public class AircraftCarrierController implements Initializable {
canvas.widthProperty().bind(Root.widthProperty()); canvas.widthProperty().bind(Root.widthProperty());
canvas.heightProperty().bind(Root.heightProperty()); canvas.heightProperty().bind(Root.heightProperty());
choiceBoxStrategy.getItems().addAll(strategyText); choiceBoxStrategy.getItems().addAll(strategyText);
choiceBoxShape.getItems().addAll(shapeText);
} }
} }

View File

@ -1,11 +1,12 @@
package com.example.aircraftcarrier.Logic.Drawing; package com.example.aircraftcarrier.Logic.Drawing;
import com.example.aircraftcarrier.Logic.Entity.EntityAircraftCarrier; import com.example.aircraftcarrier.Logic.Entity.EntityAircraftCarrier;
import com.example.aircraftcarrier.Logic.MovementStategy.IMoveableObject;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier { public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier {
public DrawingBlock drawingBlock; public IDrawingBlock drawingBlock;
public DrawingAircraftCarrier( public DrawingAircraftCarrier(
int speed, int speed,
int weight, int weight,
@ -23,9 +24,8 @@ public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier {
hasСabin); hasСabin);
} }
public void setDrawingBlock(int count) { public void setDrawingBlock(IDrawingBlock iDrawingBlock) {
drawingBlock = new DrawingBlock(); drawingBlock = iDrawingBlock;
drawingBlock.setBlockCount(count);
} }
@Override @Override
@ -37,7 +37,7 @@ public class DrawingAircraftCarrier extends DrawingSimpleAircraftCarrier {
super.Draw(gc); super.Draw(gc);
if (entityAircraftCarrier.isHasDeck()) { if (entityAircraftCarrier.isHasDeck()) {
gc.setFill(aircraftCarrier.getPrimaryColor()); gc.setFill(entityAircraftCarrier.getPrimaryColor());
gc.fillRect(x + 50, y + 40, 55, 20); gc.fillRect(x + 50, y + 40, 55, 20);
} }
if (entityAircraftCarrier.isHasСabin()) { if (entityAircraftCarrier.isHasСabin()) {

View File

@ -4,7 +4,7 @@ import com.example.aircraftcarrier.Logic.Enum.BlockCount;
import javafx.scene.canvas.GraphicsContext; import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
public class DrawingBlock { public class DrawingBlock implements IDrawingBlock {
private BlockCount blockCount; private BlockCount blockCount;
public void setBlockCount(int blockCountValue) { public void setBlockCount(int blockCountValue) {

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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);
}

View File

@ -16,5 +16,6 @@
<TextField fx:id="inputCountBlocks" layoutX="446.0" layoutY="14.0" promptText="количество блоков" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="20.0" /> <TextField fx:id="inputCountBlocks" layoutX="446.0" layoutY="14.0" promptText="количество блоков" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="20.0" />
<ChoiceBox fx:id="choiceBoxStrategy" layoutX="430.0" layoutY="46.0" prefHeight="26.0" prefWidth="110.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="50.0" /> <ChoiceBox fx:id="choiceBoxStrategy" layoutX="430.0" layoutY="46.0" prefHeight="26.0" prefWidth="110.0" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="50.0" />
<Button layoutX="524.0" layoutY="83.0" mnemonicParsing="false" onAction="#ButtonStrategy_Click" text="шаг" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="80.0" /> <Button layoutX="524.0" layoutY="83.0" mnemonicParsing="false" onAction="#ButtonStrategy_Click" text="шаг" AnchorPane.rightAnchor="20.0" AnchorPane.topAnchor="80.0" />
<ChoiceBox fx:id="choiceBoxShape" layoutX="469.0" layoutY="116.0" prefHeight="26.0" prefWidth="110.0" AnchorPane.rightAnchor="20.599999999999994" AnchorPane.topAnchor="110.0" />
</children> </children>
</AnchorPane> </AnchorPane>