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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