From ca0c850f7c477fdc7cd6c142ae1cabcfa1e4787c Mon Sep 17 00:00:00 2001 From: Evgehil Date: Sun, 12 May 2024 19:55:51 +0400 Subject: [PATCH] =?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; } }