diff --git a/ProjectAirFighter/.idea/uiDesigner.xml b/ProjectAirFighter/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/ProjectAirFighter/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/ProjectAirFighter/ProjectAirFighter.iml b/ProjectAirFighter/ProjectAirFighter.iml
index c90834f..d5b343a 100644
--- a/ProjectAirFighter/ProjectAirFighter.iml
+++ b/ProjectAirFighter/ProjectAirFighter.iml
@@ -3,6 +3,7 @@
+
diff --git a/ProjectAirFighter/Resources/arrowDown.jpg b/ProjectAirFighter/Resources/arrowDown.jpg
new file mode 100644
index 0000000..0c3f999
Binary files /dev/null and b/ProjectAirFighter/Resources/arrowDown.jpg differ
diff --git a/ProjectAirFighter/Resources/arrowLeft.jpg b/ProjectAirFighter/Resources/arrowLeft.jpg
new file mode 100644
index 0000000..7364bae
Binary files /dev/null and b/ProjectAirFighter/Resources/arrowLeft.jpg differ
diff --git a/ProjectAirFighter/Resources/arrowRight.jpg b/ProjectAirFighter/Resources/arrowRight.jpg
new file mode 100644
index 0000000..0504710
Binary files /dev/null and b/ProjectAirFighter/Resources/arrowRight.jpg differ
diff --git a/ProjectAirFighter/Resources/arrowUp.jpg b/ProjectAirFighter/Resources/arrowUp.jpg
new file mode 100644
index 0000000..dc072fc
Binary files /dev/null and b/ProjectAirFighter/Resources/arrowUp.jpg differ
diff --git a/ProjectAirFighter/src/CountEngines.java b/ProjectAirFighter/src/CountEngines.java
new file mode 100644
index 0000000..495ac36
--- /dev/null
+++ b/ProjectAirFighter/src/CountEngines.java
@@ -0,0 +1,13 @@
+public enum CountEngines {
+ Zero(0),
+ Two(2),
+ Four(4),
+ Six(6);
+ private int Count;
+ public int getCount() {
+ return Count;
+ }
+ CountEngines(int num){
+ this.Count = num;
+ }
+}
\ No newline at end of file
diff --git a/ProjectAirFighter/src/DirectionType.java b/ProjectAirFighter/src/DirectionType.java
new file mode 100644
index 0000000..0d43823
--- /dev/null
+++ b/ProjectAirFighter/src/DirectionType.java
@@ -0,0 +1,6 @@
+public enum DirectionType {
+ Up,
+ Down,
+ Left,
+ Right,
+}
\ No newline at end of file
diff --git a/ProjectAirFighter/src/DrawningAirFighter.java b/ProjectAirFighter/src/DrawningAirFighter.java
new file mode 100644
index 0000000..7eda438
--- /dev/null
+++ b/ProjectAirFighter/src/DrawningAirFighter.java
@@ -0,0 +1,137 @@
+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 int _drawningPlaneWidth = 150;
+ private int _drawningPlaneHeight = 150;
+ private DrawningEngines DrawningEngines;
+ public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean extraWings, boolean rockets) {
+ EntityAirFighter = new EntityAirFighter();
+ EntityAirFighter.Init(speed, weight, bodyColor, additionalColor, extraWings, rockets);
+ _pictureWidth = null;
+ _pictureHeight = null;
+ _startPosX = null;
+ _startPosY = null;
+ DrawningEngines = new DrawningEngines(EntityAirFighter);
+ Random random = new Random();
+ int Count = 2 * random.nextInt(4);
+ DrawningEngines.SetCountEngines(Count);
+ }
+ public boolean SetPictureSize(int width, int height) {
+ if (_drawningPlaneWidth > width || _drawningPlaneHeight > height) return false;
+ if (_startPosX != null && _startPosY != null) {
+ if (_startPosX < 0) { _startPosX = 0; }
+ if (_startPosX + _drawningPlaneWidth > width) { _startPosX = width - _drawningPlaneWidth; }
+ if (_startPosY < 0) { _startPosY = 0; }
+ if (_startPosY + _drawningPlaneHeight > height) { _startPosY = height - _drawningPlaneHeight; }
+ }
+ _pictureWidth = width;
+ _pictureHeight = height;
+ return true;
+ }
+ public void SetPosition(int x, int y) {
+ if (_pictureHeight == null || _pictureWidth == null) {
+ return;
+ }
+ if (x + _drawningPlaneWidth > _pictureWidth || x < 0) {
+ Random random = new Random();
+ _startPosX = random.nextInt(_pictureWidth - _drawningPlaneWidth);
+ }
+ else {
+ _startPosX = x;
+ }
+
+ if (y + _drawningPlaneHeight > _pictureHeight || y < 0) {
+ Random random = new Random();
+ _startPosY = random.nextInt(_pictureHeight - _drawningPlaneHeight);
+ }
+ else {
+ _startPosY = y;
+ }
+ }
+ public boolean MoveTransport(DirectionType direction) {
+ if (EntityAirFighter == null || _startPosX == null || _startPosY == 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() + _drawningPlaneWidth < _pictureWidth) {
+ _startPosX += (int)EntityAirFighter.Step();
+ }
+ return true;
+ case Down:
+ if (_startPosY + EntityAirFighter.Step() + _drawningPlaneHeight < _pictureHeight) {
+ _startPosY += (int)EntityAirFighter.Step();
+ }
+ return true;
+ default:
+ return false;
+ }
+ }
+ public void DrawTransport(Graphics2D g) {
+ if (EntityAirFighter == null || _startPosX == null || _startPosY == null) {
+ return;
+ }
+ g.setColor(Color.BLACK);
+ int[] pointX = {_startPosX, _startPosX + 20, _startPosX + 20, _startPosX};
+ int[] pointY = {_startPosY + 75, _startPosY + 70, _startPosY + 80, _startPosY + 75};
+ Polygon triangle = new Polygon(pointX, pointY, 4);
+ g.fillPolygon(triangle);
+
+ g.setColor(EntityAirFighter.getBodyColor());
+ g.fillRect(_startPosX + 20, _startPosY + 70, 130, 10);
+
+ g.drawLine(_startPosX + 40, _startPosY + 70, _startPosX + 40, _startPosY);
+ g.drawLine(_startPosX + 40, _startPosY, _startPosX + 50, _startPosY);
+ g.drawLine(_startPosX + 50, _startPosY, _startPosX + 55, _startPosY + 70);
+ g.drawLine(_startPosX + 40, _startPosY + 80, _startPosX + 40, _startPosY + 150);
+ g.drawLine(_startPosX + 40, _startPosY + 150, _startPosX + 50, _startPosY + 150);
+ g.drawLine(_startPosX + 50, _startPosY + 150, _startPosX + 55, _startPosY + 80);
+
+ g.drawLine(_startPosX + 150, _startPosY + 70, _startPosX + 150, _startPosY + 55);
+ g.drawLine(_startPosX + 150, _startPosY + 55, _startPosX + 135, _startPosY + 65);
+ g.drawLine(_startPosX + 135, _startPosY + 65, _startPosX + 135, _startPosY + 70);
+ g.drawLine(_startPosX + 150, _startPosY + 80, _startPosX + 150, _startPosY + 95);
+ g.drawLine(_startPosX + 150, _startPosY + 95, _startPosX + 135, _startPosY + 85);
+ g.drawLine(_startPosX + 135, _startPosY + 85, _startPosX + 135, _startPosY + 80);
+
+ DrawningEngines.DrawEngines(g, EntityAirFighter.getAdditionalColor(), _startPosX, _startPosY);
+ g.setColor(EntityAirFighter.getAdditionalColor());
+
+ if (EntityAirFighter.getExtraWings()) {
+ g.drawLine(_startPosX + 65, _startPosY + 70, _startPosX + 90, _startPosY + 20);
+ g.drawLine(_startPosX + 90, _startPosY + 20, _startPosX + 110, _startPosY + 20);
+ g.drawLine(_startPosX + 110, _startPosY + 20, _startPosX + 85, _startPosY + 70);
+ g.drawLine(_startPosX + 65, _startPosY + 80, _startPosX + 90, _startPosY + 130);
+ g.drawLine(_startPosX + 90, _startPosY + 130, _startPosX + 110, _startPosY + 130);
+ g.drawLine(_startPosX + 110, _startPosY + 130, _startPosX + 85, _startPosY + 80);
+ }
+
+ if (EntityAirFighter.getRockets()) {
+ g.fillRect(_startPosX + 32, _startPosY + 4, 8, 6);
+ g.drawLine(_startPosX + 32, _startPosY + 4, _startPosX + 26, _startPosY + 7);
+ g.drawLine(_startPosX + 26, _startPosY + 7, _startPosX + 32, _startPosY + 10);
+ g.fillRect(_startPosX + 32, _startPosY + 140, 8, 6);
+ g.drawLine(_startPosX + 32, _startPosY + 146, _startPosX + 26, _startPosY + 143);
+ g.drawLine(_startPosX + 26, _startPosY + 143, _startPosX + 32, _startPosY + 140);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectAirFighter/src/DrawningEngines.java b/ProjectAirFighter/src/DrawningEngines.java
new file mode 100644
index 0000000..4fa58a8
--- /dev/null
+++ b/ProjectAirFighter/src/DrawningEngines.java
@@ -0,0 +1,27 @@
+import java.awt.*;
+
+public class DrawningEngines {
+ private CountEngines CountEngines;
+ public CountEngines getCountEngines() {
+ return CountEngines;
+ }
+ private EntityAirFighter EntityAirFighter;
+ public void SetCountEngines(int countEngines) {
+ for (CountEngines num : CountEngines.values()) {
+ if (num.getCount() == countEngines) {
+ CountEngines = num;
+ return;
+ }
+ }
+ }
+ public DrawningEngines(EntityAirFighter entityAirFighter) {
+ EntityAirFighter = entityAirFighter;
+ }
+ public void DrawEngines(Graphics2D g, Color color, int x, int y) {
+ g.setColor(color);
+ for (int i = CountEngines.getCount(); i > 0; i -= 2) {
+ g.fillOval(x + 35, y + 10 * i - 5, 10, 10);
+ g.fillOval(x + 35, y + 145 - 10 * i, 10, 10);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectAirFighter/src/EntityAirFighter.java b/ProjectAirFighter/src/EntityAirFighter.java
new file mode 100644
index 0000000..b2edd9e
--- /dev/null
+++ b/ProjectAirFighter/src/EntityAirFighter.java
@@ -0,0 +1,39 @@
+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;
+ }
+ private boolean ExtraWings;
+ public boolean getExtraWings() {
+ return ExtraWings;
+ }
+ private boolean Rockets;
+ public boolean getRockets() {
+ return Rockets;
+ }
+ public double Step() {
+ return Speed * 100 / Weight;
+ }
+ public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean extraWings, boolean rockets) {
+ Speed = speed;
+ Weight = weight;
+ BodyColor = bodyColor;
+ AdditionalColor = additionalColor;
+ ExtraWings = extraWings;
+ Rockets = rockets;
+ }
+}
\ No newline at end of file
diff --git a/ProjectAirFighter/src/FormAirFighter.form b/ProjectAirFighter/src/FormAirFighter.form
new file mode 100644
index 0000000..8312a9e
--- /dev/null
+++ b/ProjectAirFighter/src/FormAirFighter.form
@@ -0,0 +1,97 @@
+
+
diff --git a/ProjectAirFighter/src/FormAirFighter.java b/ProjectAirFighter/src/FormAirFighter.java
new file mode 100644
index 0000000..c83e744
--- /dev/null
+++ b/ProjectAirFighter/src/FormAirFighter.java
@@ -0,0 +1,105 @@
+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 {
+ JPanel mainBox;
+ private JPanel pictureBoxAirFighter;
+ private JButton buttonCreateAirFighter;
+ private JButton buttonLeft;
+ private JButton buttonUp;
+ private JButton buttonDown;
+ private JButton buttonRight;
+ private DrawningAirFighter _drawningAirFighter = new DrawningAirFighter();
+ private List controls;
+ 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) {
+ _drawningAirFighter = new DrawningAirFighter();
+ Random random = new Random();
+ _drawningAirFighter.Init(random.nextInt(300) + 300,
+ random.nextInt(1500) + 1500,
+ 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(pictureBoxAirFighter.getWidth(), pictureBoxAirFighter.getHeight());
+ _drawningAirFighter.SetPosition(random.nextInt(100), random.nextInt(100));
+
+ Draw();
+ }
+ });
+ ActionListener buttonMoveClickedListener = new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String buttonName = ((JButton) e.getSource()).getName();
+ boolean result = false;
+
+ switch (buttonName) {
+ case "buttonUp": {
+ result = _drawningAirFighter.MoveTransport(DirectionType.Up);
+ }
+ break;
+ case "buttonDown": {
+ result = _drawningAirFighter.MoveTransport(DirectionType.Down);
+ }
+ break;
+ case "buttonLeft": {
+ result = _drawningAirFighter.MoveTransport(DirectionType.Left);
+ }
+ break;
+ case "buttonRight": {
+ result = _drawningAirFighter.MoveTransport(DirectionType.Right);
+ }
+ break;
+
+ };
+
+ if (result) {
+ Draw();
+ };
+ };
+ };
+ buttonRight.addActionListener(buttonMoveClickedListener);
+ buttonDown.addActionListener(buttonMoveClickedListener);
+ buttonLeft.addActionListener(buttonMoveClickedListener);
+ buttonUp.addActionListener(buttonMoveClickedListener);
+
+ }
+ private void Draw() {
+ if (_drawningAirFighter == null) {
+ return;
+ }
+ Graphics g = pictureBoxAirFighter.getGraphics();
+ g.setColor(pictureBoxAirFighter.getBackground());
+ g.fillRect(0,0, pictureBoxAirFighter.getWidth(), pictureBoxAirFighter.getHeight());
+ _drawningAirFighter.DrawTransport((Graphics2D) g);
+
+ RepaintControls();
+ }
+ private void RepaintControls() {
+ for (JComponent control : controls) {
+ control.repaint();
+ }
+ }
+
+ private void InitializeControlsRepaintList() {
+ controls = new LinkedList<>();
+ controls.add(buttonCreateAirFighter);
+ controls.add(buttonUp);
+ controls.add(buttonDown);
+ controls.add(buttonLeft);
+ controls.add(buttonRight);
+ }
+}
\ No newline at end of file
diff --git a/ProjectAirFighter/src/Main.java b/ProjectAirFighter/src/Main.java
new file mode 100644
index 0000000..fa04037
--- /dev/null
+++ b/ProjectAirFighter/src/Main.java
@@ -0,0 +1,14 @@
+import javax.swing.*;
+
+public class Main {
+ public static void main(String[] args) {
+ JFrame.setDefaultLookAndFeelDecorated(false);
+ JFrame frame = new JFrame("FormSeaplane");
+ frame.setContentPane(new FormAirFighter().mainBox);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setLocation(500, 200);
+ frame.pack();
+ frame.setSize(1000, 500);
+ frame.setVisible(true);
+ }
+}
\ No newline at end of file