From 021b810748aaaf429036ae9b73a60eff71be026f Mon Sep 17 00:00:00 2001 From: artur-kalimullin <144933634+artur-kalimullin@users.noreply.github.com> Date: Wed, 22 May 2024 01:05:19 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=B0=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=963(=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Drawnings/DrawningAirCraft.java | 13 +- .../src/Drawnings/DrawningAirFighter.java | 9 +- .../src/Drawnings/DrawningEngine.java | 6 + .../src/Drawnings/DrawningLongEngine.java | 6 + .../src/Drawnings/DrawningOvalEngine.java | 6 + .../src/Entities/EntityAirCraft.java | 10 + .../src/Entities/EntityAirFighter.java | 10 + ProjectAirFighter/src/FormAirFighter.form | 131 ------------- ProjectAirFighter/src/FormAirFighter.java | 176 ------------------ ProjectAirFighter/src/Main.java | 12 +- .../src/MovementStrategy/MoveToBorder.java | 6 +- .../src/MovementStrategy/MoveToCenter.java | 3 +- .../Drawnings/DrawningAirCraft$1.class | Bin 826 -> 826 bytes .../Drawnings/DrawningAirCraft.class | Bin 6026 -> 6136 bytes 14 files changed, 60 insertions(+), 328 deletions(-) delete mode 100644 ProjectAirFighter/src/FormAirFighter.form delete mode 100644 ProjectAirFighter/src/FormAirFighter.java diff --git a/ProjectAirFighter/src/Drawnings/DrawningAirCraft.java b/ProjectAirFighter/src/Drawnings/DrawningAirCraft.java index 3bb5bcd..9f102ac 100644 --- a/ProjectAirFighter/src/Drawnings/DrawningAirCraft.java +++ b/ProjectAirFighter/src/Drawnings/DrawningAirCraft.java @@ -7,7 +7,7 @@ import java.awt.*; import java.util.Random; public class DrawningAirCraft { - private final EntityAirCraft entityAirCraft; + public Entities.EntityAirCraft entityAirCraft; public EntityAirCraft getEntityAirCraft() { return entityAirCraft; @@ -20,11 +20,11 @@ public class DrawningAirCraft { private int _drawingAirCraftWidth = 66; private int _drawingAirCraftHeight = 74; - public int GetPosX() { + public Integer GetPosX() { return _startPosX; } - public int GetPosY() { + public Integer GetPosY() { return _startPosY; } @@ -36,7 +36,7 @@ public class DrawningAirCraft { return _drawingAirCraftHeight; } - private IDrawEngine drawEngine; + public IDrawEngine drawEngine; public DrawningAirCraft(int speed, float weight, Color bodyColor, int engineType) { entityAirCraft = new EntityAirCraft(speed, weight, bodyColor); @@ -68,6 +68,11 @@ public class DrawningAirCraft { _drawingAirCraftWidth = aircraftWidth; } + public DrawningAirCraft(EntityAirCraft _entityAirCraft, IDrawEngine _drawEngine) { + entityAirCraft = _entityAirCraft; + drawEngine = _drawEngine; + } + public void setPosition(int x, int y) { if (_pictureHeight == null || _pictureWidth == null) return; diff --git a/ProjectAirFighter/src/Drawnings/DrawningAirFighter.java b/ProjectAirFighter/src/Drawnings/DrawningAirFighter.java index aa62b56..9f44440 100644 --- a/ProjectAirFighter/src/Drawnings/DrawningAirFighter.java +++ b/ProjectAirFighter/src/Drawnings/DrawningAirFighter.java @@ -5,15 +5,16 @@ 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); + entityAirCraft = new EntityAirFighter(speed, weight, bodyColor, additionalColor, pgo, rockets); } + public DrawningAirFighter(EntityAirFighter entity, IDrawEngine engine) { + super(entity, engine); + } public void drawAirCraft(Graphics g) { - if (entityAirFighter == null || _startPosX == null || _startPosY == null) { + if (entityAirCraft == null|| !(entityAirCraft instanceof EntityAirFighter entityAirFighter) || _startPosX == null || _startPosY == null) { return; } super.drawAirCraft(g); diff --git a/ProjectAirFighter/src/Drawnings/DrawningEngine.java b/ProjectAirFighter/src/Drawnings/DrawningEngine.java index ded7e3f..acb4f6b 100644 --- a/ProjectAirFighter/src/Drawnings/DrawningEngine.java +++ b/ProjectAirFighter/src/Drawnings/DrawningEngine.java @@ -35,4 +35,10 @@ public class DrawningEngine implements IDrawEngine { g2d.drawRect(_startX + 30, _startY + 17, 10, 2 ); } } + @Override + public String toString() { + String buffer = ""; + buffer += "Тип: обычные, Количество двигателей: " + _engineCount.getEnumNumber(); + return buffer; + } } \ No newline at end of file diff --git a/ProjectAirFighter/src/Drawnings/DrawningLongEngine.java b/ProjectAirFighter/src/Drawnings/DrawningLongEngine.java index cbf1dc9..3a31622 100644 --- a/ProjectAirFighter/src/Drawnings/DrawningLongEngine.java +++ b/ProjectAirFighter/src/Drawnings/DrawningLongEngine.java @@ -35,4 +35,10 @@ public class DrawningLongEngine implements IDrawEngine { g2d.drawRoundRect(_startX + 25, _startY + 17, 15, 2, 5, 5); } } + @Override + public String toString() { + String buffer = ""; + buffer += "Тип: длиные, Количество двигателей: " + _engineCount.getEnumNumber(); + return buffer; + } } \ No newline at end of file diff --git a/ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java b/ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java index 066274b..2bed099 100644 --- a/ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java +++ b/ProjectAirFighter/src/Drawnings/DrawningOvalEngine.java @@ -35,4 +35,10 @@ public class DrawningOvalEngine implements IDrawEngine { g2d.drawOval(_startX + 30, _startY + 17, 10, 2); } } + @Override + public String toString() { + String buffer = ""; + buffer += "Тип: овальные, Количество двигателей: " + _engineCount.getEnumNumber(); + return buffer; + } } \ No newline at end of file diff --git a/ProjectAirFighter/src/Entities/EntityAirCraft.java b/ProjectAirFighter/src/Entities/EntityAirCraft.java index ae2634c..7313e3f 100644 --- a/ProjectAirFighter/src/Entities/EntityAirCraft.java +++ b/ProjectAirFighter/src/Entities/EntityAirCraft.java @@ -25,4 +25,14 @@ public class EntityAirCraft { Weight = weight; BodyColor = bodyColor; } + + @Override + public String toString() { + String buffer = ""; + buffer += "Скорость: " + this.Speed; + buffer += ", Вес: " + this.Weight; + buffer += String.format(", Основной цвет : RGB{%d, %d, %d}", + this.BodyColor.getRed(), this.BodyColor.getGreen(), this.BodyColor.getBlue()); + return buffer; + } } \ No newline at end of file diff --git a/ProjectAirFighter/src/Entities/EntityAirFighter.java b/ProjectAirFighter/src/Entities/EntityAirFighter.java index 2098795..250ee19 100644 --- a/ProjectAirFighter/src/Entities/EntityAirFighter.java +++ b/ProjectAirFighter/src/Entities/EntityAirFighter.java @@ -21,4 +21,14 @@ public class EntityAirFighter extends EntityAirCraft { Pgo = pgo; Rockets = rockets; } + + @Override + public String toString() { + String buffer = super.toString(); + buffer += String.format(", Дополнительный цвет : RGB{%d, %d, %d}", + this.AdditionalColor.getRed(), this.AdditionalColor.getGreen(), this.AdditionalColor.getBlue()); + buffer += ", ПГО: " + this.Pgo; + buffer += ", Ракеты: " + this.Rockets; + return buffer; + } } \ No newline at end of file diff --git a/ProjectAirFighter/src/FormAirFighter.form b/ProjectAirFighter/src/FormAirFighter.form deleted file mode 100644 index fd0549c..0000000 --- a/ProjectAirFighter/src/FormAirFighter.form +++ /dev/null @@ -1,131 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/ProjectAirFighter/src/FormAirFighter.java b/ProjectAirFighter/src/FormAirFighter.java deleted file mode 100644 index cf00e67..0000000 --- a/ProjectAirFighter/src/FormAirFighter.java +++ /dev/null @@ -1,176 +0,0 @@ -import Drawnings.DrawningAirCraft; -import Drawnings.DrawningAirFighter; -import MovementStrategy.*; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.LinkedList; -import java.util.Random; -import java.util.List; - -public class FormAirFighter extends JFrame { - protected DrawningAirCraft _drawningAirCraft; - JPanel PanelWrapper; - private JPanel PictureBox; - 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"); - buttonLeft.setName("buttonLeft"); - buttonRight.setName("buttonRight"); - - InitializeControlsRepaintList(); - - buttonCreateAirFighter.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - 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) { - String buttonName = ((JButton) e.getSource()).getName(); - boolean result = false; - - switch (buttonName) { - case "buttonUp": { - result = _drawningAirCraft.moveTransport(MovementDirection.Up); - } - break; - case "buttonDown": { - result = _drawningAirCraft.moveTransport(MovementDirection.Down); - } - break; - case "buttonLeft": { - result = _drawningAirCraft.moveTransport(MovementDirection.Left); - } - break; - case "buttonRight": { - 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 (_drawningAirCraft.getEntityAirCraft() == null) - return; - if (PictureBox.getWidth() == 0 || PictureBox.getHeight() == 0) { - return; - } - Graphics g = PictureBox.getGraphics(); - g.setColor(PictureBox.getBackground()); - g.fillRect(0,0, PictureBox.getWidth(), PictureBox.getHeight()); - _drawningAirCraft.drawAirCraft(g); - - RepaintControls(); - } - private void RepaintControls() { - for (JComponent control : controls) { - control.repaint(); - } - } - - private void InitializeControlsRepaintList() { - controls = new LinkedList<>(); - 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/Main.java b/ProjectAirFighter/src/Main.java index e514ca2..d97dbd3 100644 --- a/ProjectAirFighter/src/Main.java +++ b/ProjectAirFighter/src/Main.java @@ -1,13 +1,7 @@ -import javax.swing.*; +import Forms.FormAirCraftCollection; public class Main { public static void main(String[] args) { - JFrame.setDefaultLookAndFeelDecorated(false); - JFrame frame = new JFrame("Истребитель"); - frame.setContentPane(new FormAirFighter().PanelWrapper); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setLocation(500, 200); - frame.pack(); - frame.setSize(700, 500); - frame.setVisible(true); + FormAirCraftCollection formAirCraftCollection = new FormAirCraftCollection(); + formAirCraftCollection.OpenFrame(); } } \ No newline at end of file diff --git a/ProjectAirFighter/src/MovementStrategy/MoveToBorder.java b/ProjectAirFighter/src/MovementStrategy/MoveToBorder.java index 52d6ad6..e6ce28b 100644 --- a/ProjectAirFighter/src/MovementStrategy/MoveToBorder.java +++ b/ProjectAirFighter/src/MovementStrategy/MoveToBorder.java @@ -1,18 +1,18 @@ package MovementStrategy; public class MoveToBorder extends AbstractStrategy { + @Override protected boolean IsTargetDestination() { var objParams = GetObjectParameters(); if (objParams == null) { return false; } - return objParams.RightBorder() <= FieldWidth && - objParams.RightBorder() + GetStep() >= FieldWidth && - objParams.DownBorder() <= FieldHeight && + return objParams.RightBorder() + GetStep() >= FieldWidth && objParams.DownBorder() + GetStep() >= FieldHeight; } + @Override protected void MoveToTarget() { var objParams = GetObjectParameters(); diff --git a/ProjectAirFighter/src/MovementStrategy/MoveToCenter.java b/ProjectAirFighter/src/MovementStrategy/MoveToCenter.java index 8a314f8..0249179 100644 --- a/ProjectAirFighter/src/MovementStrategy/MoveToCenter.java +++ b/ProjectAirFighter/src/MovementStrategy/MoveToCenter.java @@ -1,6 +1,7 @@ package MovementStrategy; public class MoveToCenter extends AbstractStrategy { + @Override protected boolean IsTargetDestination() { var objParams = GetObjectParameters(); @@ -12,9 +13,9 @@ public class MoveToCenter extends AbstractStrategy { objParams.ObjectMiddleVertical() - GetStep() <= FieldHeight / 2 && objParams.ObjectMiddleVertical() + GetStep() >= FieldHeight / 2); } + @Override protected void MoveToTarget() { - var objParams = GetObjectParameters(); if (objParams == null) { return; diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningAirCraft$1.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningAirCraft$1.class index edb7f7bdd883b4804316eee468ce1aea1b147d38..52b10a90d60906ac434066a9a45d277f5d81f4ba 100644 GIT binary patch delta 13 UcmdnRwu^1UOD4wL$*-6K04EFuSpWb4 delta 13 UcmdnRwu^1UOD4w5$*-6K04DeaRR910 diff --git a/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningAirCraft.class b/out/production/PIbd-14_Calimullin_A.R._AirFighter_Hard/Drawnings/DrawningAirCraft.class index 60add023fee43ba9e7edb08519f53841a9e83a4f..e2fa6d4ea906e3abd238cedcf431f499c049e926 100644 GIT binary patch literal 6136 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