From 28e315e889933d3e434aecae3eb31a1773de9252 Mon Sep 17 00:00:00 2001 From: Evgehil Date: Mon, 22 Apr 2024 20:11:30 +0400 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/uiDesigner.xml | 124 ++++++++++++++ .../CountPortholes.java | 12 ++ .../DrawingPortholes.java | 14 +- .../DrawingPortholesCircle.java | 31 ++++ .../DrawingPortholesHeart.java | 33 ++++ .../DrawingPortholesSquare.java | 30 ++++ .../IDifferentPortholes.java | 9 + src/src/CountPortholes.java | 5 - src/src/DrawingAirbus.java | 144 ---------------- src/src/{ => Drawings}/CanvasAirbus.java | 10 +- src/src/{ => Drawings}/DirectionType.java | 5 +- src/src/Drawings/DrawingAirbus.java | 40 +++++ src/src/Drawings/DrawingAirplan.java | 156 ++++++++++++++++++ src/src/Entities/EntityAirbus.java | 20 +++ src/src/Entities/EntityAirplan.java | 18 ++ src/src/EntityAirbus.java | 24 --- src/src/FormAirbus.java | 133 ++++++++++++--- .../MovementStrategy/AbstractStrategy.java | 56 +++++++ src/src/MovementStrategy/IMoveableObject.java | 7 + src/src/MovementStrategy/MoveToBorder.java | 27 +++ src/src/MovementStrategy/MoveToCenter.java | 48 ++++++ src/src/MovementStrategy/MoveableAirplan.java | 47 ++++++ .../MovementStrategy/MovementDirection.java | 8 + .../MovementStrategy/ObjectParameters.java | 27 +++ src/src/MovementStrategy/StrategyStatus.java | 7 + 25 files changed, 827 insertions(+), 208 deletions(-) create mode 100644 .idea/uiDesigner.xml create mode 100644 src/src/ChoiseAndDrawingPortholes/CountPortholes.java rename src/src/{ => ChoiseAndDrawingPortholes}/DrawingPortholes.java (82%) create mode 100644 src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java create mode 100644 src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java create mode 100644 src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java create mode 100644 src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java delete mode 100644 src/src/CountPortholes.java delete mode 100644 src/src/DrawingAirbus.java rename src/src/{ => Drawings}/CanvasAirbus.java (62%) rename src/src/{ => Drawings}/DirectionType.java (56%) create mode 100644 src/src/Drawings/DrawingAirbus.java create mode 100644 src/src/Drawings/DrawingAirplan.java create mode 100644 src/src/Entities/EntityAirbus.java create mode 100644 src/src/Entities/EntityAirplan.java delete mode 100644 src/src/EntityAirbus.java create mode 100644 src/src/MovementStrategy/AbstractStrategy.java create mode 100644 src/src/MovementStrategy/IMoveableObject.java create mode 100644 src/src/MovementStrategy/MoveToBorder.java create mode 100644 src/src/MovementStrategy/MoveToCenter.java create mode 100644 src/src/MovementStrategy/MoveableAirplan.java create mode 100644 src/src/MovementStrategy/MovementDirection.java create mode 100644 src/src/MovementStrategy/ObjectParameters.java create mode 100644 src/src/MovementStrategy/StrategyStatus.java 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/src/src/ChoiseAndDrawingPortholes/CountPortholes.java b/src/src/ChoiseAndDrawingPortholes/CountPortholes.java new file mode 100644 index 0000000..627b4c1 --- /dev/null +++ b/src/src/ChoiseAndDrawingPortholes/CountPortholes.java @@ -0,0 +1,12 @@ +package ChoiseAndDrawingPortholes; + +public enum CountPortholes { + TenPortholes(10), + TwentyPortholes(20), + ThirtyPortholes(30); + private int numberofportholes; + CountPortholes(int numberofportholes) { + this.numberofportholes = numberofportholes; + } + public int getNumportholes() {return numberofportholes;} +} \ No newline at end of file diff --git a/src/src/DrawingPortholes.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholes.java similarity index 82% rename from src/src/DrawingPortholes.java rename to src/src/ChoiseAndDrawingPortholes/DrawingPortholes.java index 81fd49d..478497c 100644 --- a/src/src/DrawingPortholes.java +++ b/src/src/ChoiseAndDrawingPortholes/DrawingPortholes.java @@ -1,3 +1,5 @@ +package ChoiseAndDrawingPortholes; + import java.awt.*; public class DrawingPortholes { @@ -10,16 +12,16 @@ public class DrawingPortholes { public void SetCount(int count) { switch (count) { case 1: // 10 - _porthole = CountPortholes.Ten; + _porthole = CountPortholes.TenPortholes; break; case 2: // 20 - _porthole = CountPortholes.Twenty; + _porthole = CountPortholes.TwentyPortholes; break; case 3: // 30 - _porthole = CountPortholes.Thirty; + _porthole = CountPortholes.ThirtyPortholes; break; default: - _porthole = CountPortholes.Ten; + _porthole = CountPortholes.TenPortholes; break; } } @@ -37,7 +39,7 @@ public class DrawingPortholes { g.drawOval(_startPosx + 19 + i * 8, _startPoxY + 21, 3, 3); } - if (_porthole != CountPortholes.Ten) { + if (_porthole != CountPortholes.TenPortholes) { for (int i = 0; i < 5; ++i) { g.setColor(Color.cyan); g.fillOval(_startPosx - 15 + i * 5, _startPoxY + 28, 3, 3); @@ -51,7 +53,7 @@ public class DrawingPortholes { g.drawOval(_startPosx + 115 + i * 5, _startPoxY + 28, 3, 3); } } - if (_porthole == CountPortholes.Thirty) { + if (_porthole == CountPortholes.ThirtyPortholes) { for (int i = 0; i < 10; ++i) { g.setColor(Color.cyan); g.fillOval(_startPosx + 19 + i * 8, _startPoxY + 37, 3, 3); diff --git a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java new file mode 100644 index 0000000..5c33e95 --- /dev/null +++ b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java @@ -0,0 +1,31 @@ +package ChoiseAndDrawingPortholes; + +import java.awt.*; +import Entities.*; + +public class DrawingPortholesCircle implements IDifferentPortholes { + private CountPortholes _porthole; + + @Override + public void setNumberPortholes(int numberofportholes) { + for (CountPortholes numofenum : CountPortholes.values()) { + if (numofenum.getNumportholes() == numberofportholes) { + _porthole = numofenum; + return; + } + } + } + + @Override + public CountPortholes getNumberOfPortholes() { + return _porthole; + } + + @Override + public void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor) { + g.setColor(Color.cyan); + g.fillOval(x, y, 3, 3); + g.setColor(Color.black); + g.drawOval(x, y, 3, 3); + } +} diff --git a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java new file mode 100644 index 0000000..94e78b4 --- /dev/null +++ b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java @@ -0,0 +1,33 @@ +package ChoiseAndDrawingPortholes; + +import java.awt.*; + +public class DrawingPortholesHeart implements IDifferentPortholes { + private CountPortholes _porthole; + + @Override + public void setNumberPortholes(int numberofportholes) { + for (CountPortholes numofenum : CountPortholes.values()) { + if (numofenum.getNumportholes() == numberofportholes) { + _porthole = numofenum; + return; + } + } + } + + @Override + public CountPortholes getNumberOfPortholes() { + return _porthole; + } + + @Override + public void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor) { + int[] HeartX = {x + 2, x, x, x + 1, x + 2, x + 3, x + 5, x + 5}; + int[] HeartY = {y + 4, y + 2, y, y, y + 1, y, y, y + 2}; + g.setColor(Color.cyan); + g.fillPolygon(HeartX, HeartY, HeartX.length); + g.setColor(Color.black); + g.drawPolygon(HeartX, HeartY, HeartX.length); + + } +} diff --git a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java new file mode 100644 index 0000000..3b3cc6d --- /dev/null +++ b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java @@ -0,0 +1,30 @@ +package ChoiseAndDrawingPortholes; + +import java.awt.*; + +public class DrawingPortholesSquare implements IDifferentPortholes { + private CountPortholes _porthole; + + @Override + public void setNumberPortholes(int numberofportholes) { + for (CountPortholes numofenum : CountPortholes.values()) { + if (numofenum.getNumportholes() == numberofportholes) { + _porthole = numofenum; + return; + } + } + } + + @Override + public CountPortholes getNumberOfPortholes() { + return _porthole; + } + + @Override + public void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor) { + g.setColor(Color.cyan); + g.fillRect(x, y, 3, 3); + g.setColor(Color.black); + g.drawRect(x, y, 3, 3); + } +} diff --git a/src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java b/src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java new file mode 100644 index 0000000..564a0b4 --- /dev/null +++ b/src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java @@ -0,0 +1,9 @@ +package ChoiseAndDrawingPortholes; + +import java.awt.*; + +public interface IDifferentPortholes { + void setNumberPortholes(int numberofportholes); + CountPortholes getNumberOfPortholes(); + void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor); +} diff --git a/src/src/CountPortholes.java b/src/src/CountPortholes.java deleted file mode 100644 index a07155b..0000000 --- a/src/src/CountPortholes.java +++ /dev/null @@ -1,5 +0,0 @@ -public enum CountPortholes { - Ten, - Twenty, - Thirty; -} \ No newline at end of file diff --git a/src/src/DrawingAirbus.java b/src/src/DrawingAirbus.java deleted file mode 100644 index ad0031f..0000000 --- a/src/src/DrawingAirbus.java +++ /dev/null @@ -1,144 +0,0 @@ -import javax.swing.*; -import java.awt.*; -import java.util.Random; - -public class DrawingAirbus extends JPanel { - public EntityAirbus EntityAirbus; - public DrawingPortholes _portholes = null; - private Integer picture_width; - private Integer picture_height; - private Integer _StartPosX; - private Integer _StartPosY; - private int drawingAirbusWidth = 185; - private int drawingAirbusHeight = 100; - public void Init(int speed, double weight, Color bodycolor, Color additionalcolor, boolean sheeppipes, boolean fueltank) { - EntityAirbus = new EntityAirbus(); - EntityAirbus.Init(speed, weight, bodycolor, additionalcolor, sheeppipes, fueltank); - picture_width = null; - picture_height = null; - _StartPosX = null; - _StartPosY = null; - _portholes = new DrawingPortholes(); - Random rand = new Random(); - int randomNum = rand.nextInt(4); - _portholes.SetCount(randomNum); - } - public boolean SetPictureSize(int width, int height) { - if (width < drawingAirbusWidth || height < drawingAirbusHeight) return false; - picture_width = width; - picture_height = height; - if (_StartPosX != null || _StartPosY != null) { - if (_StartPosX + drawingAirbusWidth > picture_width) - { - _StartPosX = _StartPosX - (_StartPosX + drawingAirbusWidth - picture_width); - } - else if (_StartPosX < 0) _StartPosX = 0; - if (_StartPosY + drawingAirbusHeight > picture_height) - { - _StartPosY = _StartPosY - (_StartPosY + drawingAirbusHeight - picture_height); - } - else if (_StartPosY < 0) _StartPosY = 0; - } - return true; - } - public void SetPosition(int x, int y) { - if (!(picture_width != null && picture_height != null)) return; - if (x + drawingAirbusWidth > picture_width) - { - _StartPosX = x - (x + drawingAirbusWidth - picture_width); - } - else if (x < 0) _StartPosX = 0; - else _StartPosX = x; - if (y + drawingAirbusHeight > picture_height) - { - _StartPosY = y - (y + drawingAirbusHeight - picture_height); - } - else if (y < 0) _StartPosY = 0; - else _StartPosY = y; - } - - public boolean MoveTransport(DirectionType direction) { - if (EntityAirbus == null || _StartPosX == null || _StartPosY == null) return false; - switch (direction) { - case Left: - if (_StartPosX - EntityAirbus.Step > 0) { - _StartPosX -= (int)EntityAirbus.Step; - } - return true; - case Up: - if (_StartPosY - EntityAirbus.Step > 0) - { - _StartPosY -= (int)EntityAirbus.Step; - } - return true; - case Right: - if (_StartPosX + drawingAirbusWidth + (int)EntityAirbus.Step < picture_width - EntityAirbus.Step) - { - _StartPosX += (int)EntityAirbus.Step; - } - return true; - case Down: - if (_StartPosY + drawingAirbusHeight + (int)EntityAirbus.Step < picture_height - EntityAirbus.Step) - { - _StartPosY += (int)EntityAirbus.Step; - } - return true; - default: - return false; - } - } - - public void DrawTransport(Graphics2D g) { - - if (EntityAirbus == null) { - return; - } - // иллюминаторы - _portholes.Draw(g, _StartPosX+30, _StartPosY+34); - - g.setColor(Color.BLACK); -//Тело - g.drawRect(_StartPosX + 5, _StartPosY + 50, 170, 30); - g.drawArc(_StartPosX - 5, _StartPosY + 50, 20, 30, 90, 180); -//Заднее крыло - g.drawLine( _StartPosX, _StartPosY, _StartPosX + 50, _StartPosY + 50); - g.drawLine( _StartPosX, _StartPosY, _StartPosX, _StartPosY + 52); -//Заднее боковые крылья - g.drawOval(_StartPosX - 7, _StartPosY + 45, 30, 8); - g.fillOval(_StartPosX - 7, _StartPosY + 45, 30, 8); -//Нос - g.drawLine( _StartPosX + 175, _StartPosY + 50, _StartPosX + 200, _StartPosY + 65); - g.drawLine( _StartPosX + 200, _StartPosY + 65, _StartPosX + 175, _StartPosY + 80); - g.drawLine( _StartPosX + 175, _StartPosY + 50, _StartPosX + 175, _StartPosY + 80); - g.drawLine( _StartPosX + 175, _StartPosY + 65, _StartPosX + 200, _StartPosY + 65); -//Крылья - g.drawArc(_StartPosX + 49, _StartPosY + 62, 5, 5, 90, 180); - g.drawLine( _StartPosX + 51, _StartPosY + 62, _StartPosX + 140, _StartPosY + 62); - g.drawArc( _StartPosX + 137, _StartPosY + 62, 5, 5, 2790, 180); - g.drawLine( _StartPosX + 51, _StartPosY + 67, _StartPosX + 140, _StartPosY + 67); -//Задние шасси - g.drawLine(_StartPosX + 55, _StartPosY + 80, _StartPosX + 55, _StartPosY + 90); - g.drawOval(_StartPosX + 47, _StartPosY + 90, 5, 5); - g.drawOval( _StartPosX + 57, _StartPosY + 90, 5, 5); -//Передние шасси - g.drawLine( _StartPosX + 165, _StartPosY + 80, _StartPosX + 165, _StartPosY + 90); - g.drawOval( _StartPosX + 163, _StartPosY + 91, 5, 5); -//Пассажирсакий доп. отсек - if (EntityAirbus.getIsCompartmen()) - { - g.setColor(EntityAirbus.getAdditionalColor()); - g.drawArc(_StartPosX + 60, _StartPosY + 28, 115, 45, 0, 180); - g.fillArc(_StartPosX + 60, _StartPosY + 28, 115, 45, 0, 180); - } -// Доп. двигатели - if (EntityAirbus.getIsAdditionalEngine()) - { - g.drawLine(_StartPosX + 95, _StartPosY + 68, _StartPosX + 95, _StartPosY + 75); - g.setColor(EntityAirbus.getAdditionalColor()); - int[] xPolygon = { _StartPosX + 83, _StartPosX + 103, _StartPosX + 103, _StartPosX + 83, _StartPosX + 83}; - int[] yPolygon = {_StartPosY + 78, _StartPosY + 73, _StartPosY + 93, _StartPosY + 88, _StartPosY + 78}; - g.drawPolygon(xPolygon, yPolygon, xPolygon.length); - g.fillPolygon(xPolygon, yPolygon, xPolygon.length); - } - } -} diff --git a/src/src/CanvasAirbus.java b/src/src/Drawings/CanvasAirbus.java similarity index 62% rename from src/src/CanvasAirbus.java rename to src/src/Drawings/CanvasAirbus.java index 7768d8a..e41b039 100644 --- a/src/src/CanvasAirbus.java +++ b/src/src/Drawings/CanvasAirbus.java @@ -1,16 +1,20 @@ +package Drawings; + +import Drawings.DrawingAirbus; + import javax.swing.*; import java.awt.*; public class CanvasAirbus extends JComponent { - public DrawingAirbus _drawingAirbus; + public DrawingAirplan _drawingAirplan; public CanvasAirbus(){} public void paintComponent(Graphics g) { - if (_drawingAirbus == null) { + if (_drawingAirplan == null) { return; } super.paintComponents(g); Graphics2D g2d = (Graphics2D) g; - _drawingAirbus.DrawTransport(g2d); + _drawingAirplan.DrawTransport(g2d); super.repaint(); } } \ No newline at end of file diff --git a/src/src/DirectionType.java b/src/src/Drawings/DirectionType.java similarity index 56% rename from src/src/DirectionType.java rename to src/src/Drawings/DirectionType.java index d3a2058..ba1c998 100644 --- a/src/src/DirectionType.java +++ b/src/src/Drawings/DirectionType.java @@ -1,6 +1,9 @@ +package Drawings; + public enum DirectionType { Up, Down, Left, - Right + Right, + Unknown } \ No newline at end of file diff --git a/src/src/Drawings/DrawingAirbus.java b/src/src/Drawings/DrawingAirbus.java new file mode 100644 index 0000000..849f17d --- /dev/null +++ b/src/src/Drawings/DrawingAirbus.java @@ -0,0 +1,40 @@ +package Drawings; + +import Entities.*; +import java.awt.*; + +public class DrawingAirbus extends DrawingAirplan { + + public DrawingAirbus(int speed, double weight, Color bodycolor, Color additionalcolor, boolean isCompartment, boolean isAdditionalEngine) { + EntityAirplan = new EntityAirbus(speed, weight, bodycolor, additionalcolor, isCompartment, isAdditionalEngine); + SetAmountAndTypePortholes(); + } + + @Override + public void DrawTransport(Graphics2D g) { + + if (EntityAirplan == null || !(EntityAirplan instanceof EntityAirbus airbus) + || _StartPosX == null || _StartPosY == null) + return; + g.setColor(Color.BLACK); + super.DrawTransport(g); + +//Пассажирсакий доп. отсек + if (EntityAirbus.getIsCompartment()) + { + g.setColor(EntityAirbus.getAdditionalColor()); + g.drawArc(_StartPosX + 60, _StartPosY + 28, 115, 45, 0, 180); + g.fillArc(_StartPosX + 60, _StartPosY + 28, 115, 45, 0, 180); + } +// Доп. двигатели + if (EntityAirbus.getIsAdditionalEngine()) + { + g.drawLine(_StartPosX + 95, _StartPosY + 68, _StartPosX + 95, _StartPosY + 75); + g.setColor(EntityAirbus.getAdditionalColor()); + int[] xPolygon = { _StartPosX + 83, _StartPosX + 103, _StartPosX + 103, _StartPosX + 83, _StartPosX + 83}; + int[] yPolygon = {_StartPosY + 78, _StartPosY + 73, _StartPosY + 93, _StartPosY + 88, _StartPosY + 78}; + g.drawPolygon(xPolygon, yPolygon, xPolygon.length); + g.fillPolygon(xPolygon, yPolygon, xPolygon.length); + } + } +} diff --git a/src/src/Drawings/DrawingAirplan.java b/src/src/Drawings/DrawingAirplan.java new file mode 100644 index 0000000..28ef503 --- /dev/null +++ b/src/src/Drawings/DrawingAirplan.java @@ -0,0 +1,156 @@ +package Drawings; + +import Entities.*; +import ChoiseAndDrawingPortholes.*; +import javax.swing.*; +import java.awt.*; +import java.util.Random; + +public class DrawingAirplan extends JPanel { + public Entities.EntityAirplan EntityAirplan; + public IDifferentPortholes drawingPortholes; + private Integer picture_width; + private Integer picture_height; + protected Integer _StartPosX; + public Integer GetPosX() {return _StartPosX;} + protected Integer _StartPosY; + public Integer GetPosY() {return _StartPosY;} + protected int drawingAirplanWidth = 185; + public Integer GetWidth() {return drawingAirplanWidth;} + protected int drawingAirplanHeight = 100; + public Integer GetHeight() {return drawingAirplanHeight;} + + protected DrawingAirplan() { + picture_width = null; + picture_height = null; + _StartPosX = null; + _StartPosY = null; + } + + protected void SetAmountAndTypePortholes() { + Random random = new Random(); + int numberofportholes = random.nextInt(0,3); + switch (numberofportholes) { + case 1: + drawingPortholes = new DrawingPortholesCircle(); + break; + case 2: + drawingPortholes = new DrawingPortholesSquare(); + break; + case 3: + drawingPortholes = new DrawingPortholesHeart(); + break; + default: + numberofportholes = 0; + break; + } + drawingPortholes.setNumberPortholes(numberofportholes); + } + + public DrawingAirplan(int speed, double weight, Color bodycolor) { + super(); + EntityAirplan = new EntityAirplan(speed, weight, bodycolor); + SetAmountAndTypePortholes(); + } + + public boolean SetPictureSize(int width, int height) { + if (width < drawingAirplanWidth || height < drawingAirplanHeight) return false; + picture_width = width; + picture_height = height; + if (_StartPosX != null || _StartPosY != null) { + if (_StartPosX + drawingAirplanWidth > picture_width) + { + _StartPosX = _StartPosX - (_StartPosX + drawingAirplanWidth - picture_width); + } + else if (_StartPosX < 0) _StartPosX = 0; + if (_StartPosY + drawingAirplanHeight > picture_height) + { + _StartPosY = _StartPosY - (_StartPosY + drawingAirplanHeight - picture_height); + } + else if (_StartPosY < 0) _StartPosY = 0; + } + return true; + } + public void SetPosition(int x, int y) { + if (!(picture_width != null && picture_height != null)) return; + if (x + drawingAirplanWidth > picture_width) + { + _StartPosX = x - (x + drawingAirplanWidth - picture_width); + } + else if (x < 0) _StartPosX = 0; + else _StartPosX = x; + if (y + drawingAirplanHeight > picture_height) + { + _StartPosY = y - (y + drawingAirplanHeight - picture_height); + } + else if (y < 0) _StartPosY = 0; + else _StartPosY = y; + } + + public boolean MoveTransport(DirectionType direction) { + if (EntityAirplan == null || _StartPosX == null || _StartPosY == null) return false; + switch (direction) { + case DirectionType.Left: + if (_StartPosX - EntityAirplan.Step > 0) { + _StartPosX -= (int)EntityAirplan.Step; + } + return true; + case DirectionType.Up: + if (_StartPosY - EntityAirplan.Step > 0) + { + _StartPosY -= (int)EntityAirplan.Step; + } + return true; + case DirectionType.Right: + if (_StartPosX + drawingAirplanWidth + (int)EntityAirplan.Step < picture_width - EntityAirplan.Step) + { + _StartPosX += (int)EntityAirplan.Step; + } + return true; + case DirectionType.Down: + if (_StartPosY + drawingAirplanHeight + (int)EntityAirplan.Step < picture_height - EntityAirplan.Step) + { + _StartPosY += (int)EntityAirplan.Step; + } + return true; + default: + return false; + } + } + + public void DrawTransport(Graphics2D g) { + + if (EntityAirplan == null) { + return; + } + + g.setColor(Color.BLACK); +//Тело + g.drawRect(_StartPosX + 5, _StartPosY + 50, 170, 30); + g.drawArc(_StartPosX - 5, _StartPosY + 50, 20, 30, 90, 180); +//Заднее крыло + g.drawLine(_StartPosX, _StartPosY, _StartPosX + 50, _StartPosY + 50); + g.drawLine(_StartPosX, _StartPosY, _StartPosX, _StartPosY + 52); +//Заднее боковые крылья + g.drawOval(_StartPosX - 7, _StartPosY + 45, 30, 8); + g.fillOval(_StartPosX - 7, _StartPosY + 45, 30, 8); +//Нос + g.drawLine(_StartPosX + 175, _StartPosY + 50, _StartPosX + 200, _StartPosY + 65); + g.drawLine(_StartPosX + 200, _StartPosY + 65, _StartPosX + 175, _StartPosY + 80); + g.drawLine(_StartPosX + 175, _StartPosY + 50, _StartPosX + 175, _StartPosY + 80); + g.drawLine(_StartPosX + 175, _StartPosY + 65, _StartPosX + 200, _StartPosY + 65); +//Крылья + g.drawArc(_StartPosX + 49, _StartPosY + 62, 5, 5, 90, 180); + g.drawLine(_StartPosX + 51, _StartPosY + 62, _StartPosX + 140, _StartPosY + 62); + g.drawArc(_StartPosX + 137, _StartPosY + 62, 5, 5, 2790, 180); + g.drawLine(_StartPosX + 51, _StartPosY + 67, _StartPosX + 140, _StartPosY + 67); +//Задние шасси + g.drawLine(_StartPosX + 55, _StartPosY + 80, _StartPosX + 55, _StartPosY + 90); + g.drawOval(_StartPosX + 47, _StartPosY + 90, 5, 5); + g.drawOval(_StartPosX + 57, _StartPosY + 90, 5, 5); +//Передние шасси + g.drawLine(_StartPosX + 165, _StartPosY + 80, _StartPosX + 165, _StartPosY + 90); + g.drawOval(_StartPosX + 163, _StartPosY + 91, 5, 5); + } +} + diff --git a/src/src/Entities/EntityAirbus.java b/src/src/Entities/EntityAirbus.java new file mode 100644 index 0000000..b13c4e3 --- /dev/null +++ b/src/src/Entities/EntityAirbus.java @@ -0,0 +1,20 @@ +package Entities; + +import java.awt.*; +public class EntityAirbus extends EntityAirplan { + + private static Color AdditionalColor; + public static Color getAdditionalColor() {return AdditionalColor;} + private static boolean IsCompartment; + public static boolean getIsCompartment() {return IsCompartment;} + private static boolean IsAdditionalEngine; + public static boolean getIsAdditionalEngine() {return IsAdditionalEngine;} + + public EntityAirbus(int speed, double weight, Color bodycolor, Color additionalcolor, boolean isCompartment, boolean isAdditionalEngine) + { + super(speed,weight,bodycolor); + AdditionalColor = additionalcolor; + IsCompartment = isCompartment; + IsAdditionalEngine = isAdditionalEngine; + } +} diff --git a/src/src/Entities/EntityAirplan.java b/src/src/Entities/EntityAirplan.java new file mode 100644 index 0000000..7e8d1e0 --- /dev/null +++ b/src/src/Entities/EntityAirplan.java @@ -0,0 +1,18 @@ +package Entities; + +import java.awt.*; +public class EntityAirplan { + private int Speed; + private double Weight; + private Color BodyColor; + public Color getBodyColor() {return BodyColor;} + public double Step; + public EntityAirplan(int speed, double weight, Color bodycolor) + { + Speed = speed; + Weight = weight; + BodyColor = bodycolor; + Step = Speed * 100 / Weight; + } +} + diff --git a/src/src/EntityAirbus.java b/src/src/EntityAirbus.java deleted file mode 100644 index de7f62a..0000000 --- a/src/src/EntityAirbus.java +++ /dev/null @@ -1,24 +0,0 @@ -import java.awt.*; -public class EntityAirbus { - private int Speed; - private double Weight; - private Color BodyColor; - public Color getBodyColor() {return BodyColor;} - private Color AdditionalColor; - public Color getAdditionalColor() {return AdditionalColor;} - private boolean IsCompartment; - public boolean getIsCompartmen() {return IsCompartment;} - private boolean IsAdditionalEngine; - public boolean getIsAdditionalEngine() {return IsAdditionalEngine;} - public double Step; - public void Init(int speed, double weight, Color bodycolor, Color additionalcolor, boolean isCompartment, boolean isAdditionalEngine) - { - Speed = speed; - Weight = weight; - BodyColor = bodycolor; - AdditionalColor = additionalcolor; - IsCompartment = isCompartment; - IsAdditionalEngine = isAdditionalEngine; - Step = Speed * 100 / Weight; - } -} diff --git a/src/src/FormAirbus.java b/src/src/FormAirbus.java index e35cfe6..fbc488e 100644 --- a/src/src/FormAirbus.java +++ b/src/src/FormAirbus.java @@ -1,3 +1,9 @@ +import Drawings.CanvasAirbus; +import Drawings.DirectionType; +import Drawings.DrawingAirbus; +import Drawings.DrawingAirplan; +import MovementStrategy.*; + import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; @@ -10,24 +16,58 @@ public class FormAirbus extends JFrame { private String title; private Dimension dimension; private int Width, Height; - private CanvasAirbus canvasAirbus = new CanvasAirbus(); - private JButton CreateButton = new JButton("Create");; + public CanvasAirbus canvasAirbus = new CanvasAirbus(); + private JButton CreateButton = new JButton("Create airbus");; + private JButton CreateAirplanButton = new JButton("Create airplan"); private JButton UpButton = new JButton(); private JButton DownButton = new JButton();; private JButton LeftButton = new JButton();; private JButton RightButton = new JButton(); + private AbstractStrategy _strategy; + private JComboBox ComboBoxStrategy = new JComboBox(new String[]{"К центру", "К краю"}); + private JButton ButtonStrategy = new JButton("Шаг"); public FormAirbus(String title, Dimension dimension) { this.title = title; this.dimension = dimension; } + + private void CreateObject(String typeOfClass) { + int StartPositionX = (int)(Math.random() * 90 + 10); + int StartPositionY = (int)(Math.random() * 90 + 10); + int speed = (int)(Math.random() * 300 + 100); + double weight = (double)(Math.random() * 3000 + 1000); + Color bodyColor = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0)); + switch (typeOfClass) { + case "DrawingAirplan": + canvasAirbus._drawingAirplan = new DrawingAirplan(speed, weight, bodyColor); + canvasAirbus._drawingAirplan.SetPictureSize(Width, Height); + canvasAirbus._drawingAirplan.SetPosition(StartPositionX, StartPositionY); + canvasAirbus.repaint(); + break; + case "DrawingAirbus": + Color additionalColor = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0));; + boolean IsCompartment = new Random().nextBoolean(); + boolean isAdditionalEngine = new Random().nextBoolean();; + canvasAirbus._drawingAirplan = new DrawingAirbus(speed, weight, bodyColor, additionalColor, IsCompartment , isAdditionalEngine); + canvasAirbus._drawingAirplan.SetPictureSize(Width, Height); + canvasAirbus._drawingAirplan.SetPosition(StartPositionX, StartPositionY); + canvasAirbus.repaint(); + break; + default: return; + } + _strategy = null; + ComboBoxStrategy.setEnabled(true); + } + public void Init() { setTitle(title); setMinimumSize(dimension); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Width = getWidth() - 15; Height = getHeight() - 35; - + _strategy = null; CreateButton.setName("CREATE"); + CreateAirplanButton.setName("CREATESAIRPLANBUTTON"); Icon iconUp = new ImageIcon("src\\image\\up.jpg"); UpButton.setIcon(iconUp); UpButton.setName("UP"); @@ -44,39 +84,73 @@ public class FormAirbus extends JFrame { CreateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - int StartPositionX = (int)(Math.random() * 90 + 10); - int StartPositionY = (int)(Math.random() * 90 + 10); - int speed = (int)(Math.random() * 300 + 100); - double weight = (double)(Math.random() * 3000 + 1000); - Color bodyColor = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0)); - Color additionalColor = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0));; - boolean sheepPipes = new Random().nextBoolean(); - boolean fuelTank = new Random().nextBoolean();; - canvasAirbus._drawingAirbus = new DrawingAirbus(); - canvasAirbus._drawingAirbus.Init(speed, weight, bodyColor, additionalColor, sheepPipes, fuelTank); - canvasAirbus._drawingAirbus.SetPictureSize(Width, Height); - canvasAirbus._drawingAirbus.SetPosition( StartPositionX, StartPositionY); - canvasAirbus.repaint(); + CreateObject("DrawingAirbus"); + } + }); + + CreateAirplanButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + CreateObject("DrawingAirplan"); + } + }); + + ButtonStrategy.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (canvasAirbus._drawingAirplan == null) return; + if (ComboBoxStrategy.isEnabled()) + { + int index = ComboBoxStrategy.getSelectedIndex(); + switch(index) + { + case 0: + _strategy = new MoveToCenter(); + break; + case 1: + _strategy = new MoveToBorder(); + break; + default: + _strategy = null; + break; + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveableAirplan(canvasAirbus._drawingAirplan), Width, Height); + } + if (_strategy == null) + { + return; + } + ComboBoxStrategy.setEnabled(false); + _strategy.MakeStep(); + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + ComboBoxStrategy.setEnabled(true); + _strategy = null; + } } }); ActionListener actionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent event) { - if (canvasAirbus._drawingAirbus == null) return; + if (canvasAirbus._drawingAirplan == null) return; boolean result = false; switch ((((JButton)(event.getSource())).getName())) { case "UP": - result = canvasAirbus._drawingAirbus.MoveTransport(DirectionType.Up); + result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Up); break; case "DOWN": - result = canvasAirbus._drawingAirbus.MoveTransport(DirectionType.Down); + result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Down); break; case "LEFT": - result = canvasAirbus._drawingAirbus.MoveTransport(DirectionType.Left); + result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Left); break; case "RIGHT": - result = canvasAirbus._drawingAirbus.MoveTransport(DirectionType.Right); + result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Right); break; } if (result) { @@ -92,16 +166,22 @@ public class FormAirbus extends JFrame { setSize(dimension.width,dimension.height); setLayout(null); canvasAirbus.setBounds(0,0, getWidth(), getHeight()); - CreateButton.setBounds(10, getHeight() - 90, 100, 40); + CreateButton.setBounds(10, getHeight() - 90, 125, 40); + CreateAirplanButton.setBounds(160, getHeight() - 90, 125, 40); UpButton.setBounds(getWidth() - 140, getHeight() - 160, 50, 50); DownButton.setBounds(getWidth() - 140, getHeight() - 100, 50, 50); RightButton.setBounds(getWidth() - 80, getHeight() - 100, 50, 50); LeftButton.setBounds(getWidth() - 200, getHeight() - 100, 50, 50); + ComboBoxStrategy.setBounds(getWidth() - 170, 10, 140, 35); + ButtonStrategy.setBounds(getWidth() - 130, 55, 100, 25); add(CreateButton); + add(CreateAirplanButton); add(UpButton); add(DownButton); add(RightButton); add(LeftButton); + add(ComboBoxStrategy); + add(ButtonStrategy); add(canvasAirbus); setVisible(true); //обработка события изменения размеров окна @@ -109,14 +189,17 @@ public class FormAirbus extends JFrame { public void componentResized(ComponentEvent e) { Width = getWidth() - 15; Height = getHeight() - 35; - if (canvasAirbus._drawingAirbus != null) - canvasAirbus._drawingAirbus.SetPictureSize(Width, Height); + if (canvasAirbus._drawingAirplan != null) + canvasAirbus._drawingAirplan.SetPictureSize(Width, Height); canvasAirbus.setBounds(0,0, getWidth(), getHeight()); - CreateButton.setBounds(10, getHeight() - 90, 100, 40); + CreateButton.setBounds(10, getHeight() - 90, 125, 40); + CreateAirplanButton.setBounds(160, getHeight() - 90, 125, 40); UpButton.setBounds(getWidth() - 140, getHeight() - 160, 50, 50); DownButton.setBounds(getWidth() - 140, getHeight() - 100, 50, 50); RightButton.setBounds(getWidth() - 80, getHeight() - 100, 50, 50); LeftButton.setBounds(getWidth() - 200, getHeight() - 100, 50, 50); + ComboBoxStrategy.setBounds(getWidth() - 170, 10, 140, 35); + ButtonStrategy.setBounds(getWidth() - 130, 55, 100, 25); } }); } diff --git a/src/src/MovementStrategy/AbstractStrategy.java b/src/src/MovementStrategy/AbstractStrategy.java new file mode 100644 index 0000000..1ed97d2 --- /dev/null +++ b/src/src/MovementStrategy/AbstractStrategy.java @@ -0,0 +1,56 @@ +package MovementStrategy; + +public abstract class AbstractStrategy { + private IMoveableObject _moveableObject; + private StrategyStatus _state = StrategyStatus.NotInit; + public int FieldWidth; + public int FieldHeight; + public StrategyStatus GetStatus() {return _state;} + public void SetData(IMoveableObject moveableObjects, int width, int height) + { + if (moveableObjects == null) + { + _state = StrategyStatus.NotInit; + return; + } + _state = StrategyStatus.InProgress; + _moveableObject = moveableObjects; + FieldWidth = width; + FieldHeight = height; + } + public void MakeStep() + { + if (_state != StrategyStatus.InProgress) return; + if (IsTargetDestinaion()) + { + _state = StrategyStatus.Finish; + return; + } + MoveToTarget(); + } + protected boolean MoveLeft() {return MoveTo(MovementDirection.Left);}; + protected boolean MoveRight() {return MoveTo(MovementDirection.Right);}; + protected boolean MoveUp() {return MoveTo(MovementDirection.Up);}; + protected boolean MoveDown() {return MoveTo(MovementDirection.Down);}; + protected ObjectParameters GetObjectParameters() {return _moveableObject.GetObjectPosition();}; + protected Integer GetStep() + { + if (_state != StrategyStatus.InProgress) + { + return null; + } + return _moveableObject.GetStep(); + } + protected abstract void MoveToTarget(); + protected abstract boolean IsTargetDestinaion(); + private boolean MoveTo(MovementDirection movementDirection) + { + if (_state != StrategyStatus.InProgress) + { + return false; + } + boolean stateTryMoveObject = _moveableObject.TryMoveObject(movementDirection); + if (stateTryMoveObject) return stateTryMoveObject; + return false; + } +} diff --git a/src/src/MovementStrategy/IMoveableObject.java b/src/src/MovementStrategy/IMoveableObject.java new file mode 100644 index 0000000..8a95940 --- /dev/null +++ b/src/src/MovementStrategy/IMoveableObject.java @@ -0,0 +1,7 @@ +package MovementStrategy; + +public interface IMoveableObject { + ObjectParameters GetObjectPosition(); + int GetStep(); + boolean TryMoveObject(MovementDirection direction); +} diff --git a/src/src/MovementStrategy/MoveToBorder.java b/src/src/MovementStrategy/MoveToBorder.java new file mode 100644 index 0000000..c85b39f --- /dev/null +++ b/src/src/MovementStrategy/MoveToBorder.java @@ -0,0 +1,27 @@ +package MovementStrategy; + +public class MoveToBorder extends AbstractStrategy{ + @Override + protected boolean IsTargetDestinaion() { + ObjectParameters objParams = GetObjectParameters(); + if (objParams == null) + { + return false; + } + return objParams.RightBorder + GetStep() >= FieldWidth-GetStep() && + objParams.DownBorder + GetStep() >= FieldHeight-GetStep(); + } + @Override + protected void MoveToTarget() { + ObjectParameters objParams = GetObjectParameters(); + if (objParams == null) + { + return; + } + //реализация в правый нижний угол + int x = objParams.RightBorder; + if (x + GetStep() < FieldWidth) MoveRight(); + int y = objParams.DownBorder; + if (y + GetStep() < FieldHeight) MoveDown(); + } +} diff --git a/src/src/MovementStrategy/MoveToCenter.java b/src/src/MovementStrategy/MoveToCenter.java new file mode 100644 index 0000000..f38acff --- /dev/null +++ b/src/src/MovementStrategy/MoveToCenter.java @@ -0,0 +1,48 @@ +package MovementStrategy; + +public class MoveToCenter extends AbstractStrategy{ + @Override + protected boolean IsTargetDestinaion() { + ObjectParameters objParams = GetObjectParameters(); + if (objParams == null) + { + return false; + } + return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2 && + objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 && + objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 && + objParams.ObjectMiddleVertical + GetStep() >= FieldHeight /2; + } + @Override + protected void MoveToTarget() { + ObjectParameters objParams = GetObjectParameters(); + if (objParams == null) + { + return; + } + int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2; + if (Math.abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2; + if (Math.abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } + else + { + MoveDown(); + } + } + } +} \ No newline at end of file diff --git a/src/src/MovementStrategy/MoveableAirplan.java b/src/src/MovementStrategy/MoveableAirplan.java new file mode 100644 index 0000000..a8ad198 --- /dev/null +++ b/src/src/MovementStrategy/MoveableAirplan.java @@ -0,0 +1,47 @@ +package MovementStrategy; + + +import Drawings.CanvasAirbus; +import Drawings.DirectionType; +import Drawings.DrawingAirbus; +import Drawings.DrawingAirplan; + +public class MoveableAirplan implements IMoveableObject{ + private CanvasAirbus canvas = new CanvasAirbus(); + public MoveableAirplan(DrawingAirplan drawningairplan) + { + canvas._drawingAirplan = drawningairplan; + } + @Override + public ObjectParameters GetObjectPosition() { + if (canvas._drawingAirplan == null || canvas._drawingAirplan.EntityAirplan == null || + canvas._drawingAirplan.GetPosX() == null || canvas._drawingAirplan.GetPosY() == null) + { + return null; + } + return new ObjectParameters(canvas._drawingAirplan.GetPosX(), canvas._drawingAirplan.GetPosY(), + canvas._drawingAirplan.GetWidth(), canvas._drawingAirplan.GetHeight()); + } + @Override + public int GetStep() { + return (int)(canvas._drawingAirplan.EntityAirplan.Step); + } + @Override + public boolean TryMoveObject(MovementDirection direction) { + if (canvas._drawingAirplan == null || canvas._drawingAirplan.EntityAirplan == null) + { + return false; + } + return canvas._drawingAirplan.MoveTransport(GetDirectionType(direction)); + } + private static DirectionType GetDirectionType(MovementDirection direction) + { + switch (direction) { + case MovementDirection.Left: return DirectionType.Left; + case MovementDirection.Right: return DirectionType.Right; + case MovementDirection.Up: return DirectionType.Up; + case MovementDirection.Down: return DirectionType.Down; + default: return DirectionType.Unknown; + } + } +} \ No newline at end of file diff --git a/src/src/MovementStrategy/MovementDirection.java b/src/src/MovementStrategy/MovementDirection.java new file mode 100644 index 0000000..65445bb --- /dev/null +++ b/src/src/MovementStrategy/MovementDirection.java @@ -0,0 +1,8 @@ +package MovementStrategy; + +public enum MovementDirection { + Up, + Down, + Left, + Right, +} diff --git a/src/src/MovementStrategy/ObjectParameters.java b/src/src/MovementStrategy/ObjectParameters.java new file mode 100644 index 0000000..b68fe75 --- /dev/null +++ b/src/src/MovementStrategy/ObjectParameters.java @@ -0,0 +1,27 @@ +package MovementStrategy; + +public class ObjectParameters { + private int _x; + private int _y; + private int _width; + private int _height; + public int LeftBorder = _x; + public int TopBorder = _y; + public int RightBorder = _x + _width; + public int DownBorder = _y + _height; + public int ObjectMiddleHorizontal = _x + _width / 2; + public int ObjectMiddleVertical = _y + _height / 2; + public ObjectParameters(int x, int y, int width, int height) + { + _x = x; + _y = y; + _width = width; + _height = height; + LeftBorder = _x; + TopBorder = _y; + RightBorder = _x + _width; + DownBorder = _y + _height; + ObjectMiddleHorizontal = _x + _width / 2; + ObjectMiddleVertical = _y + _height / 2; + } +} diff --git a/src/src/MovementStrategy/StrategyStatus.java b/src/src/MovementStrategy/StrategyStatus.java new file mode 100644 index 0000000..4f087ea --- /dev/null +++ b/src/src/MovementStrategy/StrategyStatus.java @@ -0,0 +1,7 @@ +package MovementStrategy; + +public enum StrategyStatus { + NotInit, + InProgress, + Finish +} -- 2.25.1 From ca418658ac0072e92aa30298ab3d968bba10982f Mon Sep 17 00:00:00 2001 From: Evgehil Date: Sun, 28 Apr 2024 19:46:56 +0400 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/src/Drawings/DrawingAirplan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src/Drawings/DrawingAirplan.java b/src/src/Drawings/DrawingAirplan.java index 28ef503..de6335a 100644 --- a/src/src/Drawings/DrawingAirplan.java +++ b/src/src/Drawings/DrawingAirplan.java @@ -15,7 +15,7 @@ public class DrawingAirplan extends JPanel { public Integer GetPosX() {return _StartPosX;} protected Integer _StartPosY; public Integer GetPosY() {return _StartPosY;} - protected int drawingAirplanWidth = 185; + protected int drawingAirplanWidth = 190; public Integer GetWidth() {return drawingAirplanWidth;} protected int drawingAirplanHeight = 100; public Integer GetHeight() {return drawingAirplanHeight;} -- 2.25.1 From ca0c850f7c477fdc7cd6c142ae1cabcfa1e4787c Mon Sep 17 00:00:00 2001 From: Evgehil Date: Sun, 12 May 2024 19:55:51 +0400 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=2002?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DrawingPortholes.java | 65 --- .../DrawingPortholesCircle.java | 64 ++- .../DrawingPortholesHeart.java | 27 +- .../DrawingPortholesSquare.java | 26 +- .../IDifferentPortholes.java | 6 +- src/src/Drawings/DirectionType.java | 9 - src/src/Drawings/DrawingAirbus.java | 46 +- src/src/Drawings/DrawingAirplan.java | 233 +++++----- src/src/Entities/EntityAirbus.java | 21 +- src/src/Entities/EntityAirplan.java | 25 +- src/src/FormAirbus.java | 408 ++++++++++-------- src/src/Main.java | 3 +- .../MovementStrategy/AbstractStrategy.java | 58 ++- ...{MovementDirection.java => Direction.java} | 4 +- src/src/MovementStrategy/IMoveableObject.java | 3 +- src/src/MovementStrategy/MoveToBorder.java | 42 +- src/src/MovementStrategy/MoveToCenter.java | 27 +- src/src/MovementStrategy/MoveableAirplan.java | 50 +-- .../MovementStrategy/ObjectParameters.java | 22 +- 19 files changed, 574 insertions(+), 565 deletions(-) delete mode 100644 src/src/ChoiseAndDrawingPortholes/DrawingPortholes.java delete mode 100644 src/src/Drawings/DirectionType.java rename src/src/MovementStrategy/{MovementDirection.java => Direction.java} (57%) diff --git a/src/src/ChoiseAndDrawingPortholes/DrawingPortholes.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholes.java deleted file mode 100644 index 478497c..0000000 --- a/src/src/ChoiseAndDrawingPortholes/DrawingPortholes.java +++ /dev/null @@ -1,65 +0,0 @@ -package ChoiseAndDrawingPortholes; - -import java.awt.*; - -public class DrawingPortholes { - private CountPortholes _porthole; - - public CountPortholes getCount() { - return _porthole; - } - - public void SetCount(int count) { - switch (count) { - case 1: // 10 - _porthole = CountPortholes.TenPortholes; - break; - case 2: // 20 - _porthole = CountPortholes.TwentyPortholes; - break; - case 3: // 30 - _porthole = CountPortholes.ThirtyPortholes; - break; - default: - _porthole = CountPortholes.TenPortholes; - break; - } - } - - public void Draw(Graphics2D g, int _startPosx, int _startPoxY) { - g.setColor(Color.BLACK); - if (_porthole == null) { - return; - } - - for (int i = 0; i < 10; ++i) { - g.setColor(Color.cyan); - g.fillOval(_startPosx + 19 + i * 8, _startPoxY + 21, 3, 3); - g.setColor(Color.black); - g.drawOval(_startPosx + 19 + i * 8, _startPoxY + 21, 3, 3); - } - - if (_porthole != CountPortholes.TenPortholes) { - for (int i = 0; i < 5; ++i) { - g.setColor(Color.cyan); - g.fillOval(_startPosx - 15 + i * 5, _startPoxY + 28, 3, 3); - g.setColor(Color.black); - g.drawOval(_startPosx - 15 + i * 5, _startPoxY + 28, 3, 3); - } - for (int i = 0; i < 5; ++i) { - g.setColor(Color.cyan); - g.fillOval(_startPosx + 115 + i * 5, _startPoxY + 28, 3, 3); - g.setColor(Color.black); - g.drawOval(_startPosx + 115 + i * 5, _startPoxY + 28, 3, 3); - } - } - if (_porthole == CountPortholes.ThirtyPortholes) { - for (int i = 0; i < 10; ++i) { - g.setColor(Color.cyan); - g.fillOval(_startPosx + 19 + i * 8, _startPoxY + 37, 3, 3); - g.setColor(Color.black); - g.drawOval(_startPosx + 19 + i * 8, _startPoxY + 37, 3, 3); - } - } - } -} \ No newline at end of file diff --git a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java index 5c33e95..66601c0 100644 --- a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java +++ b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesCircle.java @@ -6,26 +6,52 @@ import Entities.*; public class DrawingPortholesCircle implements IDifferentPortholes { private CountPortholes _porthole; - @Override - public void setNumberPortholes(int numberofportholes) { - for (CountPortholes numofenum : CountPortholes.values()) { - if (numofenum.getNumportholes() == numberofportholes) { - _porthole = numofenum; - return; - } - } - } - - @Override - public CountPortholes getNumberOfPortholes() { + public CountPortholes getCount() { return _porthole; } - @Override - public void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor) { - g.setColor(Color.cyan); - g.fillOval(x, y, 3, 3); - g.setColor(Color.black); - g.drawOval(x, y, 3, 3); + public void SetCount(int count) { + switch (count) { + case 10: + _porthole = CountPortholes.TenPortholes; + break; + case 20: + _porthole = CountPortholes.TwentyPortholes; + break; + case 30: + _porthole = CountPortholes.ThirtyPortholes; + break; + default: + _porthole = CountPortholes.TenPortholes; + break; + } } -} + + protected void drawPortholes(Graphics2D g, int posX, int posY) { + g.setColor(Color.cyan); + g.fillOval(posX, posY, 3, 3); + g.setColor(Color.black); + g.drawOval(posX, posY, 3, 3); + } + + public void Draw(Graphics2D g, int _startPosX, int _startPosY) { + if (_porthole == null) { + return; + } + + for (int i = 0; i < 10; ++i) { + drawPortholes(g, _startPosX + 19 + i * 8, _startPosY + 21); + } + if (_porthole != CountPortholes.TenPortholes) { + for (int i = 0; i < 5; ++i) { + drawPortholes(g, _startPosX - 15 + i * 5, _startPosY + 28); + drawPortholes(g, _startPosX + 115 + i * 5, _startPosY + 28); + } + } + if (_porthole == CountPortholes.ThirtyPortholes) { + for (int i = 0; i < 10; ++i) { + drawPortholes(g, _startPosX + 19 + i * 8, _startPosY + 37); + } + } + } +} \ No newline at end of file diff --git a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java index 94e78b4..556f244 100644 --- a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java +++ b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesHeart.java @@ -2,32 +2,13 @@ package ChoiseAndDrawingPortholes; import java.awt.*; -public class DrawingPortholesHeart implements IDifferentPortholes { - private CountPortholes _porthole; - - @Override - public void setNumberPortholes(int numberofportholes) { - for (CountPortholes numofenum : CountPortholes.values()) { - if (numofenum.getNumportholes() == numberofportholes) { - _porthole = numofenum; - return; - } - } - } - - @Override - public CountPortholes getNumberOfPortholes() { - return _porthole; - } - - @Override - public void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor) { - int[] HeartX = {x + 2, x, x, x + 1, x + 2, x + 3, x + 5, x + 5}; - int[] HeartY = {y + 4, y + 2, y, y, y + 1, y, y, y + 2}; +public class DrawingPortholesHeart extends DrawingPortholesCircle { + protected void drawPortholes(Graphics2D g, int posX, int posY) { + int[] HeartX = {posX + 2, posX, posX, posX + 1, posX + 2, posX + 3, posX + 5, posX + 5}; + int[] HeartY = {posY + 4, posY + 2, posY, posY, posY + 1, posY, posY, posY + 2}; g.setColor(Color.cyan); g.fillPolygon(HeartX, HeartY, HeartX.length); g.setColor(Color.black); g.drawPolygon(HeartX, HeartY, HeartX.length); - } } diff --git a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java index 3b3cc6d..60b3e97 100644 --- a/src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java +++ b/src/src/ChoiseAndDrawingPortholes/DrawingPortholesSquare.java @@ -2,29 +2,11 @@ package ChoiseAndDrawingPortholes; import java.awt.*; -public class DrawingPortholesSquare implements IDifferentPortholes { - private CountPortholes _porthole; - - @Override - public void setNumberPortholes(int numberofportholes) { - for (CountPortholes numofenum : CountPortholes.values()) { - if (numofenum.getNumportholes() == numberofportholes) { - _porthole = numofenum; - return; - } - } - } - - @Override - public CountPortholes getNumberOfPortholes() { - return _porthole; - } - - @Override - public void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor) { +public class DrawingPortholesSquare extends DrawingPortholesCircle { + protected void drawPortholes(Graphics2D g, int posX, int posY){ g.setColor(Color.cyan); - g.fillRect(x, y, 3, 3); + g.fillRect(posX, posY, 3, 3); g.setColor(Color.black); - g.drawRect(x, y, 3, 3); + g.drawRect(posX, posY, 3, 3); } } diff --git a/src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java b/src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java index 564a0b4..3161db1 100644 --- a/src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java +++ b/src/src/ChoiseAndDrawingPortholes/IDifferentPortholes.java @@ -3,7 +3,7 @@ package ChoiseAndDrawingPortholes; import java.awt.*; public interface IDifferentPortholes { - void setNumberPortholes(int numberofportholes); - CountPortholes getNumberOfPortholes(); - void DrawPorthole(Graphics2D g, int x, int y, int width, int height, Color bodyColor); + public CountPortholes getCount(); + public void SetCount (int count); + public void Draw (Graphics2D g, int _startPosX, int _startPoxY); } diff --git a/src/src/Drawings/DirectionType.java b/src/src/Drawings/DirectionType.java deleted file mode 100644 index ba1c998..0000000 --- a/src/src/Drawings/DirectionType.java +++ /dev/null @@ -1,9 +0,0 @@ -package Drawings; - -public enum DirectionType { - Up, - Down, - Left, - Right, - Unknown -} \ No newline at end of file diff --git a/src/src/Drawings/DrawingAirbus.java b/src/src/Drawings/DrawingAirbus.java index 849f17d..251ce29 100644 --- a/src/src/Drawings/DrawingAirbus.java +++ b/src/src/Drawings/DrawingAirbus.java @@ -1,40 +1,42 @@ package Drawings; -import Entities.*; +import Drawings.DrawingAirplan; +import Entities.EntityAirbus; + import java.awt.*; public class DrawingAirbus extends DrawingAirplan { - public DrawingAirbus(int speed, double weight, Color bodycolor, Color additionalcolor, boolean isCompartment, boolean isAdditionalEngine) { - EntityAirplan = new EntityAirbus(speed, weight, bodycolor, additionalcolor, isCompartment, isAdditionalEngine); - SetAmountAndTypePortholes(); + public DrawingAirbus(int speed, int weight, Color bodyColor, int countPortholes, Color additionalColor, boolean isCompartment, boolean isAdditionalEngine, int width, int height) { + super(speed, weight, bodyColor, countPortholes, width, height); + if (entityAirplan != null) { + entityAirplan = new EntityAirbus(speed, weight, bodyColor, additionalColor, isCompartment, isAdditionalEngine); + } } @Override public void DrawTransport(Graphics2D g) { - if (EntityAirplan == null || !(EntityAirplan instanceof EntityAirbus airbus) - || _StartPosX == null || _StartPosY == null) + if (entityAirplan == null) { return; - g.setColor(Color.BLACK); - super.DrawTransport(g); - -//Пассажирсакий доп. отсек - if (EntityAirbus.getIsCompartment()) - { - g.setColor(EntityAirbus.getAdditionalColor()); - g.drawArc(_StartPosX + 60, _StartPosY + 28, 115, 45, 0, 180); - g.fillArc(_StartPosX + 60, _StartPosY + 28, 115, 45, 0, 180); } + + Color additionalColor = ((EntityAirbus) entityAirplan).getAdditionalColor(); + //Пассажирсакий доп. отсек + if (((EntityAirbus) entityAirplan).IsCompartment()) { + g.setColor(additionalColor); + g.drawArc(_startPosX + 60, _startPosY + 28, 115, 45, 0, 180); + g.fillArc(_startPosX + 60, _startPosY + 28, 115, 45, 0, 180); + } + super.DrawTransport(g); // Доп. двигатели - if (EntityAirbus.getIsAdditionalEngine()) - { - g.drawLine(_StartPosX + 95, _StartPosY + 68, _StartPosX + 95, _StartPosY + 75); - g.setColor(EntityAirbus.getAdditionalColor()); - int[] xPolygon = { _StartPosX + 83, _StartPosX + 103, _StartPosX + 103, _StartPosX + 83, _StartPosX + 83}; - int[] yPolygon = {_StartPosY + 78, _StartPosY + 73, _StartPosY + 93, _StartPosY + 88, _StartPosY + 78}; + if (((EntityAirbus) entityAirplan).IsAdditionalEngine()) { + g.drawLine(_startPosX + 95, _startPosY + 68, _startPosX + 95, _startPosY + 75); + g.setColor(additionalColor); + int[] xPolygon = {_startPosX + 83, _startPosX + 103, _startPosX + 103, _startPosX + 83, _startPosX + 83}; + int[] yPolygon = {_startPosY + 78, _startPosY + 73, _startPosY + 93, _startPosY + 88, _startPosY + 78}; g.drawPolygon(xPolygon, yPolygon, xPolygon.length); g.fillPolygon(xPolygon, yPolygon, xPolygon.length); } } -} +} \ No newline at end of file diff --git a/src/src/Drawings/DrawingAirplan.java b/src/src/Drawings/DrawingAirplan.java index de6335a..2bd8b1b 100644 --- a/src/src/Drawings/DrawingAirplan.java +++ b/src/src/Drawings/DrawingAirplan.java @@ -2,155 +2,166 @@ package Drawings; import Entities.*; import ChoiseAndDrawingPortholes.*; +import MovementStrategy.Direction; + import javax.swing.*; import java.awt.*; import java.util.Random; -public class DrawingAirplan extends JPanel { - public Entities.EntityAirplan EntityAirplan; - public IDifferentPortholes drawingPortholes; - private Integer picture_width; - private Integer picture_height; - protected Integer _StartPosX; - public Integer GetPosX() {return _StartPosX;} - protected Integer _StartPosY; - public Integer GetPosY() {return _StartPosY;} - protected int drawingAirplanWidth = 190; - public Integer GetWidth() {return drawingAirplanWidth;} - protected int drawingAirplanHeight = 100; - public Integer GetHeight() {return drawingAirplanHeight;} +public class DrawingAirplan { - protected DrawingAirplan() { - picture_width = null; - picture_height = null; - _StartPosX = null; - _StartPosY = null; + public EntityAirplan entityAirplan; + public IDifferentPortholes _portholes; + private int _pictureWidth; + private int _pictureHeight; + protected int _startPosX; + protected int _startPosY; + private int _airbusWidth = 210; + private int _airbusHeight = 100; + + public int GetPosX() { + return _startPosX; } - protected void SetAmountAndTypePortholes() { + public int GetPosY() { + return _startPosY; + } + + public int GetWidth() { + return _airbusWidth; + } + + public int GetHeight() { + return _airbusHeight; + } + + public DrawingAirplan(int speed, float weight, Color bodyColor, int countPortholes, int width, int height) { + if (width < _airbusHeight || height < _airbusWidth) + return; + _pictureWidth = width; + _pictureHeight = height; + entityAirplan = new EntityAirplan(speed, weight, bodyColor); + Random random = new Random(); - int numberofportholes = random.nextInt(0,3); - switch (numberofportholes) { + switch (random.nextInt(0, 3)) { + case 0: + _portholes = new DrawingPortholesCircle(); + break; case 1: - drawingPortholes = new DrawingPortholesCircle(); + _portholes = new DrawingPortholesHeart(); break; case 2: - drawingPortholes = new DrawingPortholesSquare(); - break; - case 3: - drawingPortholes = new DrawingPortholesHeart(); + _portholes = new DrawingPortholesSquare(); break; default: - numberofportholes = 0; + _portholes = new DrawingPortholesCircle(); break; } - drawingPortholes.setNumberPortholes(numberofportholes); + _portholes.SetCount(countPortholes); } - public DrawingAirplan(int speed, double weight, Color bodycolor) { - super(); - EntityAirplan = new EntityAirplan(speed, weight, bodycolor); - SetAmountAndTypePortholes(); - } - - public boolean SetPictureSize(int width, int height) { - if (width < drawingAirplanWidth || height < drawingAirplanHeight) return false; - picture_width = width; - picture_height = height; - if (_StartPosX != null || _StartPosY != null) { - if (_StartPosX + drawingAirplanWidth > picture_width) - { - _StartPosX = _StartPosX - (_StartPosX + drawingAirplanWidth - picture_width); - } - else if (_StartPosX < 0) _StartPosX = 0; - if (_StartPosY + drawingAirplanHeight > picture_height) - { - _StartPosY = _StartPosY - (_StartPosY + drawingAirplanHeight - picture_height); - } - else if (_StartPosY < 0) _StartPosY = 0; - } - return true; - } public void SetPosition(int x, int y) { - if (!(picture_width != null && picture_height != null)) return; - if (x + drawingAirplanWidth > picture_width) - { - _StartPosX = x - (x + drawingAirplanWidth - picture_width); + if (x > _pictureWidth || y > _pictureHeight || x < 0 || y < 0) { + _startPosX = 0; + _startPosY = 0; + } else { + _startPosX = x; + _startPosY = y; } - else if (x < 0) _StartPosX = 0; - else _StartPosX = x; - if (y + drawingAirplanHeight > picture_height) - { - _StartPosY = y - (y + drawingAirplanHeight - picture_height); - } - else if (y < 0) _StartPosY = 0; - else _StartPosY = y; } - public boolean MoveTransport(DirectionType direction) { - if (EntityAirplan == null || _StartPosX == null || _StartPosY == null) return false; + public boolean CanMove(Direction direction) { + if (entityAirplan == null) { + return false; + } switch (direction) { - case DirectionType.Left: - if (_StartPosX - EntityAirplan.Step > 0) { - _StartPosX -= (int)EntityAirplan.Step; - } - return true; - case DirectionType.Up: - if (_StartPosY - EntityAirplan.Step > 0) - { - _StartPosY -= (int)EntityAirplan.Step; - } - return true; - case DirectionType.Right: - if (_StartPosX + drawingAirplanWidth + (int)EntityAirplan.Step < picture_width - EntityAirplan.Step) - { - _StartPosX += (int)EntityAirplan.Step; - } - return true; - case DirectionType.Down: - if (_StartPosY + drawingAirplanHeight + (int)EntityAirplan.Step < picture_height - EntityAirplan.Step) - { - _StartPosY += (int)EntityAirplan.Step; - } - return true; + case Left: + return _startPosX - entityAirplan.Step > 5; + case Right: + return _startPosX + _airbusWidth + entityAirplan.Step < _pictureWidth; + case Up: + return _startPosY - entityAirplan.Step > 0; + case Down: + return _startPosY + _airbusHeight + entityAirplan.Step < _pictureHeight; default: return false; } } - public void DrawTransport(Graphics2D g) { - - if (EntityAirplan == null) { + public void MoveTransport(Direction direction) { + if (!CanMove(direction) || entityAirplan == null) { return; } + switch (direction) { + case Left: + _startPosX -= entityAirplan.Step; + break; + case Right: + _startPosX += entityAirplan.Step; + break; + case Up: + _startPosY -= entityAirplan.Step; + break; + case Down: + _startPosY += entityAirplan.Step; + break; + } + } + + public void DrawTransport(Graphics2D g) { + + if (entityAirplan == null) { + return; + } + + g.setColor(Color.BLACK); //Тело - g.drawRect(_StartPosX + 5, _StartPosY + 50, 170, 30); - g.drawArc(_StartPosX - 5, _StartPosY + 50, 20, 30, 90, 180); + g.setColor(entityAirplan.getBodyColor()); + g.fillRect(_startPosX + 5, _startPosY + 50, 170, 30); + g.fillArc(_startPosX - 5, _startPosY + 50, 20, 30, 90, 180); + g.setColor(Color.BLACK); + g.drawRect(_startPosX + 5, _startPosY + 50, 170, 30); + g.drawArc(_startPosX - 5, _startPosY + 50, 20, 30, 90, 180); + + _portholes.Draw(g, _startPosX + 30, _startPosY + 34); //Заднее крыло - g.drawLine(_StartPosX, _StartPosY, _StartPosX + 50, _StartPosY + 50); - g.drawLine(_StartPosX, _StartPosY, _StartPosX, _StartPosY + 52); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 50, _startPosX, _startPosX}, new int[]{_startPosY + 50, _startPosY, _startPosY + 50}, 3); + g.setColor(entityAirplan.getBodyColor()); + g.fillPolygon(new int[]{_startPosX + 50, _startPosX, _startPosX}, new int[]{_startPosY + 50, _startPosY, _startPosY + 50}, 3); //Заднее боковые крылья - g.drawOval(_StartPosX - 7, _StartPosY + 45, 30, 8); - g.fillOval(_StartPosX - 7, _StartPosY + 45, 30, 8); + g.setColor(Color.BLACK); + g.drawOval(_startPosX - 7, _startPosY + 45, 30, 8); + g.setColor(entityAirplan.getBodyColor()); + g.fillOval(_startPosX - 7, _startPosY + 45, 30, 8); //Нос - g.drawLine(_StartPosX + 175, _StartPosY + 50, _StartPosX + 200, _StartPosY + 65); - g.drawLine(_StartPosX + 200, _StartPosY + 65, _StartPosX + 175, _StartPosY + 80); - g.drawLine(_StartPosX + 175, _StartPosY + 50, _StartPosX + 175, _StartPosY + 80); - g.drawLine(_StartPosX + 175, _StartPosY + 65, _StartPosX + 200, _StartPosY + 65); + g.setColor(Color.BLACK); + g.drawPolygon(new int[]{_startPosX + 175, _startPosX + 200, _startPosX + 175}, new int[]{_startPosY + 50, _startPosY + 65, _startPosY + 65}, 3); + g.drawPolygon(new int[]{_startPosX + 175, _startPosX + 200, _startPosX + 175}, new int[]{_startPosY + 80, _startPosY + 65, _startPosY + 65}, 3); + g.setColor(entityAirplan.getBodyColor()); + g.fillPolygon(new int[]{_startPosX + 175, _startPosX + 200, _startPosX + 175}, new int[]{_startPosY + 50, _startPosY + 65, _startPosY + 65}, 3); + g.fillPolygon(new int[]{_startPosX + 175, _startPosX + 200, _startPosX + 175}, new int[]{_startPosY + 80, _startPosY + 65, _startPosY + 65}, 3); //Крылья - g.drawArc(_StartPosX + 49, _StartPosY + 62, 5, 5, 90, 180); - g.drawLine(_StartPosX + 51, _StartPosY + 62, _StartPosX + 140, _StartPosY + 62); - g.drawArc(_StartPosX + 137, _StartPosY + 62, 5, 5, 2790, 180); - g.drawLine(_StartPosX + 51, _StartPosY + 67, _StartPosX + 140, _StartPosY + 67); + g.setColor(Color.BLACK); + g.drawArc(_startPosX + 49, _startPosY + 62, 5, 5, 90, 180); + g.drawLine(_startPosX + 51, _startPosY + 62, _startPosX + 140, _startPosY + 62); + g.drawArc(_startPosX + 137, _startPosY + 62, 5, 5, 2790, 180); + g.drawLine(_startPosX + 51, _startPosY + 67, _startPosX + 140, _startPosY + 67); //Задние шасси - g.drawLine(_StartPosX + 55, _StartPosY + 80, _StartPosX + 55, _StartPosY + 90); - g.drawOval(_StartPosX + 47, _StartPosY + 90, 5, 5); - g.drawOval(_StartPosX + 57, _StartPosY + 90, 5, 5); + g.drawLine(_startPosX + 55, _startPosY + 80, _startPosX + 55, _startPosY + 90); + g.drawOval(_startPosX + 47, _startPosY + 90, 5, 5); + g.drawOval(_startPosX + 57, _startPosY + 90, 5, 5); + g.setColor(entityAirplan.getBodyColor()); + g.fillOval(_startPosX + 47, _startPosY + 90, 5, 5); + g.fillOval(_startPosX + 57, _startPosY + 90, 5, 5); //Передние шасси - g.drawLine(_StartPosX + 165, _StartPosY + 80, _StartPosX + 165, _StartPosY + 90); - g.drawOval(_StartPosX + 163, _StartPosY + 91, 5, 5); + g.setColor(Color.BLACK); + g.drawLine(_startPosX + 165, _startPosY + 80, _startPosX + 165, _startPosY + 90); + g.drawOval(_startPosX + 163, _startPosY + 91, 5, 5); + g.setColor(entityAirplan.getBodyColor()); + g.fillOval(_startPosX + 163, _startPosY + 91, 5, 5); } } diff --git a/src/src/Entities/EntityAirbus.java b/src/src/Entities/EntityAirbus.java index b13c4e3..cb9c48c 100644 --- a/src/src/Entities/EntityAirbus.java +++ b/src/src/Entities/EntityAirbus.java @@ -2,19 +2,18 @@ package Entities; import java.awt.*; public class EntityAirbus extends EntityAirplan { + private Color AdditionalColor; + private boolean IsCompartment; + private boolean IsAdditionalEngine; - private static Color AdditionalColor; - public static Color getAdditionalColor() {return AdditionalColor;} - private static boolean IsCompartment; - public static boolean getIsCompartment() {return IsCompartment;} - private static boolean IsAdditionalEngine; - public static boolean getIsAdditionalEngine() {return IsAdditionalEngine;} - - public EntityAirbus(int speed, double weight, Color bodycolor, Color additionalcolor, boolean isCompartment, boolean isAdditionalEngine) - { - super(speed,weight,bodycolor); - AdditionalColor = additionalcolor; + public EntityAirbus(int speed, float weight, Color bodyColor, Color additionalColor, boolean isCompartment, boolean isAdditionalEngine) { + super(speed, weight, bodyColor); + AdditionalColor = additionalColor; IsCompartment = isCompartment; IsAdditionalEngine = isAdditionalEngine; } + + public Color getAdditionalColor() { return AdditionalColor; } + public boolean IsCompartment() { return IsCompartment; } + public boolean IsAdditionalEngine() { return IsAdditionalEngine; } } diff --git a/src/src/Entities/EntityAirplan.java b/src/src/Entities/EntityAirplan.java index 7e8d1e0..4207fce 100644 --- a/src/src/Entities/EntityAirplan.java +++ b/src/src/Entities/EntityAirplan.java @@ -3,16 +3,27 @@ package Entities; import java.awt.*; public class EntityAirplan { private int Speed; - private double Weight; + private float Weight; private Color BodyColor; - public Color getBodyColor() {return BodyColor;} - public double Step; - public EntityAirplan(int speed, double weight, Color bodycolor) + public float Step; + + public int getSpeed() { + return Speed; + } + public float getWeight() { + return Weight; + } + public Color getBodyColor() { + return BodyColor; + } + + + public EntityAirplan(int speed, float weight, Color bodyColor) { - Speed = speed; Weight = weight; - BodyColor = bodycolor; - Step = Speed * 100 / Weight; + Speed = speed; + BodyColor = bodyColor; + Step = Speed * 200 / (int) Weight; } } diff --git a/src/src/FormAirbus.java b/src/src/FormAirbus.java index fbc488e..8006d4b 100644 --- a/src/src/FormAirbus.java +++ b/src/src/FormAirbus.java @@ -1,206 +1,250 @@ -import Drawings.CanvasAirbus; -import Drawings.DirectionType; import Drawings.DrawingAirbus; import Drawings.DrawingAirplan; -import MovementStrategy.*; - +import MovementStrategy.AbstractStrategy; import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; +import java.awt.event.*; import java.util.Random; +import MovementStrategy.*; public class FormAirbus extends JFrame { - private String title; - private Dimension dimension; - private int Width, Height; - public CanvasAirbus canvasAirbus = new CanvasAirbus(); - private JButton CreateButton = new JButton("Create airbus");; - private JButton CreateAirplanButton = new JButton("Create airplan"); - private JButton UpButton = new JButton(); - private JButton DownButton = new JButton();; - private JButton LeftButton = new JButton();; - private JButton RightButton = new JButton(); - private AbstractStrategy _strategy; - private JComboBox ComboBoxStrategy = new JComboBox(new String[]{"К центру", "К краю"}); - private JButton ButtonStrategy = new JButton("Шаг"); - public FormAirbus(String title, Dimension dimension) { - this.title = title; - this.dimension = dimension; + private int width; + private int height; + private DrawingAirplan _drawingAirbus; + private AbstractStrategy _abstractStrategy; + private Canvas canvas; + + // выбор кол-ва иллюминаторов + JLabel labelCount; + private JTextField fieldCount; + + // выбор стратегии + JLabel labelStrategy; + JComboBox comboBoxStrategy; + JButton buttonStrategy; + + private JButton buttonCreateAirbus; + private JButton buttonCreatePlane; + private JButton buttonUp; + private JButton buttonDown; + private JButton buttonRight; + private JButton buttonLeft; + + public FormAirbus() { + super("Создание самолёта"); + InitializeComponent(); + setVisible(true); } - private void CreateObject(String typeOfClass) { - int StartPositionX = (int)(Math.random() * 90 + 10); - int StartPositionY = (int)(Math.random() * 90 + 10); - int speed = (int)(Math.random() * 300 + 100); - double weight = (double)(Math.random() * 3000 + 1000); - Color bodyColor = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0)); - switch (typeOfClass) { - case "DrawingAirplan": - canvasAirbus._drawingAirplan = new DrawingAirplan(speed, weight, bodyColor); - canvasAirbus._drawingAirplan.SetPictureSize(Width, Height); - canvasAirbus._drawingAirplan.SetPosition(StartPositionX, StartPositionY); - canvasAirbus.repaint(); - break; - case "DrawingAirbus": - Color additionalColor = new Color((int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0),(int)(Math.random() * 255 + 0));; - boolean IsCompartment = new Random().nextBoolean(); - boolean isAdditionalEngine = new Random().nextBoolean();; - canvasAirbus._drawingAirplan = new DrawingAirbus(speed, weight, bodyColor, additionalColor, IsCompartment , isAdditionalEngine); - canvasAirbus._drawingAirplan.SetPictureSize(Width, Height); - canvasAirbus._drawingAirplan.SetPosition(StartPositionX, StartPositionY); - canvasAirbus.repaint(); - break; - default: return; - } - _strategy = null; - ComboBoxStrategy.setEnabled(true); - } + private void InitializeComponent() { + canvas = new Canvas(); - public void Init() { - setTitle(title); - setMinimumSize(dimension); + labelCount = new JLabel("Введите число иллюминаторов:"); + fieldCount = new JTextField(); + + labelStrategy = new JLabel("Шаг стратегии:"); + comboBoxStrategy = new JComboBox(new String[]{"К центру", "К краю"}); + buttonStrategy = new JButton("Выбрать стратегию"); + buttonStrategy.setMargin(new Insets(0, 0, 0, 0)); + + buttonCreateAirbus = new JButton("Создать аэробус"); + buttonCreateAirbus.setMargin(new Insets(0, 0, 0, 0)); + + buttonCreatePlane = new JButton("Создать самолёт"); + buttonCreatePlane.setMargin(new Insets(0, 0, 0, 0)); + + buttonUp = new JButton(); + buttonUp.setName("up"); + buttonUp.setIcon(new ImageIcon("images\\KeyUp.png")); + + buttonRight = new JButton(); + buttonRight.setName("right"); + buttonRight.setIcon(new ImageIcon("images\\KeyRight.png")); + + buttonLeft = new JButton(); + buttonLeft.setName("left"); + buttonLeft.setIcon(new ImageIcon("images\\KeyLeft.png")); + + buttonDown = new JButton(); + buttonDown.setName("down"); + buttonDown.setIcon(new ImageIcon("images\\KeyDown.png")); + + setSize(800, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - Width = getWidth() - 15; - Height = getHeight() - 35; - _strategy = null; - CreateButton.setName("CREATE"); - CreateAirplanButton.setName("CREATESAIRPLANBUTTON"); - Icon iconUp = new ImageIcon("src\\image\\up.jpg"); - UpButton.setIcon(iconUp); - UpButton.setName("UP"); - DownButton.setName("DOWN"); - Icon iconDown = new ImageIcon("src\\image\\down.jpg"); - DownButton.setIcon(iconDown); - LeftButton.setName("LEFT"); - Icon iconLeft = new ImageIcon("src\\image\\left.jpg"); - LeftButton.setIcon(iconLeft); - RightButton.setName("RIGHT"); - Icon iconRight = new ImageIcon("src\\image\\right.jpg"); - RightButton.setIcon(iconRight); + setLayout(null); - CreateButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - CreateObject("DrawingAirbus"); + buttonCreateAirbus.setBounds(12, 355, 146, 33); + buttonCreatePlane.setBounds(182, 355, 146, 33); + + labelCount.setBounds(42, 405, 240, 20); + fieldCount.setBounds(240, 407, 48, 20); + + labelStrategy.setBounds(630, 20, 146, 33); + comboBoxStrategy.setBounds(630, 50, 146, 20); + buttonStrategy.setBounds(630, 80, 146, 33); + + buttonUp.setBounds(679, 313, 48, 44); + buttonRight.setBounds(728, 358, 48, 44); + buttonLeft.setBounds(630, 358, 48, 44); + buttonDown.setBounds(679, 358, 48, 44); + labelCount.setBounds(12, 405, 240, 20); + fieldCount.setBounds(210, 407, 48, 20); + canvas.setBounds(0, 0, 790, 460); + + add(buttonCreateAirbus); + add(buttonCreatePlane); + add(labelCount); + add(fieldCount); + add(labelStrategy); + add(comboBoxStrategy); + add(buttonStrategy); + add(buttonUp); + add(buttonRight); + add(buttonDown); + add(buttonLeft); + add(labelCount); + add(fieldCount); + add(canvas); + + // логика формы + buttonCreateAirbus.addActionListener(buttonCreateAirbusListener); + buttonCreatePlane.addActionListener(buttonCreatePlaneListener); + buttonStrategy.addActionListener(buttonStrategyListener); + buttonUp.addActionListener(buttonsMoveListener); + buttonRight.addActionListener(buttonsMoveListener); + buttonDown.addActionListener(buttonsMoveListener); + buttonLeft.addActionListener(buttonsMoveListener); + } + + ActionListener buttonCreateAirbusListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + int countPortholes; + try { + countPortholes = Integer.parseInt(fieldCount.getText()); + } catch (Exception ex) { + countPortholes = 0; } - }); - - CreateAirplanButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - CreateObject("DrawingAirplan"); + if (countPortholes != 10 && countPortholes != 20 && countPortholes != 30) { + JOptionPane.showMessageDialog(null, "Число должно быть равно 10, 20 или 30.\nКол-во иллюминаторов приравнено к 10"); + countPortholes = 10; } - }); - ButtonStrategy.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (canvasAirbus._drawingAirplan == null) return; - if (ComboBoxStrategy.isEnabled()) - { - int index = ComboBoxStrategy.getSelectedIndex(); - switch(index) - { - case 0: - _strategy = new MoveToCenter(); - break; - case 1: - _strategy = new MoveToBorder(); - break; - default: - _strategy = null; - break; - }; - if (_strategy == null) - { - return; - } - _strategy.SetData(new MoveableAirplan(canvasAirbus._drawingAirplan), Width, Height); + Random rand = new Random(); + _drawingAirbus = new DrawingAirplan(rand.nextInt(200) + 100, rand.nextInt(2000) + 1000, + new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256)), + countPortholes, + canvas.getWidth(), canvas.getHeight()); + + _drawingAirbus.SetPosition(rand.nextInt(100) + 10, rand.nextInt(100) + 10); + comboBoxStrategy.setEnabled(true); + canvas.repaint(); + } + }; + + ActionListener buttonCreatePlaneListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + int countPortholes; + try { + countPortholes = Integer.parseInt(fieldCount.getText()); + } catch (Exception ex) { + countPortholes = 0; + } + if (countPortholes != 10 && countPortholes != 20 && countPortholes != 30) { + JOptionPane.showMessageDialog(null, "Число должно быть равно 10, 20 или 30.\nКол-во иллюминаторов приравнено к 10"); + countPortholes = 10; + } + + Random rand = new Random(); + _drawingAirbus = new DrawingAirbus(rand.nextInt(200) + 100, rand.nextInt(2000) + 1000, + new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256)), + countPortholes, + new Color(rand.nextInt(256), rand.nextInt(256), rand.nextInt(256)), + rand.nextBoolean(), rand.nextBoolean(), + canvas.getWidth(), canvas.getHeight()); + + _drawingAirbus.SetPosition(rand.nextInt(100) + 10, rand.nextInt(100) + 10); + comboBoxStrategy.setEnabled(true); + canvas.repaint(); + } + }; + + ActionListener buttonStrategyListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_drawingAirbus == null) { + return; + } + if (comboBoxStrategy.isEnabled()) { + + switch (comboBoxStrategy.getSelectedIndex()) { + case 0: + _abstractStrategy = new MoveToCenter(); + break; + case 1: + _abstractStrategy = new MoveToBorder(); + break; + default: + _abstractStrategy = null; + break; } - if (_strategy == null) - { + ; + if (_abstractStrategy == null) { return; } - ComboBoxStrategy.setEnabled(false); - _strategy.MakeStep(); - if (_strategy.GetStatus() == StrategyStatus.Finish) - { - ComboBoxStrategy.setEnabled(true); - _strategy = null; - } + _abstractStrategy.SetData(new MoveableAirplan(_drawingAirbus), canvas.getWidth(), canvas.getHeight()); + comboBoxStrategy.setEnabled(false); } - }); + if (_abstractStrategy == null) { + return; + } + _abstractStrategy.MakeStep(); + if (_abstractStrategy.GetStatus() == StrategyStatus.Finish) { + comboBoxStrategy.setEnabled(true); + _abstractStrategy = null; + } + canvas.repaint(); + } + }; - ActionListener actionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent event) { - if (canvasAirbus._drawingAirplan == null) return; - boolean result = false; - switch ((((JButton)(event.getSource())).getName())) { - case "UP": - result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Up); - break; - case "DOWN": - result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Down); - break; - case "LEFT": - result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Left); - break; - case "RIGHT": - result = canvasAirbus._drawingAirplan.MoveTransport(DirectionType.Right); - break; - } - if (result) { - canvasAirbus.repaint(); - } + ActionListener buttonsMoveListener = new ActionListener() { + // реакция на нажатие + public void actionPerformed(ActionEvent e) { + if (_drawingAirbus == null) { + return; } - }; - UpButton.addActionListener(actionListener); - DownButton.addActionListener(actionListener); - LeftButton.addActionListener(actionListener); - RightButton.addActionListener(actionListener); + String command = ((JButton) (e.getSource())).getName(); + switch (command) { + case "up": + _drawingAirbus.MoveTransport(Direction.Up); + break; + case "down": + _drawingAirbus.MoveTransport(Direction.Down); + break; + case "right": + _drawingAirbus.MoveTransport(Direction.Right); + break; + case "left": + _drawingAirbus.MoveTransport(Direction.Left); + break; + } + canvas.repaint(); + } + }; - setSize(dimension.width,dimension.height); - setLayout(null); - canvasAirbus.setBounds(0,0, getWidth(), getHeight()); - CreateButton.setBounds(10, getHeight() - 90, 125, 40); - CreateAirplanButton.setBounds(160, getHeight() - 90, 125, 40); - UpButton.setBounds(getWidth() - 140, getHeight() - 160, 50, 50); - DownButton.setBounds(getWidth() - 140, getHeight() - 100, 50, 50); - RightButton.setBounds(getWidth() - 80, getHeight() - 100, 50, 50); - LeftButton.setBounds(getWidth() - 200, getHeight() - 100, 50, 50); - ComboBoxStrategy.setBounds(getWidth() - 170, 10, 140, 35); - ButtonStrategy.setBounds(getWidth() - 130, 55, 100, 25); - add(CreateButton); - add(CreateAirplanButton); - add(UpButton); - add(DownButton); - add(RightButton); - add(LeftButton); - add(ComboBoxStrategy); - add(ButtonStrategy); - add(canvasAirbus); - setVisible(true); - //обработка события изменения размеров окна - addComponentListener(new ComponentAdapter() { - public void componentResized(ComponentEvent e) { - Width = getWidth() - 15; - Height = getHeight() - 35; - if (canvasAirbus._drawingAirplan != null) - canvasAirbus._drawingAirplan.SetPictureSize(Width, Height); - canvasAirbus.setBounds(0,0, getWidth(), getHeight()); - CreateButton.setBounds(10, getHeight() - 90, 125, 40); - CreateAirplanButton.setBounds(160, getHeight() - 90, 125, 40); - UpButton.setBounds(getWidth() - 140, getHeight() - 160, 50, 50); - DownButton.setBounds(getWidth() - 140, getHeight() - 100, 50, 50); - RightButton.setBounds(getWidth() - 80, getHeight() - 100, 50, 50); - LeftButton.setBounds(getWidth() - 200, getHeight() - 100, 50, 50); - ComboBoxStrategy.setBounds(getWidth() - 170, 10, 140, 35); - ButtonStrategy.setBounds(getWidth() - 130, 55, 100, 25); + class Canvas extends JComponent { + public Canvas() { + } + + public void paintComponent(Graphics g) { + if (_drawingAirbus == null) { + return; } - }); + super.paintComponents(g); + Graphics2D g2d = (Graphics2D) g; + _drawingAirbus.DrawTransport(g2d); + super.repaint(); + } } -} +} \ No newline at end of file diff --git a/src/src/Main.java b/src/src/Main.java index 2871a6b..c61bce0 100644 --- a/src/src/Main.java +++ b/src/src/Main.java @@ -2,7 +2,6 @@ import java.awt.*; public class Main { public static void main(String[] args) { - FormAirbus form = new FormAirbus("Самолёт", new Dimension(500, 500)); - form.Init(); + new FormAirbus(); } } \ No newline at end of file diff --git a/src/src/MovementStrategy/AbstractStrategy.java b/src/src/MovementStrategy/AbstractStrategy.java index 1ed97d2..c9f62a0 100644 --- a/src/src/MovementStrategy/AbstractStrategy.java +++ b/src/src/MovementStrategy/AbstractStrategy.java @@ -3,54 +3,74 @@ package MovementStrategy; public abstract class AbstractStrategy { private IMoveableObject _moveableObject; private StrategyStatus _state = StrategyStatus.NotInit; - public int FieldWidth; - public int FieldHeight; - public StrategyStatus GetStatus() {return _state;} - public void SetData(IMoveableObject moveableObjects, int width, int height) + protected int FieldWidth; + protected int FieldHeight; + public StrategyStatus GetStatus() { return _state; } + + // Изменить статус, установить поля + public void SetData(IMoveableObject moveableObject, int width, int height) { - if (moveableObjects == null) + if (moveableObject == null) { _state = StrategyStatus.NotInit; return; } _state = StrategyStatus.InProgress; - _moveableObject = moveableObjects; + _moveableObject = moveableObject; FieldWidth = width; FieldHeight = height; } + + // сделать шаг public void MakeStep() { - if (_state != StrategyStatus.InProgress) return; - if (IsTargetDestinaion()) + if (_state != StrategyStatus.InProgress) + { + return; + } + if (IsTargetDestination()) { _state = StrategyStatus.Finish; return; } MoveToTarget(); } - protected boolean MoveLeft() {return MoveTo(MovementDirection.Left);}; - protected boolean MoveRight() {return MoveTo(MovementDirection.Right);}; - protected boolean MoveUp() {return MoveTo(MovementDirection.Up);}; - protected boolean MoveDown() {return MoveTo(MovementDirection.Down);}; - protected ObjectParameters GetObjectParameters() {return _moveableObject.GetObjectPosition();}; - protected Integer GetStep() + + // перемещения + protected boolean MoveLeft() { return MoveTo(Direction.Up); } + protected boolean MoveRight() { return MoveTo(Direction.Right); } + protected boolean MoveUp() { return MoveTo(Direction.Up); } + protected boolean MoveDown() { return MoveTo(Direction.Down); } + + // параметры + protected ObjectParameters GetObjectParameters() { return _moveableObject.GetObjectPosition(); } + // шаг + protected int GetStep() { if (_state != StrategyStatus.InProgress) { - return null; + return 0; } return _moveableObject.GetStep(); } + // перемещение protected abstract void MoveToTarget(); - protected abstract boolean IsTargetDestinaion(); - private boolean MoveTo(MovementDirection movementDirection) + + // достигнута ли цель + protected abstract boolean IsTargetDestination(); + + // попытка перемещения по направлению + private boolean MoveTo(Direction directionType) { if (_state != StrategyStatus.InProgress) { return false; } - boolean stateTryMoveObject = _moveableObject.TryMoveObject(movementDirection); - if (stateTryMoveObject) return stateTryMoveObject; + if (_moveableObject.CheckCanMove(directionType)) + { + _moveableObject.MoveObject(directionType); + return true; + } return false; } } diff --git a/src/src/MovementStrategy/MovementDirection.java b/src/src/MovementStrategy/Direction.java similarity index 57% rename from src/src/MovementStrategy/MovementDirection.java rename to src/src/MovementStrategy/Direction.java index 65445bb..9a4a107 100644 --- a/src/src/MovementStrategy/MovementDirection.java +++ b/src/src/MovementStrategy/Direction.java @@ -1,8 +1,8 @@ package MovementStrategy; -public enum MovementDirection { +public enum Direction { Up, Down, Left, - Right, + Right; } diff --git a/src/src/MovementStrategy/IMoveableObject.java b/src/src/MovementStrategy/IMoveableObject.java index 8a95940..ffd427e 100644 --- a/src/src/MovementStrategy/IMoveableObject.java +++ b/src/src/MovementStrategy/IMoveableObject.java @@ -3,5 +3,6 @@ package MovementStrategy; public interface IMoveableObject { ObjectParameters GetObjectPosition(); int GetStep(); - boolean TryMoveObject(MovementDirection direction); + boolean CheckCanMove(Direction direction); + void MoveObject(Direction direction); } diff --git a/src/src/MovementStrategy/MoveToBorder.java b/src/src/MovementStrategy/MoveToBorder.java index c85b39f..3741cb8 100644 --- a/src/src/MovementStrategy/MoveToBorder.java +++ b/src/src/MovementStrategy/MoveToBorder.java @@ -1,27 +1,45 @@ package MovementStrategy; -public class MoveToBorder extends AbstractStrategy{ +public class MoveToBorder extends AbstractStrategy { + @Override - protected boolean IsTargetDestinaion() { - ObjectParameters objParams = GetObjectParameters(); + protected boolean IsTargetDestination() + { + var objParams = GetObjectParameters(); if (objParams == null) { return false; } - return objParams.RightBorder + GetStep() >= FieldWidth-GetStep() && - objParams.DownBorder + GetStep() >= FieldHeight-GetStep(); + return objParams.RightBorder() + GetStep() >= FieldWidth && objParams.DownBorder() + GetStep() >= FieldHeight; } + + // движение к цели @Override - protected void MoveToTarget() { - ObjectParameters objParams = GetObjectParameters(); + protected void MoveToTarget() + { + var objParams = GetObjectParameters(); if (objParams == null) { return; } - //реализация в правый нижний угол - int x = objParams.RightBorder; - if (x + GetStep() < FieldWidth) MoveRight(); - int y = objParams.DownBorder; - if (y + GetStep() < FieldHeight) MoveDown(); + var diffX = objParams.RightBorder() - FieldWidth; + var diffY = objParams.DownBorder() - FieldHeight; + if (diffX >= 0) + { + MoveDown(); + } + else if (diffY >= 0) + { + MoveRight(); + } + else if (Math.abs(diffX) > Math.abs(diffY)) + { + MoveRight(); + } + else + { + MoveDown(); + } + } } diff --git a/src/src/MovementStrategy/MoveToCenter.java b/src/src/MovementStrategy/MoveToCenter.java index f38acff..82726ac 100644 --- a/src/src/MovementStrategy/MoveToCenter.java +++ b/src/src/MovementStrategy/MoveToCenter.java @@ -1,26 +1,30 @@ package MovementStrategy; -public class MoveToCenter extends AbstractStrategy{ +public class MoveToCenter extends AbstractStrategy { @Override - protected boolean IsTargetDestinaion() { - ObjectParameters objParams = GetObjectParameters(); + protected boolean IsTargetDestination() + { + var objParams = GetObjectParameters(); if (objParams == null) { return false; } - return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2 && - objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 && - objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 && - objParams.ObjectMiddleVertical + GetStep() >= FieldHeight /2; + return objParams.ObjectMiddleHorizontal() <= FieldWidth / 2 && + objParams.ObjectMiddleHorizontal() + GetStep() >= FieldWidth / 2 && + objParams.ObjectMiddleVertical() <= FieldHeight / 2 && + objParams.ObjectMiddleVertical() + GetStep() >= FieldHeight / 2; } + + // движение к цели @Override - protected void MoveToTarget() { - ObjectParameters objParams = GetObjectParameters(); + protected void MoveToTarget() + { + var objParams = GetObjectParameters(); if (objParams == null) { return; } - int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2; + var diffX = objParams.ObjectMiddleHorizontal() - FieldWidth / 2; if (Math.abs(diffX) > GetStep()) { if (diffX > 0) @@ -32,7 +36,8 @@ public class MoveToCenter extends AbstractStrategy{ MoveRight(); } } - int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2; + + var diffY = objParams.ObjectMiddleVertical() - FieldHeight / 2; if (Math.abs(diffY) > GetStep()) { if (diffY > 0) diff --git a/src/src/MovementStrategy/MoveableAirplan.java b/src/src/MovementStrategy/MoveableAirplan.java index a8ad198..ddc103b 100644 --- a/src/src/MovementStrategy/MoveableAirplan.java +++ b/src/src/MovementStrategy/MoveableAirplan.java @@ -1,47 +1,33 @@ package MovementStrategy; - -import Drawings.CanvasAirbus; -import Drawings.DirectionType; -import Drawings.DrawingAirbus; import Drawings.DrawingAirplan; -public class MoveableAirplan implements IMoveableObject{ - private CanvasAirbus canvas = new CanvasAirbus(); - public MoveableAirplan(DrawingAirplan drawningairplan) +public class MoveableAirplan implements IMoveableObject { + private DrawingAirplan _drawingAirplan = null; + + public MoveableAirplan(DrawingAirplan drawingAirplan) { - canvas._drawingAirplan = drawningairplan; + _drawingAirplan = drawingAirplan; } - @Override - public ObjectParameters GetObjectPosition() { - if (canvas._drawingAirplan == null || canvas._drawingAirplan.EntityAirplan == null || - canvas._drawingAirplan.GetPosX() == null || canvas._drawingAirplan.GetPosY() == null) + + public ObjectParameters GetObjectPosition() + { + if (_drawingAirplan == null || _drawingAirplan.entityAirplan == null) { return null; } - return new ObjectParameters(canvas._drawingAirplan.GetPosX(), canvas._drawingAirplan.GetPosY(), - canvas._drawingAirplan.GetWidth(), canvas._drawingAirplan.GetHeight()); + return new ObjectParameters(_drawingAirplan.GetPosX(), _drawingAirplan.GetPosY(), _drawingAirplan.GetWidth(), _drawingAirplan.GetHeight()); } + + public int GetStep() { return (int)_drawingAirplan.entityAirplan.Step; } + @Override - public int GetStep() { - return (int)(canvas._drawingAirplan.EntityAirplan.Step); + public boolean CheckCanMove(Direction direction) { + return _drawingAirplan.CanMove(direction); } + @Override - public boolean TryMoveObject(MovementDirection direction) { - if (canvas._drawingAirplan == null || canvas._drawingAirplan.EntityAirplan == null) - { - return false; - } - return canvas._drawingAirplan.MoveTransport(GetDirectionType(direction)); - } - private static DirectionType GetDirectionType(MovementDirection direction) - { - switch (direction) { - case MovementDirection.Left: return DirectionType.Left; - case MovementDirection.Right: return DirectionType.Right; - case MovementDirection.Up: return DirectionType.Up; - case MovementDirection.Down: return DirectionType.Down; - default: return DirectionType.Unknown; - } + public void MoveObject(Direction direction) { + _drawingAirplan.MoveTransport(direction); } } \ No newline at end of file diff --git a/src/src/MovementStrategy/ObjectParameters.java b/src/src/MovementStrategy/ObjectParameters.java index b68fe75..a741f5a 100644 --- a/src/src/MovementStrategy/ObjectParameters.java +++ b/src/src/MovementStrategy/ObjectParameters.java @@ -5,23 +5,21 @@ public class ObjectParameters { private int _y; private int _width; private int _height; - public int LeftBorder = _x; - public int TopBorder = _y; - public int RightBorder = _x + _width; - public int DownBorder = _y + _height; - public int ObjectMiddleHorizontal = _x + _width / 2; - public int ObjectMiddleVertical = _y + _height / 2; + + public int LeftBorder() { return _x; } + public int TopBorder() { return _y; } + public int RightBorder() { return _x + _width; } + public int DownBorder() { return _y + _height; } + + + public int ObjectMiddleHorizontal () { return _x + _width / 2; } + public int ObjectMiddleVertical () { return _y + _height / 2; } + public ObjectParameters(int x, int y, int width, int height) { _x = x; _y = y; _width = width; _height = height; - LeftBorder = _x; - TopBorder = _y; - RightBorder = _x + _width; - DownBorder = _y + _height; - ObjectMiddleHorizontal = _x + _width / 2; - ObjectMiddleVertical = _y + _height / 2; } } -- 2.25.1