From 8945d1c2cc3b094dea61ee417add4abf90d26ba5 Mon Sep 17 00:00:00 2001 From: artur-kalimullin <144933634+artur-kalimullin@users.noreply.github.com> Date: Tue, 21 May 2024 19:38:36 +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=20=E2=84=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/vcs.xml | 1 + ProjectAirFighter/src/DirectionType.java | 6 - ProjectAirFighter/src/DrawningAirFighter.java | 223 ------------------ .../src/DrawningAirFighterEngine.java | 33 --- .../src/Drawnings/DrawningAirCraft.java | 203 ++++++++++++++++ .../src/Drawnings/DrawningAirFighter.java | 82 +++++++ .../src/Drawnings/DrawningEngine.java | 38 +++ .../src/Drawnings/DrawningLongEngine.java | 38 +++ .../src/Drawnings/DrawningOvalEngine.java | 38 +++ .../src/{ => Drawnings}/EngineCount.java | 5 +- .../src/Drawnings/IDrawEngine.java | 8 + .../src/Entities/EntityAirCraft.java | 28 +++ .../src/Entities/EntityAirFighter.java | 24 ++ ProjectAirFighter/src/EntityAirFighter.java | 39 --- ProjectAirFighter/src/FormAirFighter.form | 108 ++++++--- ProjectAirFighter/src/FormAirFighter.java | 124 +++++++--- .../MovementStrategy/AbstractStrategy.java | 66 ++++++ .../src/MovementStrategy/IMoveableObject.java | 8 + .../src/MovementStrategy/MoveToBorder.java | 47 ++++ .../src/MovementStrategy/MoveToCenter.java | 46 ++++ .../MovementStrategy/MoveableAirCraft.java | 24 ++ .../MovementStrategy/MovementDirection.java | 8 + .../MovementStrategy/ObjectParameters.java | 25 ++ .../src/MovementStrategy/StrategyStatus.java | 7 + .../DirectionType.class | Bin 1102 -> 0 bytes .../DrawningAirFighter$1.class | Bin 728 -> 0 bytes .../DrawningAirFighter.class | Bin 6974 -> 0 bytes .../DrawningAirFighterEngine.class | Bin 1392 -> 0 bytes .../Drawnings/DrawningAirFighter.class | Bin 0 -> 3022 bytes .../Drawnings/DrawningEngine.class | Bin 0 -> 1360 bytes .../Drawnings/DrawningOvalEngine.class | Bin 0 -> 1372 bytes .../Drawnings/EngineCount.class | Bin 0 -> 1298 bytes .../Drawnings/IDrawEngine.class | Bin 0 -> 206 bytes .../EngineCount.class | Bin 1238 -> 0 bytes .../Entities/EntityAirCraft.class | Bin 0 -> 859 bytes .../Entities/EntityAirFighter.class | Bin 0 -> 891 bytes .../EntityAirFighter.class | Bin 1325 -> 0 bytes .../FormAirFighter$1.class | Bin 1430 -> 769 bytes .../FormAirFighter$2.class | Bin 1628 -> 767 bytes .../FormAirFighter$3.class | Bin 0 -> 1705 bytes .../FormAirFighter$4.class | Bin 0 -> 1880 bytes .../FormAirFighter.class | Bin 4192 -> 6187 bytes .../MovementStrategy/AbstractStrategy.class | Bin 0 -> 2267 bytes .../MovementStrategy/IMoveableObject.class | Bin 0 -> 349 bytes .../MovementStrategy/MoveToBorder.class | Bin 0 -> 1229 bytes .../MovementStrategy/MoveToCenter.class | Bin 0 -> 1274 bytes .../MovementStrategy/MoveableAirCraft.class | Bin 0 -> 1412 bytes .../MovementStrategy/MovementDirection.class | Bin 0 -> 1232 bytes .../MovementStrategy/ObjectParameters.class | Bin 0 -> 1024 bytes .../MovementStrategy/StrategyStatus.class | Bin 0 -> 1172 bytes 50 files changed, 860 insertions(+), 369 deletions(-) delete mode 100644 ProjectAirFighter/src/DirectionType.java delete mode 100644 ProjectAirFighter/src/DrawningAirFighter.java delete mode 100644 ProjectAirFighter/src/DrawningAirFighterEngine.java create mode 100644 ProjectAirFighter/src/Drawnings/DrawningAirCraft.java create mode 100644 ProjectAirFighter/src/Drawnings/DrawningAirFighter.java create mode 100644 ProjectAirFighter/src/Drawnings/DrawningEngine.java create mode 100644 ProjectAirFighter/src/Drawnings/DrawningLongEngine.java create mode 100644 ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java rename ProjectAirFighter/src/{ => Drawnings}/EngineCount.java (92%) create mode 100644 ProjectAirFighter/src/Drawnings/IDrawEngine.java create mode 100644 ProjectAirFighter/src/Entities/EntityAirCraft.java create mode 100644 ProjectAirFighter/src/Entities/EntityAirFighter.java delete mode 100644 ProjectAirFighter/src/EntityAirFighter.java create mode 100644 ProjectAirFighter/src/MovementStrategy/AbstractStrategy.java create mode 100644 ProjectAirFighter/src/MovementStrategy/IMoveableObject.java create mode 100644 ProjectAirFighter/src/MovementStrategy/MoveToBorder.java create mode 100644 ProjectAirFighter/src/MovementStrategy/MoveToCenter.java create mode 100644 ProjectAirFighter/src/MovementStrategy/MoveableAirCraft.java create mode 100644 ProjectAirFighter/src/MovementStrategy/MovementDirection.java create mode 100644 ProjectAirFighter/src/MovementStrategy/ObjectParameters.java create mode 100644 ProjectAirFighter/src/MovementStrategy/StrategyStatus.java delete mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DirectionType.class delete mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DrawningAirFighter$1.class delete mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DrawningAirFighter.class delete mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DrawningAirFighterEngine.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningAirFighter.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningEngine.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningOvalEngine.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/EngineCount.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/IDrawEngine.class delete mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/EngineCount.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Entities/EntityAirCraft.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Entities/EntityAirFighter.class delete mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/EntityAirFighter.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$3.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$4.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/AbstractStrategy.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/IMoveableObject.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveToBorder.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveToCenter.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveableAirCraft.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MovementDirection.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/ObjectParameters.class create mode 100644 out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/StrategyStatus.class diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..8306744 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/ProjectAirFighter/src/DirectionType.java b/ProjectAirFighter/src/DirectionType.java deleted file mode 100644 index 35657f0..0000000 --- a/ProjectAirFighter/src/DirectionType.java +++ /dev/null @@ -1,6 +0,0 @@ -public enum DirectionType { - Up, - Down, - Left, - Right -} diff --git a/ProjectAirFighter/src/DrawningAirFighter.java b/ProjectAirFighter/src/DrawningAirFighter.java deleted file mode 100644 index b8ea825..0000000 --- a/ProjectAirFighter/src/DrawningAirFighter.java +++ /dev/null @@ -1,223 +0,0 @@ -import java.awt.*; -import java.util.Random; -public class DrawningAirFighter { - private EntityAirFighter entityAirFighter; - public EntityAirFighter getEntityAirFighter() { - return entityAirFighter; - } - private Integer _pictureWidth; - private Integer _pictureHeight; - private Integer _startPosX; - private Integer _startPosY; - private final int _drawingAirFighterWidth = 76; - private final int _drawingAirFighterHeight = 80; - public DrawningAirFighterEngine _drawningAirFighterEngine; - - public void Init(int speed, float weight, Color bodyColor, Color additionalColor, boolean pgo, boolean rockets) { - entityAirFighter = new EntityAirFighter(); - entityAirFighter.Init(speed, weight, bodyColor, additionalColor, pgo, rockets); - _startPosY = null; - _startPosX = null; - _pictureWidth = null; - _pictureHeight = null; - - _drawningAirFighterEngine = new DrawningAirFighterEngine(); - Random random = new Random(); - int[] countengine = {2, 4, 6}; - int engineCount = countengine[random.nextInt(countengine.length)]; - _drawningAirFighterEngine.setEnumNumber(engineCount); - - } - public void setPosition(int x, int y) { - if (_pictureHeight == null || _pictureWidth == null) - return; - _startPosX = x; - _startPosY = y; - - if (_drawingAirFighterWidth + x > _pictureWidth || x < 0) { - _startPosX = 0; - } - if (_drawingAirFighterHeight + y > _pictureHeight || y < 0) { - _startPosY = 0; - } - } - - public boolean setPictureSize(int width, int height) { - - if (_drawingAirFighterHeight > height || _drawingAirFighterWidth > width) - return false; - _pictureHeight = height; - _pictureWidth = width; - - if (_startPosX != null && _startPosY != null) { - if (_startPosX + _drawingAirFighterWidth > width) - _startPosX = width - _drawingAirFighterWidth; - if (_startPosY + _drawingAirFighterHeight > height) - _startPosY = height - _drawingAirFighterHeight; - } - return true; - } - - public boolean moveTransport(DirectionType direction) { - if (entityAirFighter == null || _pictureWidth == null || _pictureHeight == null) - return false; - switch (direction) { - case Left: - if (_startPosX - entityAirFighter.Step() > 0) - _startPosX -= (int) entityAirFighter.Step(); - return true; - case Up: - if (_startPosY - entityAirFighter.Step() > 0) - _startPosY -= (int) entityAirFighter.Step(); - return true; - case Right: - if (_startPosX + entityAirFighter.Step() < _pictureWidth - _drawingAirFighterWidth) - _startPosX += (int) entityAirFighter.Step(); - return true; - case Down: - if (_startPosY + entityAirFighter.Step() < _pictureHeight - _drawingAirFighterHeight) - _startPosY += (int) entityAirFighter.Step(); - return true; - default: - return false; - } - } - - public void drawAirFighter(Graphics g) { - if (entityAirFighter == null || _startPosX == null || _startPosY == null) { - return; - } - - Graphics2D g2d = (Graphics2D) g; - - Point[] rtail = new Point[]{ - new Point (_startPosX + 10,_startPosY + 25), - new Point (_startPosX + 10,_startPosY + 8), - new Point (_startPosX + 20,_startPosY + 17), - new Point (_startPosX + 20, _startPosY + 25), - }; - Polygon rtailPolygon = new Polygon(); - for (Point point : rtail) - rtailPolygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getBodyColor()); - g2d.fillPolygon(rtailPolygon); - - Point[] ltail = new Point[]{ - new Point (_startPosX + 10,_startPosY + 49), - new Point (_startPosX + 10,_startPosY + 66), - new Point (_startPosX + 20,_startPosY + 57), - new Point (_startPosX + 20, _startPosY + 49), - }; - Polygon ltailPolygon = new Polygon(); - for (Point point : ltail) - ltailPolygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getBodyColor()); - g2d.fillPolygon(ltailPolygon); - - Point[] rwing = new Point[]{ - new Point (_startPosX + 45,_startPosY + 49), - new Point (_startPosX + 45,_startPosY + 74), - new Point (_startPosX + 37,_startPosY + 74), - new Point (_startPosX + 30, _startPosY + 49), - }; - Polygon rwingPolygon = new Polygon(); - for (Point point : rwing) - rwingPolygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getBodyColor()); - g2d.fillPolygon(rwingPolygon); - - Point[] lwing = new Point[]{ - new Point (_startPosX + 45,_startPosY + 25), - new Point (_startPosX + 45,_startPosY ), - new Point (_startPosX + 37,_startPosY ), - new Point (_startPosX + 30, _startPosY + 25), - }; - Polygon lwingPolygon = new Polygon(); - for (Point point : lwing) - lwingPolygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getBodyColor()); - g2d.fillPolygon(lwingPolygon); - - g2d.drawRect(_startPosX + 10, _startPosY+ 25, 50, 24); - g2d.fillRect(_startPosX + 10, _startPosY+ 25, 50, 24); - - Point[] nose = new Point[]{ - new Point (_startPosX + 60,_startPosY + 25), - new Point (_startPosX + 76,_startPosY + 37), - new Point (_startPosX + 60,_startPosY + 49), - }; - Polygon nosePolygon = new Polygon(); - for (Point point : nose) - nosePolygon.addPoint(point.x, point.y); - - g2d.setColor(Color.GRAY); - g2d.fillPolygon(nosePolygon); - - if (entityAirFighter.getPgo()) { - Point[] pgo1 = new Point[]{ - new Point ( _startPosX + 50, _startPosY + 25), - new Point ( _startPosX + 50, _startPosY + 15), - new Point ( _startPosX + 55, _startPosY + 25), - }; - Polygon pgo1Polygon = new Polygon(); - for (Point point : pgo1) - pgo1Polygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getAdditionalColor()); - g2d.fillPolygon(pgo1Polygon); - - Point[] pgo2 = new Point[]{ - new Point (_startPosX + 50, _startPosY + 49), - new Point (_startPosX + 50, _startPosY + 59), - new Point (_startPosX + 55, _startPosY + 49), - }; - Polygon pgo2Polygon = new Polygon(); - for (Point point : pgo2) - pgo2Polygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getAdditionalColor()); - g2d.fillPolygon(pgo2Polygon); - } - - if (entityAirFighter.getRockets()) { - Point[] rocket1 = new Point[]{ - new Point (_startPosX + 50, _startPosY + 71), - new Point (_startPosX + 50, _startPosY+ 74), - new Point (_startPosX + 55, _startPosY + 69), - new Point (_startPosX + 50, _startPosY + 64), - }; - Polygon rocket1Polygon = new Polygon(); - for (Point point : rocket1) - rocket1Polygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getAdditionalColor()); - g2d.fillPolygon(rocket1Polygon); - - g.drawRect(_startPosX + 45, _startPosY + 67, 5, 4); - g.fillRect(_startPosX + 45, _startPosY + 67, 5, 4); - - Point[] rocket2 = new Point[]{ - new Point (_startPosX + 50, _startPosY + 7), - new Point (_startPosX + 50, _startPosY+ 10), - new Point (_startPosX + 55, _startPosY + 5), - new Point (_startPosX + 50, _startPosY), - }; - Polygon rocket2Polygon = new Polygon(); - for (Point point : rocket2) - rocket2Polygon.addPoint(point.x, point.y); - - g2d.setColor(entityAirFighter.getAdditionalColor()); - g2d.fillPolygon(rocket2Polygon); - - g.drawRect(_startPosX + 45, _startPosY + 3, 5, 4); - g.fillRect(_startPosX + 45, _startPosY + 3, 5, 4); - } - - _drawningAirFighterEngine.drawAirFighterEngine(g, entityAirFighter.getAdditionalColor(), _startPosX, _startPosY); - } -} - diff --git a/ProjectAirFighter/src/DrawningAirFighterEngine.java b/ProjectAirFighter/src/DrawningAirFighterEngine.java deleted file mode 100644 index 695d443..0000000 --- a/ProjectAirFighter/src/DrawningAirFighterEngine.java +++ /dev/null @@ -1,33 +0,0 @@ -import java.awt.*; - -public class DrawningAirFighterEngine { - private EngineCount _engineCount; - public void setEnumNumber(int engineCount) { - for (EngineCount value : EngineCount.values()) { - if (value.getEnumNumber() == engineCount) { - _engineCount = value; - return; - } - } - } - public void drawAirFighterEngine(Graphics g, Color color, float startPosX, float startPosY) { - Graphics2D g2d = (Graphics2D) g; - g2d.setColor(color); - g2d.setStroke(new BasicStroke(4)); - - if (_engineCount.getEnumNumber() >= 2){ - g2d.drawRect((int)startPosX + 30, (int) startPosY + 69, 10, 2 ); - g2d.drawRect((int)startPosX + 30, (int) startPosY + 3, 10, 2 ); - } - - if (_engineCount.getEnumNumber() >= 4){ - g2d.drawRect((int)startPosX + 30, (int) startPosY + 62, 10, 2 ); - g2d.drawRect((int)startPosX + 30, (int) startPosY + 10, 10, 2 ); - } - - if (_engineCount.getEnumNumber() >= 6){ - g2d.drawRect((int)startPosX + 30, (int) startPosY + 55, 10, 2 ); - g2d.drawRect((int)startPosX + 30, (int) startPosY + 17, 10, 2 ); - } - } -} diff --git a/ProjectAirFighter/src/Drawnings/DrawningAirCraft.java b/ProjectAirFighter/src/Drawnings/DrawningAirCraft.java new file mode 100644 index 0000000..3979309 --- /dev/null +++ b/ProjectAirFighter/src/Drawnings/DrawningAirCraft.java @@ -0,0 +1,203 @@ +package Drawnings; + +import Entities.EntityAirCraft; +import MovementStrategy.MovementDirection; + +import java.awt.*; +import java.util.Random; + +public class DrawningAirCraft { + private final EntityAirCraft entityAirCraft; + + public EntityAirCraft getEntityAirCraft() { + return entityAirCraft; + } + + private Integer _pictureWidth; + private Integer _pictureHeight; + protected Integer _startPosX; + protected Integer _startPosY; + private int _drawingAirCraftWidth = 66; + private int _drawingAirCraftHeight = 74; + + public int GetPosX() { + return _startPosX; + } + + public int GetPosY() { + return _startPosY; + } + + public int GetWidth() { + return _drawingAirCraftWidth; + } + + public int GetHeight() { + return _drawingAirCraftHeight; + } + + private IDrawEngine drawEngine; + + public DrawningAirCraft(int speed, float weight, Color bodyColor, int engineType) { + entityAirCraft = new EntityAirCraft(speed, weight, bodyColor); + _startPosY = null; + _startPosX = null; + _pictureWidth = null; + _pictureHeight = null; + switch (engineType) { + case 0: + drawEngine = new DrawningEngine(); + break; + case 1: + drawEngine = new DrawningOvalEngine(); + break; + case 2: + drawEngine = new DrawningLongEngine(); + break; + } + + Random random = new Random(); + int[] countengine = {2, 4, 6}; + int engineCount = countengine[random.nextInt(countengine.length)]; + System.out.print(engineCount); + drawEngine.setNumber(engineCount); + } + + protected DrawningAirCraft(int speed, float weight, Color bodyColor, int EngineType, int aircraftWidth, int aircraftHeight) { + this(speed, weight, bodyColor, EngineType); + _drawingAirCraftHeight = aircraftHeight; + _drawingAirCraftWidth = aircraftWidth; + } + + public void setPosition(int x, int y) { + if (_pictureHeight == null || _pictureWidth == null) + return; + _startPosX = x; + _startPosY = y; + + if (_drawingAirCraftWidth + x > _pictureWidth || x < 0) { + _startPosX = 0; + } + if (_drawingAirCraftHeight + y > _pictureHeight || y < 0) { + _startPosY = 0; + } + } + + public boolean setPictureSize(int width, int height) { + + if (_drawingAirCraftHeight > height || _drawingAirCraftWidth > width) + return false; + _pictureHeight = height; + _pictureWidth = width; + + if (_startPosX != null && _startPosY != null) { + if (_startPosX + _drawingAirCraftWidth > width) + _startPosX = width - _drawingAirCraftWidth; + if (_startPosY + _drawingAirCraftHeight > height) + _startPosY = height - _drawingAirCraftHeight; + } + return true; + } + + public boolean moveTransport(MovementDirection direction) { + if (entityAirCraft == null || _pictureWidth == null || _pictureHeight == null) + return false; + switch (direction) { + case MovementDirection.Left: + if (_startPosX - entityAirCraft.getStep() > 0) + _startPosX -= (int) entityAirCraft.getStep(); + return true; + case MovementDirection.Up: + if (_startPosY - entityAirCraft.getStep() > 0) + _startPosY -= (int) entityAirCraft.getStep(); + return true; + case MovementDirection.Right: + if (_startPosX + entityAirCraft.getStep() < _pictureWidth - _drawingAirCraftWidth) + _startPosX += (int) entityAirCraft.getStep(); + return true; + case MovementDirection.Down: + if (_startPosY + entityAirCraft.getStep() < _pictureHeight - _drawingAirCraftHeight) + _startPosY += (int) entityAirCraft.getStep(); + return true; + default: + return false; + } + } + + public void drawAirCraft(Graphics g) { + if (entityAirCraft == null || _startPosX == null || _startPosY == null) { + return; + } + + Graphics2D g2d = (Graphics2D) g; + + Point[] rtail = new Point[]{ + new Point(_startPosX + 10, _startPosY + 25), + new Point(_startPosX + 10, _startPosY + 8), + new Point(_startPosX + 20, _startPosY + 17), + new Point(_startPosX + 20, _startPosY + 25), + }; + Polygon rtailPolygon = new Polygon(); + for (Point point : rtail) + rtailPolygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirCraft.getBodyColor()); + g2d.fillPolygon(rtailPolygon); + + Point[] ltail = new Point[]{ + new Point(_startPosX + 10, _startPosY + 49), + new Point(_startPosX + 10, _startPosY + 66), + new Point(_startPosX + 20, _startPosY + 57), + new Point(_startPosX + 20, _startPosY + 49), + }; + Polygon ltailPolygon = new Polygon(); + for (Point point : ltail) + ltailPolygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirCraft.getBodyColor()); + g2d.fillPolygon(ltailPolygon); + + Point[] rwing = new Point[]{ + new Point(_startPosX + 45, _startPosY + 49), + new Point(_startPosX + 45, _startPosY + 74), + new Point(_startPosX + 37, _startPosY + 74), + new Point(_startPosX + 30, _startPosY + 49), + }; + Polygon rwingPolygon = new Polygon(); + for (Point point : rwing) + rwingPolygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirCraft.getBodyColor()); + g2d.fillPolygon(rwingPolygon); + + Point[] lwing = new Point[]{ + new Point(_startPosX + 45, _startPosY + 25), + new Point(_startPosX + 45, _startPosY), + new Point(_startPosX + 37, _startPosY), + new Point(_startPosX + 30, _startPosY + 25), + }; + Polygon lwingPolygon = new Polygon(); + for (Point point : lwing) + lwingPolygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirCraft.getBodyColor()); + g2d.fillPolygon(lwingPolygon); + + g2d.drawRect(_startPosX + 10, _startPosY + 25, 50, 24); + g2d.fillRect(_startPosX + 10, _startPosY + 25, 50, 24); + + Point[] nose = new Point[]{ + new Point(_startPosX + 60, _startPosY + 25), + new Point(_startPosX + 76, _startPosY + 37), + new Point(_startPosX + 60, _startPosY + 49), + }; + Polygon nosePolygon = new Polygon(); + for (Point point : nose) + nosePolygon.addPoint(point.x, point.y); + + g2d.setColor(Color.GRAY); + g2d.fillPolygon(nosePolygon); + + drawEngine.drawEngine(g2d, entityAirCraft.getBodyColor(), _startPosX, _startPosY); + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/Drawnings/DrawningAirFighter.java b/ProjectAirFighter/src/Drawnings/DrawningAirFighter.java new file mode 100644 index 0000000..aa62b56 --- /dev/null +++ b/ProjectAirFighter/src/Drawnings/DrawningAirFighter.java @@ -0,0 +1,82 @@ +package Drawnings; + +import Entities.EntityAirFighter; + +import java.awt.*; + +public class DrawningAirFighter extends DrawningAirCraft { + private EntityAirFighter entityAirFighter; + + public DrawningAirFighter(int speed, float weight, Color bodyColor, int engineType, Color additionalColor, boolean pgo, boolean rockets) { + super(speed, weight, bodyColor, engineType, 76, 80); + entityAirFighter = new EntityAirFighter(speed, weight, bodyColor, additionalColor, pgo, rockets); + } + + public void drawAirCraft(Graphics g) { + if (entityAirFighter == null || _startPosX == null || _startPosY == null) { + return; + } + super.drawAirCraft(g); + Graphics2D g2d = (Graphics2D) g; + + if (entityAirFighter.getPgo()) { + Point[] pgo1 = new Point[]{ + new Point(_startPosX + 50, _startPosY + 25), + new Point(_startPosX + 50, _startPosY + 15), + new Point(_startPosX + 55, _startPosY + 25), + }; + Polygon pgo1Polygon = new Polygon(); + for (Point point : pgo1) + pgo1Polygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirFighter.getAdditionalColor()); + g2d.fillPolygon(pgo1Polygon); + + Point[] pgo2 = new Point[]{ + new Point(_startPosX + 50, _startPosY + 49), + new Point(_startPosX + 50, _startPosY + 59), + new Point(_startPosX + 55, _startPosY + 49), + }; + Polygon pgo2Polygon = new Polygon(); + for (Point point : pgo2) + pgo2Polygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirFighter.getAdditionalColor()); + g2d.fillPolygon(pgo2Polygon); + } + + if (entityAirFighter.getRockets()) { + Point[] rocket1 = new Point[]{ + new Point(_startPosX + 50, _startPosY + 71), + new Point(_startPosX + 50, _startPosY + 74), + new Point(_startPosX + 55, _startPosY + 69), + new Point(_startPosX + 50, _startPosY + 64), + }; + Polygon rocket1Polygon = new Polygon(); + for (Point point : rocket1) + rocket1Polygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirFighter.getAdditionalColor()); + g2d.fillPolygon(rocket1Polygon); + + g.drawRect(_startPosX + 45, _startPosY + 67, 5, 4); + g.fillRect(_startPosX + 45, _startPosY + 67, 5, 4); + + Point[] rocket2 = new Point[]{ + new Point(_startPosX + 50, _startPosY + 7), + new Point(_startPosX + 50, _startPosY + 10), + new Point(_startPosX + 55, _startPosY + 5), + new Point(_startPosX + 50, _startPosY), + }; + Polygon rocket2Polygon = new Polygon(); + for (Point point : rocket2) + rocket2Polygon.addPoint(point.x, point.y); + + g2d.setColor(entityAirFighter.getAdditionalColor()); + g2d.fillPolygon(rocket2Polygon); + + g.drawRect(_startPosX + 45, _startPosY + 3, 5, 4); + g.fillRect(_startPosX + 45, _startPosY + 3, 5, 4); + } + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/Drawnings/DrawningEngine.java b/ProjectAirFighter/src/Drawnings/DrawningEngine.java new file mode 100644 index 0000000..ded7e3f --- /dev/null +++ b/ProjectAirFighter/src/Drawnings/DrawningEngine.java @@ -0,0 +1,38 @@ +package Drawnings; + +import java.awt.*; + +public class DrawningEngine implements IDrawEngine { + private EngineCount _engineCount; + + @Override + public void setNumber(int engineCount) { + for (EngineCount value : EngineCount.values()) { + if (value.getEnumNumber() == engineCount) { + _engineCount = value; + return; + } + } + } + + @Override + public void drawEngine(Graphics2D g2d, Color color, int _startX, int _startY) { + g2d.setColor(color); + g2d.setStroke(new BasicStroke(4)); + + if (_engineCount.getEnumNumber() >= 2){ + g2d.drawRect(_startX + 30, _startY + 69, 10, 2 ); + g2d.drawRect(_startX + 30, _startY + 3, 10, 2 ); + } + + if (_engineCount.getEnumNumber() >= 4){ + g2d.drawRect(_startX + 30, _startY + 62, 10, 2 ); + g2d.drawRect(_startX + 30, _startY + 10, 10, 2 ); + } + + if (_engineCount.getEnumNumber() >= 6){ + g2d.drawRect(_startX + 30, _startY + 55, 10, 2 ); + g2d.drawRect(_startX + 30, _startY + 17, 10, 2 ); + } + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/Drawnings/DrawningLongEngine.java b/ProjectAirFighter/src/Drawnings/DrawningLongEngine.java new file mode 100644 index 0000000..cbf1dc9 --- /dev/null +++ b/ProjectAirFighter/src/Drawnings/DrawningLongEngine.java @@ -0,0 +1,38 @@ +package Drawnings; + +import java.awt.*; + +public class DrawningLongEngine implements IDrawEngine { + private EngineCount _engineCount; + + @Override + public void setNumber(int engineCount) { + for (EngineCount value : EngineCount.values()) { + if (value.getEnumNumber() == engineCount) { + _engineCount = value; + return; + } + } + } + + @Override + public void drawEngine(Graphics2D g2d, Color color, int _startX, int _startY) { + g2d.setColor(color); + g2d.setStroke(new BasicStroke(4)); + + if (_engineCount.getEnumNumber() >= 2) { + g2d.drawRoundRect(_startX + 25, _startY + 69, 15, 2, 5, 5); + g2d.drawRoundRect(_startX + 25, _startY + 3, 15, 2, 5, 5); + } + + if (_engineCount.getEnumNumber() >= 4) { + g2d.drawRoundRect(_startX + 25, _startY + 62, 15, 2, 5, 5); + g2d.drawRoundRect(_startX + 25, _startY + 10, 15, 2, 5, 5); + } + + if (_engineCount.getEnumNumber() >= 6) { + g2d.drawRoundRect(_startX + 25, _startY + 55, 15, 2, 5, 5); + g2d.drawRoundRect(_startX + 25, _startY + 17, 15, 2, 5, 5); + } + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java b/ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java new file mode 100644 index 0000000..066274b --- /dev/null +++ b/ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java @@ -0,0 +1,38 @@ +package Drawnings; + +import java.awt.*; + +public class DrawningOvalEngine implements IDrawEngine { + private EngineCount _engineCount; + + @Override + public void setNumber(int engineCount) { + for (EngineCount value : EngineCount.values()) { + if (value.getEnumNumber() == engineCount) { + _engineCount = value; + return; + } + } + } + + @Override + public void drawEngine(Graphics2D g2d, Color color, int _startX, int _startY) { + g2d.setColor(color); + g2d.setStroke(new BasicStroke(4)); + + if (_engineCount.getEnumNumber() >= 2) { + g2d.drawOval(_startX + 30, _startY + 69, 10, 2); + g2d.drawOval(_startX + 30, _startY + 3, 10, 2); + } + + if (_engineCount.getEnumNumber() >= 4) { + g2d.drawOval(_startX + 30, _startY + 62, 10, 2); + g2d.drawOval(_startX + 30, _startY + 10, 10, 2); + } + + if (_engineCount.getEnumNumber() >= 6) { + g2d.drawOval(_startX + 30, _startY + 55, 10, 2); + g2d.drawOval(_startX + 30, _startY + 17, 10, 2); + } + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/EngineCount.java b/ProjectAirFighter/src/Drawnings/EngineCount.java similarity index 92% rename from ProjectAirFighter/src/EngineCount.java rename to ProjectAirFighter/src/Drawnings/EngineCount.java index ed59643..30f4ced 100644 --- a/ProjectAirFighter/src/EngineCount.java +++ b/ProjectAirFighter/src/Drawnings/EngineCount.java @@ -1,3 +1,5 @@ +package Drawnings; + public enum EngineCount { Two(2), Three(4), @@ -9,5 +11,4 @@ public enum EngineCount { public int getEnumNumber() { return EnumNumber; } - -} +} \ No newline at end of file diff --git a/ProjectAirFighter/src/Drawnings/IDrawEngine.java b/ProjectAirFighter/src/Drawnings/IDrawEngine.java new file mode 100644 index 0000000..60f3109 --- /dev/null +++ b/ProjectAirFighter/src/Drawnings/IDrawEngine.java @@ -0,0 +1,8 @@ +package Drawnings; + +import java.awt.*; + +public interface IDrawEngine { + void setNumber(int x); + void drawEngine(Graphics2D graphics2D, Color color, int _startX, int _startY); +} \ No newline at end of file diff --git a/ProjectAirFighter/src/Entities/EntityAirCraft.java b/ProjectAirFighter/src/Entities/EntityAirCraft.java new file mode 100644 index 0000000..ae2634c --- /dev/null +++ b/ProjectAirFighter/src/Entities/EntityAirCraft.java @@ -0,0 +1,28 @@ +package Entities; + +import java.awt.*; + +public class EntityAirCraft { + private int Speed; + public int getSpeed() { + return Speed; + } + private double Weight; + public double getWeight() { + return Weight; + } + private Color BodyColor; + public Color getBodyColor() { + return BodyColor; + } + private double Step; + public double getStep() { + return Speed*100/Weight; + } + + public EntityAirCraft(int speed, double weight, Color bodyColor) { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/Entities/EntityAirFighter.java b/ProjectAirFighter/src/Entities/EntityAirFighter.java new file mode 100644 index 0000000..2098795 --- /dev/null +++ b/ProjectAirFighter/src/Entities/EntityAirFighter.java @@ -0,0 +1,24 @@ +package Entities; + +import java.awt.*; + +public class EntityAirFighter extends EntityAirCraft { + private Color AdditionalColor; + public Color getAdditionalColor() { + return AdditionalColor; + } + private boolean Pgo; + public boolean getPgo() { + return Pgo; + } + private boolean Rockets; + public boolean getRockets() { + return Rockets; + } + public EntityAirFighter(int speed, double weight, Color bodyColor, Color additionalColor, boolean pgo, boolean rockets) { + super(speed, weight, bodyColor); + AdditionalColor = additionalColor; + Pgo = pgo; + Rockets = rockets; + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/EntityAirFighter.java b/ProjectAirFighter/src/EntityAirFighter.java deleted file mode 100644 index 776b2c0..0000000 --- a/ProjectAirFighter/src/EntityAirFighter.java +++ /dev/null @@ -1,39 +0,0 @@ -import java.awt.*; - -public class EntityAirFighter { - private int Speed; - public int getSpeed() { - return Speed; - } - private double Weight; - public double getWeight() { - return Weight; - } - private Color BodyColor; - public Color getBodyColor() { - return BodyColor; - } - private Color AdditionalColor; - public Color getAdditionalColor() { - return AdditionalColor; - } - public double Step() { - return Speed*100/Weight; - } - private boolean Pgo; - public boolean getPgo() { - return Pgo; - } - private boolean Rockets; - public boolean getRockets() { - return Rockets; - } - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean pgo, boolean rockets) { - Speed = speed; - Weight = weight; - BodyColor = bodyColor; - AdditionalColor = additionalColor; - Pgo = pgo; - Rockets = rockets; - } -} diff --git a/ProjectAirFighter/src/FormAirFighter.form b/ProjectAirFighter/src/FormAirFighter.form index f7539e7..fd0549c 100644 --- a/ProjectAirFighter/src/FormAirFighter.form +++ b/ProjectAirFighter/src/FormAirFighter.form @@ -8,61 +8,55 @@ - + - + + + - - - - - - - - - + + + - + - - - - - - - - - - - - - - + - + - - - - + + + + - - + + + + + + + + + + + + + - + @@ -73,9 +67,17 @@ + + + + + + + + - + @@ -86,6 +88,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ProjectAirFighter/src/FormAirFighter.java b/ProjectAirFighter/src/FormAirFighter.java index 73e1a1e..cf00e67 100644 --- a/ProjectAirFighter/src/FormAirFighter.java +++ b/ProjectAirFighter/src/FormAirFighter.java @@ -1,3 +1,7 @@ +import Drawnings.DrawningAirCraft; +import Drawnings.DrawningAirFighter; +import MovementStrategy.*; + import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; @@ -7,16 +11,45 @@ import java.util.Random; import java.util.List; public class FormAirFighter extends JFrame { - protected DrawningAirFighter _drawningAirFighter = new DrawningAirFighter(); + protected DrawningAirCraft _drawningAirCraft; JPanel PanelWrapper; private JPanel PictureBox; - private JButton buttonCreate; + private JButton buttonCreateAirFighter; + private JButton buttonCreateAirCraft; private JButton buttonRight; private JButton buttonDown; private JButton buttonLeft; private JButton buttonUp; - + private JComboBox comboBoxStrategy; + private JButton buttonStrategyStep; + private AbstractStrategy _strategy; private List controls; + + private void createObject(String type) { + Random random = new Random(); + switch (type) { + case "Drawnings.DrawningAirCraft": + _drawningAirCraft = new DrawningAirCraft(random.nextInt(30,100), random.nextInt(100,500), + new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), random.nextInt(3)); + break; + case "Drawnings.DrawningAirFighter": + _drawningAirCraft = new DrawningAirFighter(random.nextInt(30,100), random.nextInt(100,500), + new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), random.nextInt(3), + new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), + random.nextBoolean(), random.nextBoolean()); + break; + default: + return; + } + _drawningAirCraft.setPictureSize(PictureBox.getWidth(), PictureBox.getHeight()); + _drawningAirCraft.setPosition(random.nextInt(25, 100), + random.nextInt(25, 100)); + _strategy = null; + comboBoxStrategy.setEnabled(true); + + Draw(); + } + public FormAirFighter() { buttonUp.setName("buttonUp"); buttonDown.setName("buttonDown"); @@ -25,25 +58,19 @@ public class FormAirFighter extends JFrame { InitializeControlsRepaintList(); - buttonCreate.addActionListener(new ActionListener() { + buttonCreateAirFighter.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - _drawningAirFighter = new DrawningAirFighter(); - Random random = new Random(); - - _drawningAirFighter.Init(random.nextInt(30, 100), - random.nextInt(100, 500), - new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), - new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)), - random.nextBoolean(), random.nextBoolean() ); - _drawningAirFighter.setPictureSize(PictureBox.getWidth(), PictureBox.getHeight()); - _drawningAirFighter.setPosition(random.nextInt(25, 100), - random.nextInt(25, 100)); - - Draw(); + createObject("Drawnings.DrawningAirFighter"); } }); + buttonCreateAirCraft.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + createObject("Drawnings.DrawningAirCraft"); + } + }); ActionListener buttonMoveClickedListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -52,36 +79,72 @@ public class FormAirFighter extends JFrame { switch (buttonName) { case "buttonUp": { - result = _drawningAirFighter.moveTransport(DirectionType.Up); + result = _drawningAirCraft.moveTransport(MovementDirection.Up); } break; case "buttonDown": { - result = _drawningAirFighter.moveTransport(DirectionType.Down); + result = _drawningAirCraft.moveTransport(MovementDirection.Down); } break; case "buttonLeft": { - result = _drawningAirFighter.moveTransport(DirectionType.Left); + result = _drawningAirCraft.moveTransport(MovementDirection.Left); } break; case "buttonRight": { - result = _drawningAirFighter.moveTransport(DirectionType.Right); + result = _drawningAirCraft.moveTransport(MovementDirection.Right); } break; - } if (result) Draw(); - } }; buttonRight.addActionListener(buttonMoveClickedListener); buttonDown.addActionListener(buttonMoveClickedListener); buttonLeft.addActionListener(buttonMoveClickedListener); buttonUp.addActionListener(buttonMoveClickedListener); + comboBoxStrategy.addItem("К центру"); + comboBoxStrategy.addItem("К краю"); + buttonStrategyStep.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (_drawningAirCraft == null) + return; + if (comboBoxStrategy.isEnabled()) { + switch (comboBoxStrategy.getSelectedIndex()) { + case 0: + _strategy = new MoveToCenter(); + break; + case 1: + _strategy = new MoveToBorder(); + break; + default: + _strategy = null; + break; + + } + if (_strategy == null) { + return; + } + _strategy.SetData(new MoveableAirCraft(_drawningAirCraft), PictureBox.getWidth(), PictureBox.getHeight()); + } + if (_strategy == null) { + return; + } + _strategy.MakeStep(); + Draw(); + comboBoxStrategy.setEnabled(false); + + if (_strategy.GetStatus() == StrategyStatus.Finish) { + comboBoxStrategy.setEnabled(true); + _strategy = null; + } + } + }); } private void Draw() { - if (_drawningAirFighter.getEntityAirFighter() == null) + if (_drawningAirCraft.getEntityAirCraft() == null) return; if (PictureBox.getWidth() == 0 || PictureBox.getHeight() == 0) { return; @@ -89,10 +152,9 @@ public class FormAirFighter extends JFrame { Graphics g = PictureBox.getGraphics(); g.setColor(PictureBox.getBackground()); g.fillRect(0,0, PictureBox.getWidth(), PictureBox.getHeight()); - _drawningAirFighter.drawAirFighter(g); + _drawningAirCraft.drawAirCraft(g); RepaintControls(); - } private void RepaintControls() { for (JComponent control : controls) { @@ -100,15 +162,15 @@ public class FormAirFighter extends JFrame { } } - private void InitializeControlsRepaintList() { controls = new LinkedList<>(); - controls.add(buttonCreate); + controls.add(buttonCreateAirFighter); + controls.add(buttonCreateAirCraft); controls.add(buttonUp); controls.add(buttonDown); controls.add(buttonLeft); controls.add(buttonRight); + controls.add(comboBoxStrategy); + controls.add(buttonStrategyStep); } - - -} +} \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/AbstractStrategy.java b/ProjectAirFighter/src/MovementStrategy/AbstractStrategy.java new file mode 100644 index 0000000..333abfd --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/AbstractStrategy.java @@ -0,0 +1,66 @@ +package MovementStrategy; + +public abstract class AbstractStrategy { + private IMoveableObject _moveableObject; + private StrategyStatus _state = StrategyStatus.NotInit; + protected int FieldWidth; + protected int FieldHeight; + public StrategyStatus GetStatus() { return _state; } + + public void SetData(IMoveableObject moveableObject, int width, int height) + { + if (moveableObject == null) + { + _state = StrategyStatus.NotInit; + return; + } + _state = StrategyStatus.InProgress; + _moveableObject = moveableObject; + FieldWidth = width; + FieldHeight = height; + } + + public void MakeStep() + { + 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 int GetStep() + { + if (_state != StrategyStatus.InProgress) + { + return 0; + } + return _moveableObject.GetStep(); + } + protected abstract void MoveToTarget(); + protected abstract boolean IsTargetDestination(); + private boolean MoveTo(MovementDirection directionType) + { + if (_state != StrategyStatus.InProgress) + { + return false; + } + if (_moveableObject.TryMoveObject(directionType)) + { + _moveableObject.MoveObject(directionType); + return true; + } + return false; + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/IMoveableObject.java b/ProjectAirFighter/src/MovementStrategy/IMoveableObject.java new file mode 100644 index 0000000..0cb1a83 --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/IMoveableObject.java @@ -0,0 +1,8 @@ +package MovementStrategy; + +public interface IMoveableObject { + ObjectParameters GetObjectPosition(); + int GetStep(); + boolean TryMoveObject(MovementDirection direction); + void MoveObject(MovementDirection direction); +} \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/MoveToBorder.java b/ProjectAirFighter/src/MovementStrategy/MoveToBorder.java new file mode 100644 index 0000000..52d6ad6 --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/MoveToBorder.java @@ -0,0 +1,47 @@ +package MovementStrategy; + +public class MoveToBorder extends AbstractStrategy { + protected boolean IsTargetDestination() + { + var objParams = GetObjectParameters(); + if (objParams == null) { + return false; + } + return objParams.RightBorder() <= FieldWidth && + objParams.RightBorder() + GetStep() >= FieldWidth && + objParams.DownBorder() <= FieldHeight && + objParams.DownBorder() + GetStep() >= FieldHeight; + } + + protected void MoveToTarget() + { + var objParams = GetObjectParameters(); + if (objParams == null) { + return; + } + int diffX = objParams.RightBorder() - FieldWidth; + if (Math.abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + int diffY = objParams.DownBorder() - FieldHeight; + if (Math.abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } + else + { + MoveDown(); + } + } + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/MoveToCenter.java b/ProjectAirFighter/src/MovementStrategy/MoveToCenter.java new file mode 100644 index 0000000..8a314f8 --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/MoveToCenter.java @@ -0,0 +1,46 @@ +package MovementStrategy; + +public class MoveToCenter extends AbstractStrategy { + 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); + } + protected void MoveToTarget() + { + + var objParams = GetObjectParameters(); + if (objParams == null) { + return; + } + + var diffX = objParams.ObjectMiddleHorizontal() - FieldWidth / 2; + if (Math.abs(diffX) > GetStep()) { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + var 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/ProjectAirFighter/src/MovementStrategy/MoveableAirCraft.java b/ProjectAirFighter/src/MovementStrategy/MoveableAirCraft.java new file mode 100644 index 0000000..f1cc0a8 --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/MoveableAirCraft.java @@ -0,0 +1,24 @@ +package MovementStrategy; + +import Drawnings.DrawningAirCraft; + +public class MoveableAirCraft implements IMoveableObject { + private DrawningAirCraft _airCraft = null; + public MoveableAirCraft(DrawningAirCraft drawningAirCraft) + { + _airCraft = drawningAirCraft; + } + + public ObjectParameters GetObjectPosition() + { + if (_airCraft == null || _airCraft.getEntityAirCraft() == null) + { + return null; + } + return new ObjectParameters(_airCraft.GetPosX(), _airCraft.GetPosY(), _airCraft.GetWidth(), _airCraft.GetHeight()); + } + + public int GetStep() { return (int) _airCraft.getEntityAirCraft().getStep(); } + public boolean TryMoveObject(MovementDirection direction) { return _airCraft.moveTransport(direction); } + public void MoveObject(MovementDirection direction) { _airCraft.moveTransport(direction); } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/MovementDirection.java b/ProjectAirFighter/src/MovementStrategy/MovementDirection.java new file mode 100644 index 0000000..8c7cce5 --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/MovementDirection.java @@ -0,0 +1,8 @@ +package MovementStrategy; + +public enum MovementDirection { + Up, + Down, + Left, + Right; +} \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/ObjectParameters.java b/ProjectAirFighter/src/MovementStrategy/ObjectParameters.java new file mode 100644 index 0000000..36d1273 --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/ObjectParameters.java @@ -0,0 +1,25 @@ +package MovementStrategy; + +public class ObjectParameters { + private int _x; + private int _y; + private int _width; + private int _height; + + 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; + } +} \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/StrategyStatus.java b/ProjectAirFighter/src/MovementStrategy/StrategyStatus.java new file mode 100644 index 0000000..c3c3950 --- /dev/null +++ b/ProjectAirFighter/src/MovementStrategy/StrategyStatus.java @@ -0,0 +1,7 @@ +package MovementStrategy; + +public enum StrategyStatus { + NotInit, + InProgress, + Finish +} \ No newline at end of file diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DirectionType.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DirectionType.class deleted file mode 100644 index e7c83de18523be2ae85cf416713bfe32f7abebf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1102 zcmZ`%YfsZ)6n@^dUANk~IWEcs<)&<)APRUXArQdCWQwt{Wbsos$|xx>LSX%UyAc6H+G9oS<%m?*evQF=0wa+1-oTan(eY9oieOu`fN>OytogpifrT$~&93 zK<;f1wSfT)>gY3Z9XF`9?uUUZ&|fT-51bQc&Ub>w+*a*?rnL+da8t*yi4okQet!}+ zgXST%IdS}^yR|2;+!DA~4uV)vkO| zs-&P9q%<^|you~a2=mfRZA-*(# zEFF}zbVt(C`2e{B9}QPaYI*d6aWc~tK zt}yaq`W!_xw?EPA|Cn?v zunNhPPLLdWr)N=?EaeQo5NgSi7NOEVFrt5hs46Wec2#Xbx2sx<7FtcVkg<8{Zj~uK z#!{Q2-lnj=5<`AMIm6^B6bbIA66g}#)g&+^m`X~JIY;pnITmx-V31bM!ZM__K*Upo P7buo!PyYl@W&GJMXAsUw diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DrawningAirFighter$1.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DrawningAirFighter$1.class deleted file mode 100644 index 9bd108e877c27282d783c4d553008c772649ef6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 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 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DrawningAirFighterEngine.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/DrawningAirFighterEngine.class deleted file mode 100644 index 0ada8836d0065ea6b58710bc56707161b2c273e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1392 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 T{P}-GJiRU=AzviC0&e{W=?|-9 literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningEngine.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningEngine.class new file mode 100644 index 0000000000000000000000000000000000000000..2cac72a641ab32d2d9d6acb8599cb9e04c445eda GIT binary patch literal 1360 zcmZ`&-A)rx5dKcP+l6I;g;HpN@+;Uss8$4}h(H0;q-Y`rC0@W%Hf5o-q}{@;iN1k6 zfOz9IiGtCD2k)1;FKUJ5aD7__qAg! zn$>cd=!>0wJ#8|$=8T+S&NDaz!3`NrXqF%=Xo14uSuSWNIU|=TMptqfBc~_wr5w*W z*0LqN$j}=IzD@lX6z4~^DQJhv(3;WBm0aoYdFgORFIc6L&FF+%LYD#$x*5E+Q!18S zl0n(h>x=i?TF?uhgkA-G=x19AOXwtDG+{?kE_;I72fXZDZ+(y0h&V9nQf4 z1wn+Uk6mK+r6qtANYanjjx;cyeMmSNNU_}x1xs-p!y7=B`ZTq1K%u305 zfJv?~hUpGEz!0XtgWp4XG)}VVt9vw&>Z%2URAvmV7^gcJfoc^VB3w7wQ?!b_4D1%T^$^q4#0*8-;Jk(`;Spnfe+b7g zi@4n&^OMgrPs5Q5^n`!Hzu7r>iJ=ROhQ6YM+7r((685VD+a5t(*;Zw0`EJ>FmEAH@ zI>TrMIp2s>9CQz;=}V8V@m=9q6J?J)~C;y+JQc=))ZP@r=CJ7(j-!EMf%j yF-o+LS^P}dvsGC+rHm&uIn9fCJSB0swLnZcEo+f1!QxDWb1uX$#S(2ekoX6SPaKQ@ literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningOvalEngine.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningOvalEngine.class new file mode 100644 index 0000000000000000000000000000000000000000..0e6ca4a7174c043d51e923d5c025a31dd4a1e15f GIT binary patch literal 1372 zcmZ`&-A)rx5dKbgw+qVx%TH+wlwZM83e}3B6cH$3nt)tjP~rtFWm6VPOWG~mn&=zI z1Bf?XlPDNXcmUtRx9|#`v)f;gCOtbd=R0S<`DV_q>mOGD=CP>21wn?WLV}w?+t-iv zNLtUNB5OPQM$%$%&zKq0nq?4zBO40pP%lGK(EydfvzXIQGG-=~k1SJVR%2znTFMj-UltB`jGUb+QIA%%$!J&MK?g&3<(87Q zMp>M+4CI#qO`o1x7vS3j{LFLL_Po|()?7a8jEh854IvqYpVxKf7L zq1ecVj2?#ea(F?{o5^)6mpw4Vxp#nq0Q$L{0}NttnQP|5JrzS3W~isD9V}f@b+;3v z%Q-lxVgw=Lu}kXmA{pdhf_^-AxJLB^*P^6>7|-q+49zRl2uI0R`c9f6tt;82p5D-N zCija$(b_YqLp@bW-4-_HP%iaF3=#(h$!;%0LyhJvL5*Cu^yI;+eq<++@sz=L*8ngm zyucFsP?a2&Zp3ct&sCrSNkw-_h{|Tw3F4P@x~En4o#v5{TX{>*S#QeLCec{W7IH~r z+2mSzZ;LR_dyRgYM;91I>F?q*Ne@UMo8AqrW8_8X%jheGF2T;paABNQzD+^e2GpYc z01wGyh~g2g{P0IYyXiaj9r9}UYF3yOJ!0T9dcz(uIxYF73p93pf)ese-_UaYL1bV4 z{^m&pJ4vT~SRqyo=%qA6Xv8qhVi=m8xQ}ohWKYm4@icHKaO*K9iNq8|n;=|6k@1AF zu0Mohm`2PY$O7c^lc%HM3wTF=BCy%odx^da42Hg`F2w%< D*oGle literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/EngineCount.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/EngineCount.class new file mode 100644 index 0000000000000000000000000000000000000000..fc2ebfc97fa9e61281f3617ed16fcafd6a609ee6 GIT binary patch literal 1298 zcmZ`&T~8BH5IwiM+mB@n>k1SqC?aYm z5*T^igHeZt%Mq9c1~EjWm0I0%1O`*-;=X-o=W4cB&28@NJCz`>BY}|!Mhzr!g{u4o zta;4?DtBntn$G4MfyGo;_G-;;H1b^srNAc%^4%4fK=O|pxQc56;ezYA!IHpmH&rKd zBVFb(uN#=e4FR3AUo;PP9A7|eM4{;vy~RwoNz01}h#`tt6b2)+2JT>*<&pz51d^$A zFTtp_-zaspzDrsS6zL+{<+tpe8l7Y>D4FhY0RmRBUa@Os+jlv;L!o;10Wn$s%O+qx zcY?k8?n~PzOyKy`uo~>SWOS!XiCD?4dUnwCiAPP*!~*fE6LgEEq|zI-QH4saqc$B7 z?BAOy^yqylPbEvVbQNda<-yIat)AiaSe_$&6Z8+zmPdKP0kX8d($dmW#NtZ?%p~tD z`C*FBV4CuBHeEkOfv9Y_4?383m|{$R zPmadF?$dCJED$HSNl||3c|dOn52=qw$kUgn&5`BqwaiCMypw=g`nCr(WQBI)TDyX& z^XC3Z=3aqB_#4Ew(t=XjR$GXawzU>r6YFqZwUf@=3TaNa$S z=j{$)j)4n{FbWlKWhT>#Mdn<}G?T)GO&I3<%2~l>%64%slA6%3M7?d!u}}otkH!ar zcl=s}iNASEysg<<@yjVos#zHP;G!%_6+|C%Up6WctE>=u>~DQ)emDd|N0$PYj_JaI NiE`1?M3)#2?*$hiGmZcN literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/EngineCount.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/EngineCount.class deleted file mode 100644 index 7157044781b84dc284c5a6f8644fe7513e877d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1238 zcmZuvT~8BH5Iwiu?Y7HSYDFpt@*!$lgaU$Jtq36yNvfC>n-HItvX+vvP0AKu{Xsrx zQ6U-)&;BUmnQhf=OM3WGtaZscaBEX_?=n8Zy5 zQ=(tA4tJfVg4&EiH|f1COm`Gg7ZH#lidYnuAg3+d#f%KeZ{SEFkt(xHlbCLx=GuphPyRn5R`T5O_8WUI?Itmv z(`0d)w_l?$oj}*IQmyLRUaLtSEzRz@FIC424knz=Y;tD`m3nuwG!Qlx$SUwcPsPi5 zCMt26D$YhtnoI|l56QpE+aijc_tt+EW1cOLjNpg7?-0q zNh!x{BmM=K&yoBK(dE^hyyC80bS3LOV#Gkl&|Oj)ezoF6<|W z6P}<=F3&^W5FW9P$H?<5-R3BzdOiCI@T41D=Ih8=_{P}eR9HX7trLWOEv*^8X82l0Pegpx hJVW*baT!R5H|Y;61R2Z-|EFmWb^Bb#Q{qBc`3*ym-%$Vn diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Entities/EntityAirCraft.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Entities/EntityAirCraft.class new file mode 100644 index 0000000000000000000000000000000000000000..c01e072d39bf3d395667806353cead00251c7dbf GIT binary patch literal 859 zcmZ`$T~8B16g{`ykG8C3=?A5tB8s}~1N%yXF~L@oCXGJS;PbW}+aaY(wu^*c;GZ#3 z5*rg9`~m(bg5-gD3V`hEQqz!AJ6a>&~-9GI{Ojn~seCQ{4-om?Kt zxD|&V6N1@06Jki9j-nJC6j35rAA}r@xlC;ZI}YxlOensJhL^2q62%0!dlG&MgYY5= zG;&yii!~b+2UXO#uFI2fItt$PPsD(mSuf;NCNBwjZ||63^b&DKD2zmsieS9Mcqy66|FwNzd4nBx*5&UqIPx!X zmQ(KQ$ad>k*LM?ybu{?gU^L)J98Lc_=!<^VNHhr3fKFU1aCPLpl)R%5kas8TGAaU{m-AGmN-lbtbKO_T ziJG3LG7)I>qlka;Je&>USQmt_uhx2laA>H@}_X)GW{I%nJ1)H&;I zJozNkMI8+^E!?r;U|XQQI(3kQA5wwJ3pH2ik$~%;9v7!|&jg&QOjq`D{BE&Uz#PPp zB#WV%%h#8m$1-^zj%Um`!*~+T&ca0LI8U1CxmpN#!`0PtK@Pbchi5DezdI7BGt3DJ z9IRQmxYTH*DU=r%Qbv^OlpU|6mYcz`Ky4gH*SXYr3GwZ_(i44O-rtUP&J-vpf*334s<|zB`P1w1T!A{DkD#vj z=wO!-6~i9iBG~#?0NZQ9_tt_pis0s2u!H;g*dp^5m)}J@8}SO3Zj+PK-aZ~=ggt8ci0bLwV+vws-V=Jdn}?@V RQ|s&D89j@b14bqI{{Z+Ipilq+ literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/EntityAirFighter.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/EntityAirFighter.class deleted file mode 100644 index b0b442cd85d2c741cab7b54a2d5a13dc8eb68877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1325 zcmZuvU2hUm5IvWVUBE3+lv?bEv}g;f7Qd~jF{#By5~4;7CcG`Mfvw0Ay0z&q@OSub zq9!FKKKKLtQO0v`DQ!3Va_7$6IdjjPnZN&j{{gU#rwN1*))6rfg(i^Rvp!qpzBTBU z-?aAZwkM!Ha|Vw0Tp(O5HR6aNt|MXK5)7ul9C(g*wC#*`oo>&wM*`9M(6&1QqAGKf z22x0~$Ol^{FkF%0jDgFzA`pM!c8+%3zDr=brvA1Ly|RjI$;3GWS7l;qyVG$z#~oOG z^(fzR2CiX&yxw+Q7H-Pel7VFz)8D!6kG8ij5ZQ4%HVf38f&Kd6Q_CK`w_1HhGBvkt z^&8g6k^UqY@p=wHnVP?`ErD3q_9o3yiYnPNaM~9m6#;{hb1h|xC4W<_%^Y7hWLfv@ zA!Xv5>W1Z-0tvcjjZ`@Xf%Rgw;xFp=o6S;#lh{9*gmyU5KHfT0J7rxIlrj#bjQZ$Q zxJ2DO7`5$PM~ap8>#-q+g%wI3;v#80xe&aC}UQJ^Pq12=hI1Rq2H#>WuyJWs${Ab1VyQ*h{{uz8G` z?>=xM5L`rQ3O=QMjM*PPa54~V27|9QW1xpUy?6uc1#Ui5>P0>Ne6o&5ZjQ;kuug1In;ZWhOwF>{eIX3bo5jI5c} z#+Wy=`WTC6>#z)+kUaNh1qm`ra~0;e2#Z{WRjjEmU#XnJgfBn9y~*knaGwadtpz;b bPDa%2A#YK2d&Ire)a@~EI*C4^7sBR$1FOKa diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$1.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$1.class index 2b3997c55ced67b7fc9451772d46351e1da156dd..3706c14e1bdbfb340e11661f7dab887ab5c3558c 100644 GIT binary patch delta 358 zcmZvYOG*Pl5QhJrBoot#v5n@TiEra;VIM#QM13wQ?)Ayyj1jf<}OtLm?hqMwRmpMQM6y#ola{mA>HDU=ynCq@mEIEilee^n5h zP8?lYZ8!vG^Qe?Chk1r_=f+(BO&Lm|(aP$xi=GZGLv`o0rv^%1sU(u;))4hzx0^?e zVaW~D&`LefiIqWU(+BS}y~}j#RWKotgHNY<^opocZlqtC=4gRxAB^H57Ae-8gQJNS zRRDK;#3!92+r1$3GFB)ysC7*C36k%@rA;Sn0aPbR-)u0JRBYtZX7m&zkz^u4o;bm(`dXuq+nW~vVD4%@t z-5=oNR&CWjtskLEs`dx?dwky7(~~S1sWMgR+tc^lzW1Da`}4n_{sAzHwIsUGts!Bc z2fYGj(GNCfouKH{8<7ms(*nIw!wJ)u=__?Q3p)Cc)Sw&ahe7{y`-Po%ZLgkxvhiG2 zBgWo!JSUnF=+0y-8U_T09t8Hb=XmvlBsz{DnM4Xh8ioxV#Sa1lov8$df2$n|6gXNs zd|g4qvHy$NiX1op)b?urrj8LL)pF9nDU1qep4^Enk5%?$EGuhiIL*8<2YWlp&-<<) zDEx%N|0s~i5Ts)aXBFQx$uZ2zRutx(f%C`+^s77PeBYI}7n5FBx)!DCx~jNf;4bb_j!;JJ%qz}I*_J9Mb>F~G zm?dQe@k1wad{U03q$DZK8+f3mBB45@p(rr6&sn~ZUX-7$s+f`!M$(f3Tb%iJz_Jy_ z&-*nd9xOSYT;AH;kij#1!{y0P$*?$PgoI2l1aa;lD)^H*cYI`kEPE2zq% zqgV`g7J5nHS=WMBbt$S>Z`I7!Ez2-k^h3^%VR_VR-nGL}hM3?3?t{PrglVcr%y-?z ze?K15E^;?Rt4{Q(3m+k-cA@kME7jTKCyfphSA7VvGqK?Z*yi$7`qBI+G3#+psEB-q#NJ<9l*0*&A;p7NG1B=C$G Zy6_7sv@EiB{d=??0gWKWhL0 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$2.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$2.class index 98499a1b0ab1909d7eda59c7e3ccdce1afc98f43..a8ad31f696f11b76f4f8e06564a3b39cbb8734f3 100644 GIT binary patch delta 357 zcmZ{g-!20|7{$-5Zdb>uRa(^l|5Tz6Ad!@&Tu599_oLZvx2=_o375Qr^g%@8PvXJ@ zcm-a;E8y%3u1qrLeDi%LzkHcD_tTayA5YH!Dp!FU7f~1mXX`&zCDhwm zHH?IZK?gY(Ll_pw)=u>aXSFbB8ea>zb?qzT?;p4Px)I2)?6uUnDtA;Aln;z1b7S?$ zL7{tNy?0-G4lnZ%o(CIg?qKouVT3-)YLgy!WNGalqVx#oHpz@p(-71uiqyh)3gejI zi}{2mFv;3x?8;+!3e(gWyY-8`gUG4=2MqjiWy0D)2D|^TXD~}p3UfqRn8yM=#ZSp# PG3j_%qDyAt-FdzM-Cr{& literal 1628 zcmZuxO>Y}j6g|%#d+f<1cAYwq(6pfq#dgxTB-EvKnv&*&rZ{QHS7}-(6K9%Cac08I zIDs9%fF)9Q>?(nTR8)+F#D`e2LPBB?s@0U_kVx+ zHGpxvl|%$l6^f1+;sWVu$K4vY+-YlL(>LAzVS%{6X?gwUxmIaiENe(0sY27y2A%5< zj2)v`GwhAx&9w(+)#u((%eMS6foLwjqM-vR6=@yEkP+w!+>KqoXzrM{UmUOcmSa!J zxj=Hm^cS7FTQvoa=kk?DYv4V~!H@f4mGP#I;;*g6zr z(RaCn=kLKYDo*I=#mScQhYkXXO~c!qaMl@t70e{iM{F&~v%D?0pVn~({Vddcr*70d zfo$&ZS@Ww2oE6Z*jg!uSIql<0tJD#aD72ipTr=}sTk5x1gY<6WuBGaTX&6J zn^pXGS!Aj*c?c~hF^mxvFY35}l0f^UC1b6|qB9kzYSdN? z*OK-=s7Rs9wN|qGhs)H)tm$t$>+^<7Iq_l8FJ%NQ&YSLiz8P~};MD%zAF1iGJdj}S z6QMwkc5133lx^mJV%iriwdR^$y++2xDsN%YH>z*X8r%CtXyL1wwq%)|t(6Q(5_#|` zyIONRY9}m;lAbd?|GMKbraohn(21Jid8UUx{v8q!n1M*AcBs zw8FsW5QQ(GJ`Q|l*~hsP6!0ATuFwlNF;9#BK{SEaIFHfo{WP5yu*jZa#Rqhk$@T^s zX#WG|>Ht3<6ke%7^Bv#_{e~f1caoIGDZl(;pm1vv(G5bF6eL znNtls`w*pQDfS5GX+Ia(XBBDp(SAO#yJFH#)6NHWJYI@rV;?idn{4unvh}hJv0Y`G zFFb*Gf`QNQLIW4a9$};jTnT~GP2lAaIMxIvB+&bi+%ZT4(~`L;By%OSvmYkUBb;5p zN4SVjaS4z49>2jAe8=QJ@b~>ACh!a2%5S`(-+3pJ=>in?drhYIu!LpO+J;}Tf?FiE z9Y5oB+-9y-dY(bsKbS;ZMMOo1iXI^wkV>WWlj(H&FSKh6d55kM+{GIl6~57Az)6I& MdqgxQkTT%+FQ$}q#Q*>R diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$3.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$3.class new file mode 100644 index 0000000000000000000000000000000000000000..33cd85815badb5d302bc75b74fdad8340eb990b4 GIT binary patch literal 1705 zcma)6-A^1<6#w1b*`3{CU>7JT2rW`@=DS3G)I(2zh=wX&tR-6X*`qjXghS?wYoro2dAfV^7Po zKyuUcmz*89VhWtfWQ&iwE~q#q&@RRA=Da-4}1W)tY6Y%PehvMtT~b)3Zj3pL-_F{++G zN9K60*>VEs1hmj_%Gt9M$Taw(x#1@;D9{w%FG}c>7{&z^BRX;*^esn`7ihh`?izbG ztKefzy2b`E>nTnh$h_R)>F~CY#4{LG@vM&LkQeALIlE?!P_t6QH#gtQ9SWu_mruu+ z5Qwa73k(zwZ~j}ANWOp-s{ z%k&iqq7+Q%xDp5?ic&D8V_FJg0gM`9d_~7q*`A6_O2wQ&?}?pPv^?LmO_yzzd9>5B ztF#aMAXT(%bAG3`X1dG9T9uvAR&**xb=7b!$sY(6IW_X`=*ta^7T9Pd)8BH|7YvuZ z$tj~=$_OxDFx?Ffpt&w^=Ae;I9FT%cNHBI!*li~(HCim3fwq5j=D`H8ab45fsqz^_ znNPFi8OL?%9MSE`Q3MhuJMe9W7kf7S8mQ=hd7=w#LK zJkvuTe>DjR%tEBo@^`~OP=wTkSGgB?8s{!0+ThS<5QCpXeGurBxW;J-%we8uXQ+j1 zSRhCJz?;BpJjbZ^ewxaQSmH{z;sdJ7VEaRLG=GEkIyy?x@!?BKBp>Ti>gf7dIsq(_ z@}XJQxZnEnj|(;K!yVUu{GIz)$IZnX+>2dG+nG9^yo-D^AG?Q(bDhCap9bv!?Q52FpiOQE2@A$U0y zv^E5jQqX&s*wINHGZMKdByxE)b1f0)d7c*V5uy16%XolQe2v%fEz0;Fx9|fK`x$Ha z6&3u3^#JKXD74*gAiYn!6~fwtUub=uz&7J2`nbVZWon*9)8CjvTt!4hi;8X`2}q?< l`ss8!{U@3=y1Yr%2t&TXUEz!-156@3-KIoi0NDoo{sFMQl^Fm4 literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$4.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/FormAirFighter$4.class new file mode 100644 index 0000000000000000000000000000000000000000..d4a4cdec842bbd70f0316eea36b898373d78b903 GIT binary patch literal 1880 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 literal 4192 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 literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/IMoveableObject.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/IMoveableObject.class new file mode 100644 index 0000000000000000000000000000000000000000..75624333cd1acac49e7182a93fd04456d8bffc81 GIT binary patch literal 349 zcmbVII|{;35S;ZF{~z!GHe%A416T>71Qdmch22vYiNr*nPr<8McmNM2Zu~Ub+3YUE z&g{(I?w2coK57ZIIIMH}~p5*i~m zuXz?90u#g$p=~?kAHDaI(rU+s^`S?wgzFpL6VkTh5h`fj{Ph1(H#U@T*=fA#{3&t5`VHY9=66siwL CV`60h literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveToBorder.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveToBorder.class new file mode 100644 index 0000000000000000000000000000000000000000..64a6452a5858dc5249ac545dc7cf6d674d2b37af GIT binary patch literal 1229 zcmZuwTTc^F5dIFk?Y7$m1S%Dw0i9&zzB zzs(Ecndz82TyUq#FcOPrS{l!nP3!1Dr-lm#y3qYUs^>cx0&7-jOEiWP-?X3j1`S+9 zFN3~f@p3U|6~z_Gv-rIcDVdX3uA5GYi)CIFR>c&SO~d?le%pOZ!ictFoPQI-Y0nC? z@OIVQtrIY6b86TOo}#t6`Lce#qP1u3J*U7|EUBRDUru9ky|i&3eZ%snfV$u%dyAqJ zos3RT;tSXbIc>O2R$j}}J7kSo0q)`+MJnziP8r$!iK->&qr@q+O!5aj%5m}(?TOFm zImCqPo+9){#s`Q{e3{(vAwsTOzX~5fQ;(o3#{{Lg<0HgYlJG!-{E7n55h6QEWG2v# z6^bRb-rD#&H4hdsi76sCO?Lq(X9#HMn4G7_#!OT4FKSY$AlG26o-{}oX9vDwi1MM2 z2o8KefZS`jBlze{L;ab&=dewMNF0rO!ivAWrH>v0$6+zelM&f>^?=t9=S#%#o+KifPgrbW(hVA*Q;9 LcJY8Xv|;`a?B@Q= literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveToCenter.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveToCenter.class new file mode 100644 index 0000000000000000000000000000000000000000..d00a61732e97027becd3687315ffdb5802a247c0 GIT binary patch literal 1274 zcmZuwYflqF6g@+?-9DBg4+{ttDS~YgiumRw2qMH*jV&$U7q{I37E6~b14e(03DJZv zd?7JtjPa|9f5smmG2Yp2D*>ByX6MYgXU@HM=I5WU-vP{ECWr=jR45v}@Ge&c}hzn&*!zl9w%QoLx6`_|M z>xMOTu? zP}74y;Po619;1<#tw!<_BHr=`OxBQBF0zk7LN3)fQOW77A(BJLK2+rZisz8TJ&vIm z`Iol5P$BPC2tiz?afIwWL?f1IEzL$;Lshe0 zxNa_E^l*R{%B7WZX(Q+D6d9#|C!Htrrjt$(q`XfMV~R6SMIO*j1E&81R&Nf8 literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveableAirCraft.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MoveableAirCraft.class new file mode 100644 index 0000000000000000000000000000000000000000..e33fd979de1e18406c3bafff2bee53f3a85f3466 GIT binary patch literal 1412 zcma)5YflqF6g^W~w!3bD7I_FLARui~>J!u=ir|B!2uVp1znG;R%OKq)y90(l;VPtWxUhfEfvt%P3O+sx%bSu=g$26_2nCYIm{b~phZK}L=3GA9b49(mD{%L zYHoRBix{64oMmW9XG%Ka&@~t)&cS3DUUK$$joY#)T}$%neoi^8jcqy%l390m$V*F7tZX6YSDslsh`5J^O;u~t}_gs3SA7l7xsQI z{jY{)N(|9?r@|T93&Q3vc555lT~+O8NEMv2wOz7Yq1J&jDmR74Fmg7_=6jQ;yI2YC z%5jU6Bxukx#}ld;hB0dUsY*^Zmf#XaX_enDSvvt2)n8xL#Hzcm5W=eUN+=b>=xOZm zuwy|PjOP6R>;kE06rEkS%%2LSSeL?R)?iXSM!HFHdZP?E`bX5WqlX)#c?>sbyh*EN z@<+(FXOF@&3N1Pvd_6~QeUQ;5^iq8t!0ZK;!JBMUk@i4J-UsX765 z7(oXF?$bPqNKz5Vqc}>4PQ?G4}ogt^Lw`a$QYmW`M>pgUJBn0Yxi?bcHc- wh>4Q`-A#Jv4Lx)`z$`&9Jj9~_YBqo}La4Q4oqaMrO;|<)%V=QD)yY5p4MjOV8UO$Q literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MovementDirection.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/MovementDirection.class new file mode 100644 index 0000000000000000000000000000000000000000..5b5f329a533af645e5dd4a542cf46459dd74a1fb GIT binary patch literal 1232 zcma)5VNcUw5PsgZUANk~Ibg~J#W~yt%0vOt5&{8COokXMOBO$Mql}WSHKm*Jn?FfM zB1EI%vp>ps@5`nmO0p*H_3piU?w+UDpTEBT0I&{2MT8-@?RV^!?S*C-SfSngQ0@md zoxpB{j_<|6AnQ;NWr*y)W5`$fIhPk1yeg(6&a322|Gj{@qC*#fioGB5jH^15JfOUG zng=3sO-C9d3~Ii*UfJC;8K&P3(@(<~GAc%NT*nOpY`DH>GmI8Xl|!pzm0ingmUrrh z#L3W*#Z46xIwo<8hWMMX<+WSXyJNX+duN|vu{cn@;aW#W#z27RJ6_Wm?7#s8{*;b8 z$T37$9M1_?88U-Vy~-D*Y7B}-LQKUFk3o+i$-R<}8O(AK#3V-yg<@$a8K_~uMBecC zNP%R<@$8rFR^1NXSap{o%m10AG>pa!>5AX5+^Q8g9IA&Wdsd5J)Bh^NklMDx1Ap(8 z6;MuS2Sh~<4;(Ua(`kBE*bb;vDwe9WE-MYUC)Uyc7MFBonDJH(2F>)_LBoFTaH5(1 zp8nb8IsU2F=1Jl#{RGO|IA3dkEG??Aw4cJ#S^}voUq+ru=l3y7bq~nPk>!`xMd}Mi z&oK6hJcc=XM#Y&#`I9IkBJvl=@(L}@W==7F2FCLv7xEucL_g2MJRXtvm~Ms2KJrxB zB}f8no~%Si>dfrK32uL;*UOMpEN~VADIOs@^iKDpC|OEre95RKr?d!}p1`E~9jqpG zA(=I~3)QSCT@tkx?IL0FsV}mO;R%*{5RD#$@r@ADccl~Lk0A+XS{9BfoO_CJG~pDY m!bzN>c#IS$bKW3Bl7j#fWV1w~08U0Cs^`-$<0+j-@a#9sM*~>^ literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/ObjectParameters.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/ObjectParameters.class new file mode 100644 index 0000000000000000000000000000000000000000..8f1a1748036d4effe3988e0682ded1aabd4d7d84 GIT binary patch literal 1024 zcmah`TW=CU6#iyeSXs7(7O0lCR;(AwgS<4pXiU7sNJ7=vhF2V5glU#tGfrFa$sgp4 ziNwSQe}F&AcxJeS&`sQA=Uisach32~KYxGy2JjSzSvW{}a08@~VW=L*7h)tLeWDfD zVlZyJ>7I$6e#;df2`$to2B-6xfi+F#wE$UD=5)p;%moNcnCV=~z8;#?dVsu1d7Yt< zgQ51ZflUv^040Y=2m4_g0S?GZ!vH2yemmV0Lgo=5(R_%fOY zTT@n!WxpSaSFw^`;z;w5p|pI_7D`JRh_tW zQeI{Kf#C^NB6NdvbIFoiFk@%^!x8u5pqii{-XVUB7#QF^3hehDL3Oi@k5uu~*p6cRB?xJ})S3SX^iK&Ac@h5F8f2-%&$tM5&S zp0Yc^+IM>8z(`ZEDi%rU5-D89I;mNtX|@T;$aO^en^#l0jCU}Tvw}P1IrjE0c`57N NBhRHd?o;HT_79EzmO}sl literal 0 HcmV?d00001 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/StrategyStatus.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/MovementStrategy/StrategyStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..bd08a97b001002b1ca0df2cc7f61e74b1ab9ef0b GIT binary patch literal 1172 zcmah{?@!ZE6g_Wk*R2+r1wkf=Aj$^HGADeiBS!q8xMpIy>Q0(6Tmb$^KTj4Ri4_3Uu z-D@?D+~|#SO`K@>4>R;)1apHZ$kufyKa0E9v?UnF|ixb zgc_fC3|ZT&2b`sdRHaa?axm6vey2yvU0Sk}YkjYMz08TS!&X#tw>@cbsCQx)b9G}(4llsSVN4>Y56I=^$PuA&zkpfdi_E4OW*t4X3K$s;XEj7!X%V?dt#TGLASDhAl+JWo7JgQ?Cj LSFlQ43NL;G;+pt# literal 0 HcmV?d00001