diff --git a/.idea/PIbd-22_Turner_I.A._AntiAircraftGun._Hard.iml b/.idea/PIbd-22_Turner_I.A._AntiAircraftGun._Hard.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/PIbd-22_Turner_I.A._AntiAircraftGun._Hard.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/AntiAircraftGun/.idea/uiDesigner.xml b/AntiAircraftGun/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/AntiAircraftGun/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/AbstractMap.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/AbstractMap.java new file mode 100644 index 0000000..c17cecb --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/AbstractMap.java @@ -0,0 +1,242 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; + +import java.util.Random; + +public abstract class AbstractMap { + private IDrawingObject _drawingObject = null; + private GraphicsContext _graphicsContext = null; + protected int[][] _map = null; + protected int _width; + protected int _height; + protected float _size_x; + protected float _size_y; + protected final Random _random = new Random(); + protected final int _freeRoad = 0; + protected final int _barrier = 1; + + public void CreateMap(int width, int height, IDrawingObject drawingObject, GraphicsContext gc) + { + _width = width; + _height = height; + _drawingObject = drawingObject; + _graphicsContext = gc; + GenerateMap(); + while (!SetObjectOnMap()) + { + GenerateMap(); + } + DrawMapWithObject(); + } + + public void MoveObject(Direction direction) + { + boolean roadIsClear = true; + + float[] position = _drawingObject.GetCurrentPosition(); + int xNumOfCells; + int yNumOfCells; + int xObjOffset; + int yObjOffset; + + switch (direction) + { + case Up: + xNumOfCells = (int)Math.ceil((position[2] - position[0]) / _size_x); + yNumOfCells = (int)Math.ceil(_drawingObject.GetStep() / _size_y); + xObjOffset = (int)(position[0] / _size_x); + yObjOffset = (int)Math.floor(position[1] / _size_y); + + for (int i = 0; i < yNumOfCells; i++) + { + if (!roadIsClear) + { + break; + } + for (int j = 0; j < xNumOfCells; j++) + { + if (yObjOffset - i < 0 || xObjOffset + j >= _map[0].length) + { + break; + } + if (_map[xObjOffset + j][yObjOffset - i] == _barrier) + { + roadIsClear = false; + break; + } + } + } + break; + + case Down: + xNumOfCells = (int)Math.ceil((position[2] - position[0]) / _size_x); + yNumOfCells = (int)Math.ceil(_drawingObject.GetStep() / _size_y); + xObjOffset = (int)(position[0] / _size_x); + yObjOffset = (int)Math.ceil(position[3]/ _size_y); + + for (int i = 0; i < yNumOfCells; i++) + { + if (!roadIsClear) + { + break; + } + for (int j = 0; j < xNumOfCells; j++) + { + if (yObjOffset + i >= _map.length || xObjOffset + j >= _map[0].length) + { + break; + } + if (_map[xObjOffset + j][yObjOffset + i] == _barrier) + { + roadIsClear = false; + break; + } + } + } + break; + + case Left: + xNumOfCells = (int)Math.ceil(_drawingObject.GetStep() / _size_x); + yNumOfCells = (int)Math.ceil((position[3] - position[1]) / _size_y); + xObjOffset = (int)Math.floor(position[0] / _size_x); + yObjOffset = (int)(position[1] / _size_y); + + for (int i = 0; i < yNumOfCells; i++) + { + if (!roadIsClear) + { + break; + } + for (int j = 0; j < xNumOfCells; j++) + { + if (yObjOffset + i >= _map.length || xObjOffset - j < 0) + { + break; + } + if (_map[xObjOffset - j][yObjOffset + i] == _barrier) + { + roadIsClear = false; + break; + } + } + } + break; + + case Right: + xNumOfCells = (int)Math.ceil(_drawingObject.GetStep() / _size_x); + yNumOfCells = (int)Math.ceil((position[3] - position[1]) / _size_y); + xObjOffset = (int)(position[2] / _size_x); + yObjOffset = (int)Math.ceil(position[1] / _size_y); + + for (int i = 0; i < yNumOfCells; i++) + { + if (!roadIsClear) + { + break; + } + for (int j = 0; j < xNumOfCells; j++) + { + if (yObjOffset + i >= _map.length || xObjOffset + j >= _map[0].length) + { + break; + } + if (_map[xObjOffset + j][yObjOffset + i] == _barrier) + { + roadIsClear = false; + break; + } + } + } + break; + } + if (roadIsClear) + { + _drawingObject.MoveObject(direction); + } + DrawMapWithObject(); + } + + private boolean SetObjectOnMap() + { + if (_drawingObject == null || _map == null) + { + return false; + } + int x = _random.nextInt(0, 10); + int y = _random.nextInt(0, 10); + + float[] position = _drawingObject.GetCurrentPosition(); + int xNumOfCells = (int)Math.ceil(position[2] / _size_x) - (int)Math.floor(position[0] / _size_x); + int yNumOfCells = (int)Math.ceil(position[3] / _size_y) - (int)Math.floor(position[1] / _size_y); + int xObjOffset = (int)(x / _size_x); + int yObjOffset = (int)(y / _size_y); + + while (y < _height - (position[3] - position[1])) + { + while (x < _width - (position[2] - position[0])) + { + if (AreaIsFree(xNumOfCells, yNumOfCells, xObjOffset, yObjOffset)) + { + _drawingObject.SetObject(x, y, _width, _height); + return true; + } + x += (int)_size_x; + xObjOffset = (int)(x / _size_x); + } + x = 0; + y += (int)_size_y; + yObjOffset = (int)(y / _size_y); + } + + return false; + } + + private boolean AreaIsFree(int xNumOfCells, int yNumOfCells, int xObjOffset, int yObjOffset) + { + for (int i = 0; i <= yNumOfCells; i++) + { + for (int j = 0; j <= xNumOfCells; j++) + { + if (yObjOffset + i >= _map.length || xObjOffset + j >= _map[0].length) + { + return false; + } + if (_map[xObjOffset + j][yObjOffset + i] == _barrier) + { + return false; + } + } + } + + return true; + } + + public void DrawMapWithObject() + { + if (_drawingObject == null || _map == null) + { + return; + } + + for (int i = 0; i < _map.length; ++i) + { + for (int j = 0; j < _map[0].length; ++j) + { + if (_map[i][j] == _freeRoad) + { + DrawRoadPart(_graphicsContext, i, j); + } + else if (_map[i][j] == _barrier) + { + DrawBarrierPart(_graphicsContext, i, j); + } + } + } + _drawingObject.DrawingObject(_graphicsContext); + } + + protected abstract void GenerateMap(); + protected abstract void DrawRoadPart(GraphicsContext gc, int i, int j); + protected abstract void DrawBarrierPart(GraphicsContext gc, int i, int j); +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/ControllerArmoredCar.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/ControllerArmoredCar.java new file mode 100644 index 0000000..34e514d --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/ControllerArmoredCar.java @@ -0,0 +1,213 @@ +package com.example.antiaircraftgun; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Label; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.Pane; +import javafx.scene.paint.Color; + +import java.util.Random; + +public class ControllerArmoredCar { + @FXML + private Pane root; + @FXML + private Canvas canvas; + @FXML + private FlowPane flowPane; + @FXML + private Label labelSpeedValue; + @FXML + private Label labelWeightValue; + @FXML + private Label labelBodyColorValue; + @FXML + private ComboBox comboBoxNumOfRollers; + @FXML + private ComboBox comboBoxOrnamentType; + @FXML + private Button buttonCreate; + @FXML + private Button buttonCreateModif; + @FXML + private Button buttonLeft; + @FXML + private Button buttonRight; + @FXML + private Button buttonUp; + @FXML + private Button buttonDown; + private final double rootPadding = 10.0; + private DrawingArmoredCar _armoredCar; + + @FXML + public void initialize() + { + buttonCreate.setTranslateX(rootPadding); + + root.widthProperty().addListener((obs, oldVal, newVal) -> + { + UpdateGUI(); + if (_armoredCar != null) + { + _armoredCar.ChangeBorders((int) canvas.getWidth(), (int) canvas.getHeight()); + } + Draw(); + }); + root.heightProperty().addListener((obs, oldVal, newVal) -> + { + UpdateGUI(); + if (_armoredCar != null) + { + _armoredCar.ChangeBorders((int) canvas.getWidth(), (int) canvas.getHeight()); + } + Draw(); + }); + } + + @FXML + void ButtonCreate_Click() + { + Random rnd = new Random(); + _armoredCar = new DrawingArmoredCar(rnd.nextInt(200) + 100, rnd.nextInt(1000) + 1000, + Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))); + SetData(); + Draw(); + } + + @FXML + void ButtonCreateModif_Click() + { + Random rnd = new Random(); + _armoredCar = new DrawingAntiAircraftGun(rnd.nextInt(200) + 100, rnd.nextInt(1000) + 1000, + Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)), + Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)), + (rnd.nextInt(2) != 0), (rnd.nextInt(2) != 0)); + SetData(); + Draw(); + } + + @FXML + void ButtonMove_Click(ActionEvent event) + { + if (_armoredCar == null) + { + return; + } + String buttonName = ((Button) event.getSource()).getId(); + switch (buttonName) + { + case "buttonUp" -> _armoredCar.MoveTransport(Direction.Up); + case "buttonDown" -> _armoredCar.MoveTransport(Direction.Down); + case "buttonLeft" -> _armoredCar.MoveTransport(Direction.Left); + case "buttonRight" -> _armoredCar.MoveTransport(Direction.Right); + } + Draw(); + } + + @FXML + private void ComboBoxOrnamentType_Changed() + { + if (_armoredCar != null) + { + ChangeDrawingRollers(); + Draw(); + } + } + + @FXML + private void ComboBoxNumOfRollers_Changed() + { + if (_armoredCar != null) + { + _armoredCar.GetDrawingRollers().SetNumberRollers(Integer.parseInt(comboBoxNumOfRollers.getValue())); + Draw(); + } + } + + private void ChangeDrawingRollers() + { + if (_armoredCar != null) + { + IDrawingAdditionalElement newDrawingRollers = switch (comboBoxOrnamentType.getValue()) + { + case "None" -> new DrawingRollers(_armoredCar.GetArmoredCar().GetBodyColor()); + case "Rectangle" -> new DrawingRectangleOrnamentRollers(_armoredCar.GetArmoredCar().GetBodyColor()); + case "Oval" -> + new DrawingOvalOrnamentRollers(_armoredCar.GetArmoredCar().GetBodyColor()); + default -> null; + }; + if (newDrawingRollers != null) + { + _armoredCar.SetDrawingRollers(newDrawingRollers); + _armoredCar.GetDrawingRollers().SetNumberRollers(Integer.parseInt(comboBoxNumOfRollers.getValue())); + } + } + } + + private void UpdateGUI() + { + double rootWidth = root.getWidth(); + double rootHeight = root.getHeight(); + + double flowPaneHeight = flowPane.getHeight(); + double buttonCreateHeight = buttonCreate.getHeight(); + + canvas.setWidth(rootWidth); + flowPane.setPrefWidth(rootWidth); + canvas.setHeight(rootHeight - flowPaneHeight); + flowPane.setTranslateY(rootHeight - flowPaneHeight); + + buttonCreate.setTranslateY(rootHeight - flowPaneHeight - buttonCreateHeight - rootPadding); + buttonCreateModif.setTranslateY(rootHeight - flowPaneHeight - buttonCreateHeight - rootPadding); + + int buttonMoveSize = 30; + int distanceBetweenButtons = 5; + buttonUp.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize * 2.0 - rootPadding - + distanceBetweenButtons); + buttonUp.setTranslateX(rootWidth - rootPadding - buttonMoveSize * 2.0 - distanceBetweenButtons); + + buttonDown.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonDown.setTranslateX(rootWidth- rootPadding - buttonMoveSize * 2.0 - distanceBetweenButtons); + + buttonLeft.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonLeft.setTranslateX(rootWidth - rootPadding - buttonMoveSize * 3.0 - + distanceBetweenButtons * 2.0); + + buttonRight.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonRight.setTranslateX(rootWidth - rootPadding - buttonMoveSize); + } + + private void Draw() + { + GraphicsContext gc = canvas.getGraphicsContext2D(); + + gc.clearRect(0.0, 0.0, canvas.getWidth(), canvas.getHeight()); + gc.setFill(Color.WHITE); + gc.fillRect(0.0, 0.0, canvas.getWidth(), canvas.getHeight()); + + gc.setStroke(Color.BLACK); + gc.setLineWidth(4); + gc.strokeRect(0.0, 0.0, canvas.getWidth(), canvas.getHeight()); + + if (_armoredCar != null) + { + _armoredCar.DrawTransport(gc); + } + } + + private void SetData() + { + ChangeDrawingRollers(); + Random rnd = new Random(); + _armoredCar.SetPosition(rnd.nextInt(90) + 10, rnd.nextInt(90) + 5, (int) canvas.getWidth(), (int) canvas.getHeight()); + labelSpeedValue.setText(Integer.toString(_armoredCar.GetArmoredCar().GetSpeed())); + labelWeightValue.setText(Double.toString(_armoredCar.GetArmoredCar().GetWeight())); + labelBodyColorValue.setText(_armoredCar.GetArmoredCar().GetBodyColor().toString()); + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/ControllerMap.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/ControllerMap.java new file mode 100644 index 0000000..a1dee09 --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/ControllerMap.java @@ -0,0 +1,182 @@ +package com.example.antiaircraftgun; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Label; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.Pane; +import javafx.scene.paint.Color; + +import java.util.Random; + +public class ControllerMap { + @FXML + private Pane root; + @FXML + private Canvas canvas; + @FXML + private FlowPane flowPane; + @FXML + private Label labelSpeedValue; + @FXML + private Label labelWeightValue; + @FXML + private Label labelBodyColorValue; + @FXML + private ComboBox comboBoxNumOfRollers; + @FXML + private ComboBox comboBoxOrnamentType; + @FXML + private ComboBox comboBoxSelectorMap; + @FXML + private Button buttonCreate; + @FXML + private Button buttonCreateModif; + @FXML + private Button buttonLeft; + @FXML + private Button buttonRight; + @FXML + private Button buttonUp; + @FXML + private Button buttonDown; + private final double buttonMargin = 10.0; + private AbstractMap _abstractMap; + + @FXML + public void initialize() + { + buttonCreate.setTranslateX(buttonMargin); + + root.widthProperty().addListener((obs, oldVal, newVal) -> + { + UpdateGUI(); + if (_abstractMap != null) + { + _abstractMap.DrawMapWithObject(); + } + }); + root.heightProperty().addListener((obs, oldVal, newVal) -> + { + UpdateGUI(); + if (_abstractMap != null) + { + _abstractMap.DrawMapWithObject(); + } + }); + } + + @FXML + void ButtonCreate_Click() + { + Random rnd = new Random(); + DrawingArmoredCar armoredCar = new DrawingArmoredCar(rnd.nextInt(200) + 100, rnd.nextInt(1000) + 1000, + Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))); + SetData(armoredCar); + } + + @FXML + void ButtonCreateModif_Click() + { + Random rnd = new Random(); + DrawingAntiAircraftGun armoredCar = new DrawingAntiAircraftGun(rnd.nextInt(200) + 100, rnd.nextInt(1000) + 1000, + Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)), + Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)), + (rnd.nextInt(2) != 0), (rnd.nextInt(2) != 0)); + SetData(armoredCar); + } + + @FXML + void ButtonMove_Click(ActionEvent event) + { + if (_abstractMap == null) + { + return; + } + String buttonName = ((Button) event.getSource()).getId(); + switch (buttonName) + { + case "buttonUp" -> _abstractMap.MoveObject(Direction.Up); + case "buttonDown" -> _abstractMap.MoveObject(Direction.Down); + case "buttonLeft" -> _abstractMap.MoveObject(Direction.Left); + case "buttonRight" -> _abstractMap.MoveObject(Direction.Right); + } + } + + @FXML + private void ComboBoxSelectorMap_Changed() + { + switch (comboBoxSelectorMap.getValue()) + { + case "Simple map" -> _abstractMap = new SimpleMap(); + case "Training ground map" -> _abstractMap = new TrainingGroundMap(); + case "Desert map" -> _abstractMap = new DesertMap(); + } + } + + private void ChangeDrawningTrackRollers(DrawingArmoredCar armoredCar) + { + IDrawingAdditionalElement newDrawningTrackRollers = switch (comboBoxOrnamentType.getValue()) + { + case "None" -> new DrawingRollers(armoredCar.GetArmoredCar().GetBodyColor()); + case "Rectangle" -> new DrawingRectangleOrnamentRollers(armoredCar.GetArmoredCar().GetBodyColor()); + case "Oval" -> + new DrawingOvalOrnamentRollers(armoredCar.GetArmoredCar().GetBodyColor()); + default -> null; + }; + if (newDrawningTrackRollers != null) + { + armoredCar.SetDrawingRollers(newDrawningTrackRollers); + armoredCar.GetDrawingRollers().SetNumberRollers(Integer.parseInt(comboBoxNumOfRollers.getValue())); + } + } + + private void UpdateGUI() + { + double sceneWidth = root.getWidth(); + double sceneHeight = root.getHeight(); + + double flowPaneHeight = flowPane.getHeight(); + double buttonCreateHeight = buttonCreate.getHeight(); + + canvas.setWidth(sceneWidth); + flowPane.setPrefWidth(sceneWidth); + canvas.setHeight(sceneHeight - flowPaneHeight); + flowPane.setTranslateY(sceneHeight - flowPaneHeight); + + buttonCreate.setTranslateY(sceneHeight - flowPaneHeight - buttonCreateHeight - buttonMargin); + buttonCreateModif.setTranslateY(sceneHeight - flowPaneHeight - buttonCreateHeight - buttonMargin); + + int buttonMoveHeight = 30; + int distanceBetweenMoveButtons = 5; + buttonUp.setTranslateY(sceneHeight - flowPaneHeight - buttonMoveHeight * 2.0 - buttonMargin - + distanceBetweenMoveButtons); + int buttonMoveWidth = 30; + buttonUp.setTranslateX(sceneWidth - buttonMargin - buttonMoveWidth * 2.0 - distanceBetweenMoveButtons); + + buttonDown.setTranslateY(sceneHeight - flowPaneHeight - buttonMoveHeight - buttonMargin); + buttonDown.setTranslateX(sceneWidth- buttonMargin - buttonMoveWidth * 2.0 - distanceBetweenMoveButtons); + + buttonLeft.setTranslateY(sceneHeight - flowPaneHeight - buttonMoveHeight - buttonMargin); + buttonLeft.setTranslateX(sceneWidth - buttonMargin - buttonMoveWidth * 3.0 - + distanceBetweenMoveButtons * 2.0); + + buttonRight.setTranslateY(sceneHeight - flowPaneHeight - buttonMoveHeight - buttonMargin); + buttonRight.setTranslateX(sceneWidth - buttonMargin - buttonMoveWidth); + } + + private void SetData(DrawingArmoredCar armoredCar) + { + ChangeDrawningTrackRollers(armoredCar); + labelSpeedValue.setText(Integer.toString(armoredCar.GetArmoredCar().GetSpeed())); + labelWeightValue.setText(Double.toString(armoredCar.GetArmoredCar().GetWeight())); + labelBodyColorValue.setText(armoredCar.GetArmoredCar().GetBodyColor().toString()); + GraphicsContext gc = canvas.getGraphicsContext2D(); + gc.clearRect(0.0, 0.0, canvas.getWidth(), canvas.getHeight()); + _abstractMap.CreateMap((int)canvas.getWidth(), (int)canvas.getHeight(), new DrawingObjectArmoredCar(armoredCar), gc); + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DesertMap.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DesertMap.java new file mode 100644 index 0000000..6067478 --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DesertMap.java @@ -0,0 +1,49 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class DesertMap extends AbstractMap{ + protected void DrawBarrierPart(GraphicsContext gc, int i, int j) + { + gc.setFill(Color.BLACK); + gc.fillRect(i * _size_x, j * _size_y, _size_x + 0.5, _size_y + 0.5); + } + protected void DrawRoadPart(GraphicsContext gc, int i, int j) + { + gc.setFill(Color.YELLOW); + gc.fillRect(i * _size_x, j * _size_y, _size_x + 0.5, _size_y + 0.5); + } + + protected void GenerateMap() + { + _map = new int[100][100]; + _size_x = (float)_width / _map.length; + _size_y = (float)_height / _map[0].length; + int counter = 0; + for (int i = 0; i < _map.length; ++i) + { + for (int j = 0; j < _map[0].length; ++j) + { + _map[i][j] = _freeRoad; + } + } + while (counter < 10) + { + int x = _random.nextInt(0, 90); + int y = _random.nextInt(0, 90); + int length = _random.nextInt(5, 10); + if(counter < 5){ + for (int i = 0; i < length; i++) { + _map[x][y + i] = _barrier; + } + } + else{ + for (int i = 0; i < length; i++) { + _map[x + i][y] = _barrier; + } + } + counter++; + } + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/Direction.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/Direction.java index a1a4f28..e8a3d27 100644 --- a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/Direction.java +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/Direction.java @@ -1,6 +1,7 @@ package com.example.antiaircraftgun; public enum Direction { + None, Up, Down, Left, @@ -10,6 +11,8 @@ public enum Direction { { switch(intValue) { + case 0: + return None; case 1: return Up; case 2: diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingAntiAircraftGun.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingAntiAircraftGun.java new file mode 100644 index 0000000..1cb87ea --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingAntiAircraftGun.java @@ -0,0 +1,60 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class DrawingAntiAircraftGun extends DrawingArmoredCar{ + public DrawingAntiAircraftGun(int speed, float weight, Color bodyColor, Color dopColor, boolean gun, boolean radar) + { + super(speed, weight, bodyColor, 110, 75); + SetArmoredVehicle(new EntityAntiAircraftGun(speed, weight, bodyColor, dopColor, gun, radar)); + } + + @Override + public void DrawTransport(GraphicsContext gc) + { + if (!(GetArmoredCar() instanceof EntityAntiAircraftGun antiAircraftGun)) + { + return; + } + + _startPosY += 35; + super.DrawTransport(gc); + _startPosY -= 35; + + gc.setStroke(Color.BLACK); + + if (antiAircraftGun.GetGun()) + { + gc.setFill(antiAircraftGun.GetDopColor()); + gc.fillRect(_startPosX + 35, _startPosY + 20, 25, 15); + gc.fillRect(_startPosX + 60, _startPosY + 25, 50, 5); + gc.fillRect(_startPosX + 60, _startPosY + 30, 20, 5); + } + + if (antiAircraftGun.GetRadar()) + { + double[] radarX = + { + _startPosX + 32, + _startPosX + 32, + _startPosX + 22, + _startPosX + 10, + }; + + double[] radarY = + { + _startPosY + 3, + _startPosY + 15, + _startPosY + 25, + _startPosY + 25, + }; + gc.setStroke(antiAircraftGun.GetDopColor()); + gc.setFill(antiAircraftGun.GetDopColor()); + gc.strokeLine(_startPosX + 27, _startPosY + 35, _startPosX + 27, _startPosY + 20); + gc.fillPolygon(radarX, radarY, 4); + gc.strokeLine(_startPosX + 20, _startPosY + 15, _startPosX + 15, _startPosY + 10); + gc.fillOval(_startPosX + 10, _startPosY + 5, 10, 10); + } + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingArmoredCar.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingArmoredCar.java index 8a9ef14..c4340b2 100644 --- a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingArmoredCar.java +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingArmoredCar.java @@ -6,9 +6,9 @@ import javafx.scene.paint.Color; public class DrawingArmoredCar { private EntityArmoredCar _armoredCar; - private DrawingRollers _drawingRollers; - private float _startPosX; - private float _startPosY; + private IDrawingAdditionalElement _drawingRollers; + protected float _startPosX; + protected float _startPosY; private Integer _pictureWidth; private Integer _pictureHeight; private int _armoredCarWidth = 90; @@ -18,20 +18,29 @@ public class DrawingArmoredCar { return _armoredCar; } - public DrawingRollers GetDrawningRollers() + protected void SetArmoredVehicle(EntityArmoredCar armoredCar) + { + _armoredCar = armoredCar; + } + public IDrawingAdditionalElement GetDrawingRollers() { return _drawingRollers; } - - public void Init(int speed, float weight, Color bodyColor) + public void SetDrawingRollers(IDrawingAdditionalElement drawingRollers) { - _armoredCar = new EntityArmoredCar(); - _armoredCar.Init(speed, weight, bodyColor); - - _drawingRollers = new DrawingRollers(); - _drawingRollers.Init(bodyColor); + _drawingRollers = drawingRollers; + } + public DrawingArmoredCar(int speed, float weight, Color bodyColor) + { + _armoredCar = new EntityArmoredCar(speed, weight, bodyColor); + _drawingRollers = new DrawingRollers(bodyColor); + } + protected DrawingArmoredCar(int speed, float weight, Color bodyColor, int armoredCarWidth, int armoredCarHeight) + { + this(speed, weight, bodyColor); + _armoredCarHeight = armoredCarHeight; + _armoredCarWidth = armoredCarWidth; } - public void SetPosition(int x, int y, int width, int height) { if (x < 0 || y < 0) { @@ -130,4 +139,13 @@ public class DrawingArmoredCar _startPosY = _pictureHeight - _armoredCarHeight; } } + public float[] GetCurrentPosition() + { + float[] position = new float[4]; + position[0] = _startPosX; + position[1] = _startPosY; + position[2] = _startPosX + _armoredCarWidth; + position[3] = _startPosY + _armoredCarHeight; + return position; + } } diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingObjectArmoredCar.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingObjectArmoredCar.java new file mode 100644 index 0000000..89b1e6b --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingObjectArmoredCar.java @@ -0,0 +1,48 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; + +public class DrawingObjectArmoredCar implements IDrawingObject{ + private DrawingArmoredCar _armoredCar = null; + + public DrawingObjectArmoredCar(DrawingArmoredCar armoredCar) + { + _armoredCar = armoredCar; + } + + public float GetStep() + { + if (_armoredCar != null && _armoredCar.GetArmoredCar() != null) + { + return _armoredCar.GetArmoredCar().GetStep(); + } + return 0F; + } + + public float[] GetCurrentPosition() + { + if (_armoredCar != null) + { + return _armoredCar.GetCurrentPosition(); + } + return new float[4]; + } + + public void MoveObject(Direction direction) + { + _armoredCar.MoveTransport(direction); + } + + public void SetObject(int x, int y, int width, int height) + { + _armoredCar.SetPosition(x, y, width, height); + } + + public void DrawingObject(GraphicsContext gc) + { + if (_armoredCar != null) + { + _armoredCar.DrawTransport(gc); + } + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingOvalOrnamentRollers.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingOvalOrnamentRollers.java new file mode 100644 index 0000000..ef24d5d --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingOvalOrnamentRollers.java @@ -0,0 +1,61 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class DrawingOvalOrnamentRollers implements IDrawingAdditionalElement{ + private Color _rollersColor; + private NumberRollers _numOfRollers; + + public void SetNumberRollers(int numberOfRollers) + { + _numOfRollers = NumberRollers.FromInteger(numberOfRollers); + } + + public DrawingOvalOrnamentRollers(Color trackRollersColor) + { + _rollersColor = trackRollersColor; + } + + public void DrawRollers(GraphicsContext gc, float startPosX, float startPosY) + { + if (_rollersColor == null) + { + return; + } + + gc.setFill(_rollersColor); + gc.fillOval(startPosX +1, startPosY + 21, 18, 18); + gc.fillOval(startPosX + 69, startPosY + 21, 18, 18); + gc.fillOval(startPosX + 19, startPosY + 30, 11, 11); + gc.fillOval(startPosX + 58, startPosY + 30, 11, 11); + + // Орнамент + gc.strokeOval(startPosX + 5, startPosY + 25, 10, 10); + gc.strokeOval(startPosX + 73, startPosY + 25, 10, 10); + gc.strokeOval(startPosX + 22, startPosY + 33, 5, 5); + gc.strokeOval(startPosX + 61, startPosY + 33, 5, 5); + + switch (_numOfRollers) + { + case Four: + break; + + case Five: + gc.setFill(_rollersColor); + gc.fillOval(startPosX + 45, startPosY + 30, 11, 11); + // Орнамент + gc.strokeOval(startPosX + 48, startPosY + 33, 5, 5); + break; + + case Six: + gc.setFill(_rollersColor); + gc.fillOval(startPosX + 45, startPosY + 30, 11, 11); + gc.fillOval(startPosX + 32, startPosY + 30, 11, 11); + // Орнамент + gc.strokeOval(startPosX + 48, startPosY + 33, 5, 5); + gc.strokeOval(startPosX + 35, startPosY + 33, 5, 5); + break; + } + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingRectangleOrnamentRollers.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingRectangleOrnamentRollers.java new file mode 100644 index 0000000..df8bd9d --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingRectangleOrnamentRollers.java @@ -0,0 +1,62 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class DrawingRectangleOrnamentRollers implements IDrawingAdditionalElement{ + private Color _rollersColor; + private NumberRollers _numOfRollers; + + public void SetNumberRollers(int numberOfRollers) + { + _numOfRollers = NumberRollers.FromInteger(numberOfRollers); + } + + public DrawingRectangleOrnamentRollers(Color trackRollersColor) + { + _rollersColor = trackRollersColor; + } + + public void DrawRollers(GraphicsContext gc, float startPosX, float startPosY) + { + if (_rollersColor == null) + { + return; + } + gc.setFill(_rollersColor); + gc.fillOval(startPosX +1, startPosY + 21, 18, 18); + gc.fillOval(startPosX + 69, startPosY + 21, 18, 18); + gc.fillOval(startPosX + 19, startPosY + 30, 11, 11); + gc.fillOval(startPosX + 58, startPosY + 30, 11, 11); + + // Орнамент + gc.strokeRect(startPosX + 5, startPosY + 25, 10, 10); + gc.strokeRect(startPosX + 73, startPosY + 25, 10, 10); + gc.strokeRect(startPosX + 22, startPosY + 33, 5, 5); + gc.strokeRect(startPosX + 61, startPosY + 33, 5, 5); + gc.strokeRect(startPosX + 9, startPosY + 28, 3, 3); + gc.strokeRect(startPosX + 77, startPosY + 28, 3, 3); + + switch (_numOfRollers) + { + case Four: + break; + + case Five: + gc.setFill(_rollersColor); + gc.fillOval(startPosX + 45, startPosY + 30, 11, 11); + // Орнамент + gc.strokeRect(startPosX + 48, startPosY + 33, 5, 5); + break; + + case Six: + gc.setFill(_rollersColor); + gc.fillOval(startPosX + 45, startPosY + 30, 11, 11); + gc.fillOval(startPosX + 32, startPosY + 30, 11, 11); + // Орнамент + gc.strokeRect(startPosX + 48, startPosY + 33, 5, 5); + gc.strokeRect(startPosX + 35, startPosY + 33, 5, 5); + break; + } + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingRollers.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingRollers.java index 935a54b..cd2cc63 100644 --- a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingRollers.java +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/DrawingRollers.java @@ -3,16 +3,16 @@ package com.example.antiaircraftgun; import javafx.scene.canvas.GraphicsContext; import javafx.scene.paint.Color; -public class DrawingRollers { +public class DrawingRollers implements IDrawingAdditionalElement{ private Color _RollersColor; private NumberRollers _numRollers; public void SetNumberRollers(int numberRollers) { _numRollers = NumberRollers.FromInteger(numberRollers); } - public void Init(Color trackRollersColor) + public DrawingRollers(Color rollersColor) { - _RollersColor = trackRollersColor; + _RollersColor = rollersColor; } public void DrawRollers(GraphicsContext gc, float startPosX, float startPosY) { diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/EntityAntiAircraftGun.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/EntityAntiAircraftGun.java new file mode 100644 index 0000000..5b0efd2 --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/EntityAntiAircraftGun.java @@ -0,0 +1,32 @@ +package com.example.antiaircraftgun; + +import javafx.scene.paint.Color; + +public class EntityAntiAircraftGun extends EntityArmoredCar{ + private final Color _dopColor; + private final boolean _gun; + private final boolean _radar; + + public Color GetDopColor() + { + return _dopColor; + } + + public boolean GetGun() + { + return _gun; + } + + public boolean GetRadar() + { + return _radar; + } + + public EntityAntiAircraftGun(int speed, float weight, Color bodyColor, Color dopColor, boolean gun, boolean radar) + { + super(speed, weight, bodyColor); + _dopColor = dopColor; + _gun = gun; + _radar = radar; + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/EntityArmoredCar.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/EntityArmoredCar.java index ecbd464..bbaa48e 100644 --- a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/EntityArmoredCar.java +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/EntityArmoredCar.java @@ -5,9 +5,9 @@ import java.util.Random; public class EntityArmoredCar { - private int _speed; - private float _weight; - private Color _bodyColor; + private final int _speed; + private final float _weight; + private final Color _bodyColor; public int GetSpeed() { return _speed; @@ -28,7 +28,7 @@ public class EntityArmoredCar return _speed * 100 / _weight; } - public void Init(int speed, float weight, Color bodyColor) + public EntityArmoredCar(int speed, float weight, Color bodyColor) { Random random = new Random(); _speed = speed <= 0 ? random.nextInt(100) + 50 : speed; diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/FormArmoredCar.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/FormArmoredCar.java index 494c84f..6839aad 100644 --- a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/FormArmoredCar.java +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/FormArmoredCar.java @@ -1,303 +1,77 @@ package com.example.antiaircraftgun; import javafx.application.Application; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; -import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.Button; -import javafx.scene.control.ComboBox; -import javafx.scene.control.Label; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; -import javafx.scene.layout.HBox; +import javafx.scene.layout.FlowPane; import javafx.scene.layout.Pane; -import javafx.scene.paint.Color; import javafx.stage.Stage; import java.io.IOException; -import java.util.Random; public class FormArmoredCar extends Application { - private Pane _root; - private Scene _scene; - private Canvas _canvas; - private HBox _hBox; - private Button _buttonCreate; - private Button _buttonUp; - private Button _buttonDown; - private Button _buttonLeft; - private Button _buttonRight; - private Label _labelSpeedValue; - private Label _labelWeightValue; - private Label _labelBodyColorValue; - private ComboBox _comboBoxNumRollers; - private double _hBoxHeight; - private double _buttonCreateHeight; - private final int _buttonMoveWidth = 30; - private final int _buttonMoveHeight = 30; - private final int _distanceBetweenMoveButtons = 5; - private final double _buttonMargin = 10.0; - private DrawingArmoredCar _armoredCar; - @Override public void start(Stage stage) throws IOException { - FXMLLoader fxmlLoader = new FXMLLoader(FormArmoredCar.class.getResource("hello-view.fxml")); - _scene = new Scene(fxmlLoader.load(), 600, 400); - - _root = (Pane) _scene.lookup("#root"); - _root.setStyle("-fx-background-color: #31374c;"); - - _canvas = new Canvas(); - _root.getChildren().add(_canvas); - - InitHBox(); - InitButtonCreate(); - InitMoveButtons(); + FXMLLoader fxmlLoader = new FXMLLoader(FormArmoredCar.class.getResource("form-armored-vehicle-view.fxml")); + Scene scene = new Scene(fxmlLoader.load(), 600, 400); stage.setTitle("AntiAircraftGun"); - stage.setScene(_scene); - _scene.widthProperty().addListener((obs, oldVal, newVal) -> { - UpdateGUI(); - if (_armoredCar != null) - { - _armoredCar.ChangeBorders((int) _canvas.getWidth(), (int) _canvas.getHeight()); - } - Draw(); - }); - - _scene.heightProperty().addListener((obs, oldVal, newVal) -> { - UpdateGUI(); - if (_armoredCar != null) - { - _armoredCar.ChangeBorders((int) _canvas.getWidth(), (int) _canvas.getHeight()); - } - Draw(); - }); - - _root.applyCss(); - _root.layout(); - - stage.setOnShowing(event -> { - _hBoxHeight = _hBox.getHeight(); - _buttonCreateHeight = _buttonCreate.getHeight(); - UpdateGUI(); - Draw(); - }); + stage.setScene(scene); + FirstUpdateGUI(scene); stage.show(); } - private void InitHBox() + private void FirstUpdateGUI(Scene scene) { - _hBox = new HBox(); - _hBox.setStyle("-fx-background-color: #31374c;"); - _root.getChildren().add(_hBox); + Pane root = (Pane)scene.lookup("#root"); + Canvas canvas = (Canvas)scene.lookup("#canvas"); + Button buttonCreate = (Button)scene.lookup("#buttonCreate"); + Button buttonCreateModif = (Button)scene.lookup("#buttonCreateModif"); + Button buttonUp = (Button)scene.lookup("#buttonUp"); + Button buttonLeft = (Button)scene.lookup("#buttonLeft"); + Button buttonRight = (Button)scene.lookup("#buttonRight"); + Button buttonDown = (Button)scene.lookup("#buttonDown"); + FlowPane flowPane = (FlowPane)scene.lookup("#flowPane"); - Label labelSpeed = new Label("Speed:"); - labelSpeed.setStyle("-fx-text-fill: #b8becc; -fx-padding: 5 5 5 5;"); - _hBox.getChildren().add(labelSpeed); + root.applyCss(); + root.layout(); - _labelSpeedValue = new Label("-"); - _labelSpeedValue.setStyle("-fx-text-fill: #ffffff; -fx-padding: 5 5 5 0; -fx-font-weight: bold;"); - _hBox.getChildren().add(_labelSpeedValue); + double flowPaneHeight = flowPane.getHeight(); + double buttonCreateHeight = buttonCreate.getHeight(); + double buttonCreateWidth = buttonCreate.getWidth(); + double rootWidth = root.getWidth(); + double rootHeight = root.getHeight(); + double rootPadding = 10.0; + double distanceBetweenButtons = 5.0; + double buttonMoveSize = 30.0; - Label labelWeight = new Label("Weight:"); - labelWeight.setStyle("-fx-text-fill: #b8becc; -fx-padding: 5 5 5 5;"); - _hBox.getChildren().add(labelWeight); + canvas.setWidth(rootWidth); + flowPane.setPrefWidth(rootWidth); + canvas.setHeight(rootHeight - flowPaneHeight); + flowPane.setTranslateY(rootHeight - flowPaneHeight); + buttonCreateModif.setTranslateX(rootPadding + buttonCreateWidth + distanceBetweenButtons); + buttonCreate.setTranslateY(rootHeight - flowPaneHeight - buttonCreateHeight - rootPadding); + buttonCreateModif.setTranslateY(rootHeight - flowPaneHeight - buttonCreateHeight - rootPadding); - _labelWeightValue = new Label("-"); - _labelWeightValue.setStyle("-fx-text-fill: #ffffff; -fx-padding: 5 5 5 0; -fx-font-weight: bold;"); - _hBox.getChildren().add(_labelWeightValue); + buttonUp.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize * 2.0 - rootPadding - + distanceBetweenButtons); + buttonUp.setTranslateX(rootWidth - rootPadding - buttonMoveSize * 2.0 - distanceBetweenButtons); - Label labelHullColor = new Label("Color:"); - labelHullColor.setStyle("-fx-text-fill: #b8becc; -fx-padding: 5 5 5 5;"); - _hBox.getChildren().add(labelHullColor); + buttonDown.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonDown.setTranslateX(rootWidth- rootPadding - buttonMoveSize * 2.0 - distanceBetweenButtons); - _labelBodyColorValue = new Label("-"); - _labelBodyColorValue.setStyle("-fx-text-fill: #ffffff; -fx-padding: 5 5 5 0; -fx-font-weight: bold;"); - _hBox.getChildren().add(_labelBodyColorValue); + buttonLeft.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonLeft.setTranslateX(rootWidth - rootPadding - buttonMoveSize * 3.0 - distanceBetweenButtons * 2.0); - Label labelNumRollers = new Label("Rollers:"); - labelNumRollers.setStyle("-fx-text-fill: #b8becc; -fx-padding: 5 5 5 5;"); - _hBox.getChildren().add(labelNumRollers); - - ObservableList optionsForNumRollers = FXCollections.observableArrayList("4", "5", "6"); - _comboBoxNumRollers = new ComboBox<>(optionsForNumRollers); - _comboBoxNumRollers.setValue("4"); - - _comboBoxNumRollers.setOnAction(e -> { - if (_armoredCar != null) { - _armoredCar.GetDrawningRollers().SetNumberRollers(Integer.parseInt(_comboBoxNumRollers.getValue())); - Draw(); - } - }); - - _hBox.getChildren().add(_comboBoxNumRollers); + buttonRight.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonRight.setTranslateX(rootWidth - rootPadding - buttonMoveSize); } - private void InitButtonCreate() - { - _buttonCreate = new Button("Create"); - _buttonCreate.setTranslateX(_buttonMargin); - _root.getChildren().add(_buttonCreate); - - _buttonCreate.setOnAction(e -> { - Random rnd = new Random(); - - _armoredCar = new DrawingArmoredCar(); - _armoredCar.Init(rnd.nextInt(200) + 100, rnd.nextInt(1000) + 1000, - Color.rgb(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))); - _armoredCar.SetPosition(rnd.nextInt(90) + 10, rnd.nextInt(90)+10, - (int) _canvas.getWidth(), (int) _canvas.getHeight()); - - _armoredCar.GetDrawningRollers().SetNumberRollers(Integer.parseInt(_comboBoxNumRollers.getValue())); - - _labelSpeedValue.setText(Integer.toString(_armoredCar.GetArmoredCar().GetSpeed())); - _labelWeightValue.setText(Double.toString(_armoredCar.GetArmoredCar().GetWeight())); - _labelBodyColorValue.setText(_armoredCar.GetArmoredCar().GetBodyColor().toString()); - - Draw(); - }); - } - private void InitMoveButtons() - { - Image img; - ImageView view; - - // Button "Up" - _buttonUp = new Button(); - - img = new Image("arrowUp.png"); - view = new ImageView(img); - view.setFitHeight(14); - view.setFitWidth(14); - _buttonUp.setGraphic(view); - - _buttonUp.setPrefWidth(_buttonMoveWidth); - _buttonUp.setPrefHeight(_buttonMoveHeight); - - _buttonUp.setOnAction(e -> { - if (_armoredCar != null) { - _armoredCar.MoveTransport(Direction.Up); - Draw(); - } - }); - - _root.getChildren().add(_buttonUp); - - // Button "Down" - _buttonDown = new Button(); - - img = new Image("arrowDown.png"); - view = new ImageView(img); - view.setFitHeight(14); - view.setFitWidth(14); - _buttonDown.setGraphic(view); - - _buttonDown.setPrefWidth(_buttonMoveWidth); - _buttonDown.setPrefHeight(_buttonMoveHeight); - - _buttonDown.setOnAction(e -> { - if (_armoredCar != null) { - _armoredCar.MoveTransport(Direction.Down); - Draw(); - } - }); - - _root.getChildren().add(_buttonDown); - - // Button "Left" - _buttonLeft = new Button(); - - img = new Image("arrowLeft.png"); - view = new ImageView(img); - view.setFitHeight(14); - view.setFitWidth(14); - _buttonLeft.setGraphic(view); - - _buttonLeft.setPrefWidth(_buttonMoveWidth); - _buttonLeft.setPrefHeight(_buttonMoveHeight); - - _buttonLeft.setOnAction(e -> { - if (_armoredCar != null) { - _armoredCar.MoveTransport(Direction.Left); - Draw(); - } - }); - - _root.getChildren().add(_buttonLeft); - - // Button "Right" - _buttonRight = new Button(); - - img = new Image("arrowRight.png"); - view = new ImageView(img); - view.setFitHeight(14); - view.setFitWidth(14); - _buttonRight.setGraphic(view); - - _buttonRight.setPrefWidth(_buttonMoveWidth); - _buttonRight.setPrefHeight(_buttonMoveHeight); - - _buttonRight.setOnAction(e -> { - if (_armoredCar != null) { - _armoredCar.MoveTransport(Direction.Right); - Draw(); - } - }); - - _root.getChildren().add(_buttonRight); - } - private void UpdateGUI() - { - double sceneWidth = _scene.getWidth(); - double sceneHeight = _scene.getHeight(); - - _canvas.setWidth(sceneWidth); - _hBox.setPrefWidth(sceneWidth); - _canvas.setHeight(sceneHeight - _hBoxHeight); - _hBox.setTranslateY(sceneHeight - _hBoxHeight); - - _buttonCreate.setTranslateY(sceneHeight - _hBoxHeight - _buttonCreateHeight - _buttonMargin); - - _buttonUp.setTranslateY(sceneHeight - _hBoxHeight - _buttonMoveHeight * 2.0 - _buttonMargin - - _distanceBetweenMoveButtons); - _buttonUp.setTranslateX(sceneWidth - _buttonMargin - _buttonMoveWidth * 2.0 - _distanceBetweenMoveButtons); - - _buttonDown.setTranslateY(sceneHeight - _hBoxHeight - _buttonMoveHeight - _buttonMargin); - _buttonDown.setTranslateX(sceneWidth- _buttonMargin - _buttonMoveWidth * 2.0 - _distanceBetweenMoveButtons); - - _buttonLeft.setTranslateY(sceneHeight - _hBoxHeight - _buttonMoveHeight - _buttonMargin); - _buttonLeft.setTranslateX(sceneWidth - _buttonMargin - _buttonMoveWidth * 3.0 - - _distanceBetweenMoveButtons * 2.0); - - _buttonRight.setTranslateY(sceneHeight - _hBoxHeight - _buttonMoveHeight - _buttonMargin); - _buttonRight.setTranslateX(sceneWidth - _buttonMargin - _buttonMoveWidth); - } - - private void Draw() - { - GraphicsContext gc = _canvas.getGraphicsContext2D(); - - gc.clearRect(0.0, 0.0, _canvas.getWidth(), _canvas.getHeight()); - gc.setFill(Color.WHITE); - gc.fillRect(0.0, 0.0, _canvas.getWidth(), _canvas.getHeight()); - - gc.setStroke(Color.BLACK); - gc.setLineWidth(4); - gc.strokeRect(0.0, 0.0, _canvas.getWidth(), _canvas.getHeight()); - - if (_armoredCar != null) - { - _armoredCar.DrawTransport(gc); - } - } - public static void main(String[] args) { launch(); diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/FormMap.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/FormMap.java new file mode 100644 index 0000000..76e81a1 --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/FormMap.java @@ -0,0 +1,75 @@ +package com.example.antiaircraftgun; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.canvas.Canvas; +import javafx.scene.control.Button; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.Pane; +import javafx.stage.Stage; + +import java.io.IOException; + +public class FormMap extends Application{ + @Override + public void start(Stage stage) throws IOException + { + FXMLLoader fxmlLoader = new FXMLLoader(FormMap.class.getResource("form-map-view.fxml")); + Scene scene = new Scene(fxmlLoader.load(), 600, 400); + + stage.setTitle("Map"); + stage.setScene(scene); + + FirstUpdateGUI(scene); + stage.show(); + } + + private void FirstUpdateGUI(Scene scene) + { + Pane root = (Pane)scene.lookup("#root"); + Canvas canvas = (Canvas)scene.lookup("#canvas"); + Button buttonCreate = (Button)scene.lookup("#buttonCreate"); + Button buttonCreateModif = (Button)scene.lookup("#buttonCreateModif"); + Button buttonUp = (Button)scene.lookup("#buttonUp"); + Button buttonLeft = (Button)scene.lookup("#buttonLeft"); + Button buttonRight = (Button)scene.lookup("#buttonRight"); + Button buttonDown = (Button)scene.lookup("#buttonDown"); + FlowPane flowPane = (FlowPane)scene.lookup("#flowPane"); + + root.applyCss(); + root.layout(); + + double flowPaneHeight = flowPane.getHeight(); + double buttonCreateHeight = buttonCreate.getHeight(); + double buttonCreateWidth = buttonCreate.getWidth(); + double rootWidth = root.getWidth(); + double rootHeight = root.getHeight(); + double rootPadding = 10.0; + double distanceBetweenButtons = 5.0; + double buttonMoveSize = 30.0; + + canvas.setWidth(rootWidth); + flowPane.setPrefWidth(rootWidth); + canvas.setHeight(rootHeight - flowPaneHeight); + flowPane.setTranslateY(rootHeight - flowPaneHeight); + buttonCreateModif.setTranslateX(rootPadding + buttonCreateWidth + distanceBetweenButtons); + buttonCreate.setTranslateY(rootHeight - flowPaneHeight - buttonCreateHeight - rootPadding); + buttonCreateModif.setTranslateY(rootHeight - flowPaneHeight - buttonCreateHeight - rootPadding); + + buttonUp.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize * 2.0 - rootPadding - + distanceBetweenButtons); + buttonUp.setTranslateX(rootWidth - rootPadding - buttonMoveSize * 2.0 - distanceBetweenButtons); + + buttonDown.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonDown.setTranslateX(rootWidth- rootPadding - buttonMoveSize * 2.0 - distanceBetweenButtons); + + buttonLeft.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonLeft.setTranslateX(rootWidth - rootPadding - buttonMoveSize * 3.0 - distanceBetweenButtons * 2.0); + + buttonRight.setTranslateY(rootHeight - flowPaneHeight - buttonMoveSize - rootPadding); + buttonRight.setTranslateX(rootWidth - rootPadding - buttonMoveSize); + } + + public static void main(String[] args) { launch(); } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/IDrawingAdditionalElement.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/IDrawingAdditionalElement.java new file mode 100644 index 0000000..4534ab8 --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/IDrawingAdditionalElement.java @@ -0,0 +1,8 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; + +public interface IDrawingAdditionalElement { + public void SetNumberRollers(int numberOfRollers); + public void DrawRollers(GraphicsContext gc, float startPosX, float startPosY); +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/IDrawingObject.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/IDrawingObject.java new file mode 100644 index 0000000..b7a798f --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/IDrawingObject.java @@ -0,0 +1,11 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; + +public interface IDrawingObject { + public float GetStep(); + public void SetObject(int x, int y, int width, int height); + public void MoveObject(Direction direction); + public void DrawingObject(GraphicsContext gc); + public float[] GetCurrentPosition(); +} \ No newline at end of file diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/SimpleMap.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/SimpleMap.java new file mode 100644 index 0000000..87e53dc --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/SimpleMap.java @@ -0,0 +1,42 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class SimpleMap extends AbstractMap { + protected void DrawBarrierPart(GraphicsContext gc, int i, int j) + { + gc.setFill(Color.BLACK); + gc.fillRect(i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + protected void DrawRoadPart(GraphicsContext gc, int i, int j) + { + gc.setFill(Color.LIGHTGRAY); + gc.fillRect(i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + + protected void GenerateMap() + { + _map = new int[100][100]; + _size_x = (float)_width / _map.length; + _size_y = (float)_height / _map[0].length; + int counter = 0; + for (int i = 0; i < _map.length; ++i) + { + for (int j = 0; j < _map[0].length; ++j) + { + _map[i][j] = _freeRoad; + } + } + while (counter < 50) + { + int x = _random.nextInt(0, 100); + int y = _random.nextInt(0, 100); + if (_map[x][y] == _freeRoad) + { + _map[x][y] = _barrier; + counter++; + } + } + } +} diff --git a/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/TrainingGroundMap.java b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/TrainingGroundMap.java new file mode 100644 index 0000000..2faf3b7 --- /dev/null +++ b/AntiAircraftGun/src/main/java/com/example/antiaircraftgun/TrainingGroundMap.java @@ -0,0 +1,42 @@ +package com.example.antiaircraftgun; + +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.paint.Color; + +public class TrainingGroundMap extends AbstractMap{ + protected void DrawBarrierPart(GraphicsContext gc, int i, int j) + { + gc.setFill(Color.BLACK); + gc.fillRect(i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + protected void DrawRoadPart(GraphicsContext gc, int i, int j) + { + gc.setFill(Color.LIGHTGREEN); + gc.fillRect(i * _size_x, j * _size_y, i * (_size_x + 1), j * (_size_y + 1)); + } + + protected void GenerateMap() + { + _map = new int[100][100]; + _size_x = (float)_width / _map.length; + _size_y = (float)_height / _map[0].length; + int counter = 0; + for (int i = 0; i < _map.length; ++i) + { + for (int j = 0; j < _map[0].length; ++j) + { + _map[i][j] = _freeRoad; + } + } + while (counter < 25) + { + int x = _random.nextInt(0, 100); + int y = _random.nextInt(0, 100); + if (_map[x][y] == _freeRoad) + { + _map[x][y] = _barrier; + counter++; + } + } + } +} diff --git a/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/form-armored-vehicle-view.fxml b/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/form-armored-vehicle-view.fxml new file mode 100644 index 0000000..505116d --- /dev/null +++ b/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/form-armored-vehicle-view.fxml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/form-map-view.fxml b/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/form-map-view.fxml new file mode 100644 index 0000000..f267870 --- /dev/null +++ b/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/form-map-view.fxml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/hello-view.fxml b/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/hello-view.fxml deleted file mode 100644 index af7d531..0000000 --- a/AntiAircraftGun/src/main/resources/com/example/antiaircraftgun/hello-view.fxml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - -