From 36a0d583bd79ebaa23b7477dc948063c80ca6492 Mon Sep 17 00:00:00 2001 From: VanyaAlekseev Date: Thu, 14 Dec 2023 15:21:02 +0400 Subject: [PATCH] SemesterFirstLabFirstBomberHard --- .gitignore | 1 + .../src/ProjectBomber/DrawingBomber.java | 220 ++++++++++++++++++ .../src/ProjectBomber/DrawingEngines.java | 85 +++++++ .../src/ProjectBomber/EntityBomber.java | 25 ++ .../src/ProjectBomber/EnumDirectionType.java | 5 + .../src/ProjectBomber/EnumEnginesCount.java | 11 + .../src/ProjectBomber/FormBomber.form | 94 ++++++++ .../src/ProjectBomber/FormBomber.java | 84 +++++++ ProjectBomber/src/ProjectBomber/Main.java | 5 + .../src/ProjectBomber/MainFrameBomber.java | 19 ++ .../src/ProjectBomber/img/arrowDOWN.png | Bin 0 -> 1492 bytes .../src/ProjectBomber/img/arrowLEFT.png | Bin 0 -> 1458 bytes .../src/ProjectBomber/img/arrowRIGHT.png | Bin 0 -> 1429 bytes .../src/ProjectBomber/img/arrowUP.png | Bin 0 -> 1530 bytes 14 files changed, 549 insertions(+) create mode 100644 ProjectBomber/src/ProjectBomber/DrawingBomber.java create mode 100644 ProjectBomber/src/ProjectBomber/DrawingEngines.java create mode 100644 ProjectBomber/src/ProjectBomber/EntityBomber.java create mode 100644 ProjectBomber/src/ProjectBomber/EnumDirectionType.java create mode 100644 ProjectBomber/src/ProjectBomber/EnumEnginesCount.java create mode 100644 ProjectBomber/src/ProjectBomber/FormBomber.form create mode 100644 ProjectBomber/src/ProjectBomber/FormBomber.java create mode 100644 ProjectBomber/src/ProjectBomber/Main.java create mode 100644 ProjectBomber/src/ProjectBomber/MainFrameBomber.java create mode 100644 ProjectBomber/src/ProjectBomber/img/arrowDOWN.png create mode 100644 ProjectBomber/src/ProjectBomber/img/arrowLEFT.png create mode 100644 ProjectBomber/src/ProjectBomber/img/arrowRIGHT.png create mode 100644 ProjectBomber/src/ProjectBomber/img/arrowUP.png diff --git a/.gitignore b/.gitignore index 57940fd..8e61364 100644 --- a/.gitignore +++ b/.gitignore @@ -76,4 +76,5 @@ fabric.properties # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser +.idea diff --git a/ProjectBomber/src/ProjectBomber/DrawingBomber.java b/ProjectBomber/src/ProjectBomber/DrawingBomber.java new file mode 100644 index 0000000..f0eb819 --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/DrawingBomber.java @@ -0,0 +1,220 @@ +package ProjectBomber; + +import java.awt.*; + +public class DrawingBomber { + public EntityBomber EntityBomber; + private DrawingEngines _drawingEngines; + private int _pictureWidth; + private int _pictureHeight; + private int _startPosX; + private int _startPosY; + private final int _bomberWidth = 110; + private final int _bomberHeight = 110; + + public boolean Init(int speed, double weight, Color bodyColor, + Color additionalColor, boolean fuelTanks, boolean bombs, + int width, int height) { + if (width < _bomberWidth && height < _bomberHeight) { + return false; + } + _pictureWidth = width; + _pictureHeight = height; + _drawingEngines = new DrawingEngines(); + EntityBomber = new EntityBomber(); + EntityBomber.Init(speed, weight, bodyColor, additionalColor, fuelTanks, bombs); + return true; + } + + public void SetEnginesCount(int enginesCount) { + _drawingEngines.SetEnumEnginesCount(enginesCount); + } + + public void SetPosition(int x, int y) { + if (x < 0) { + x = 0; + } else if (x > _pictureWidth - _bomberWidth) { + x = _pictureWidth - _bomberWidth; + } + _startPosX = x; + + if (y < 0) { + y = 0; + } else if (y > _pictureHeight - _bomberHeight) { + y = _pictureHeight - _bomberHeight; + } + _startPosY = y; + } + + public void MoveTransport(EnumDirectionType direction) { + if (EntityBomber == null) { + return; + } + switch (direction) { + case Up -> { + if (_startPosY - EntityBomber.Step() >= 0) { + _startPosY -= (int) EntityBomber.Step(); + } + } + case Down -> { + if (_startPosY + _bomberHeight + EntityBomber.Step() <= _pictureHeight) { + _startPosY += (int) EntityBomber.Step(); + } + } + case Left -> { + if (_startPosX - EntityBomber.Step() >= 0) { + _startPosX -= (int) EntityBomber.Step(); + } + } + case Right -> { + if (_startPosX + _bomberWidth + EntityBomber.Step() <= _pictureWidth) { + _startPosX += (int) EntityBomber.Step(); + } + } + } + } + + public void DrawTransport(Graphics g) { + if (EntityBomber == null) { + return; + } + Graphics2D g2d = (Graphics2D) g; + + Color bodyColor = EntityBomber.BodyColor; + Color additionalColor = EntityBomber.AdditionalColor; + Color blackColor = Color.BLACK; + + _drawingEngines.DrawEngines(g, additionalColor, _startPosX, _startPosY, _bomberWidth, _bomberHeight); + + // Длина фюзеляжа + int bodyHeight = _bomberHeight / 8; + int bodyWidth = _bomberWidth - _bomberWidth / 7; + + // Рисуем бомбы + if (EntityBomber.Bombs) { + Polygon bombTailPolygon = new Polygon(); + bombTailPolygon.addPoint(_startPosX + _bomberWidth / 2 - _bomberWidth / 8 + bodyHeight * 3 - 5, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 - _bomberHeight / 3 + bodyHeight / 2); + bombTailPolygon.addPoint(_startPosX + _bomberWidth / 2 - _bomberWidth / 8 + bodyHeight * 3 + 5, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 - _bomberHeight / 3 + bodyHeight / 2 - 5); + bombTailPolygon.addPoint(_startPosX + _bomberWidth / 2 - _bomberWidth / 8 + bodyHeight * 3 + 5, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 - _bomberHeight / 3 + bodyHeight / 2 + 5); + bombTailPolygon.addPoint(_startPosX + _bomberWidth / 2 - _bomberWidth / 8 + bodyHeight * 3 - 5, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 - _bomberHeight / 3 + bodyHeight / 2); + + g2d.setColor(additionalColor); + g2d.fillPolygon(bombTailPolygon); + g2d.setColor(blackColor); + g2d.drawPolygon(bombTailPolygon); + + bombTailPolygon.translate(0, (int) (_bomberHeight - 2 * (_bomberHeight / 2 - bodyHeight / 2 - _bomberHeight / 3 + bodyHeight / 2 - 5) - bombTailPolygon.getBounds2D().getHeight())); + + g2d.setColor(additionalColor); + g2d.fillPolygon(bombTailPolygon); + g2d.setColor(blackColor); + g2d.drawPolygon(bombTailPolygon); + + g2d.setColor(additionalColor); + g2d.fillOval( + _startPosX + _bomberWidth / 2 - _bomberWidth / 8, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 - _bomberHeight / 3, + bodyHeight * 3, + bodyHeight); + + g2d.fillOval( + _startPosX + _bomberWidth / 2 - _bomberWidth / 8, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 + _bomberHeight / 3, + bodyHeight * 3, + bodyHeight); + + g2d.setColor(blackColor); + g2d.drawOval( + _startPosX + _bomberWidth / 2 - _bomberWidth / 8, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 - _bomberHeight / 3, + bodyHeight * 3, + bodyHeight); + g2d.drawOval( + _startPosX + _bomberWidth / 2 - _bomberWidth / 8, + _startPosY + _bomberHeight / 2 - bodyHeight / 2 + _bomberHeight / 3, + bodyHeight * 3, + bodyHeight); + } + + // Рисуем топливные баки + if (EntityBomber.FuelTanks) { + int fuelTanksWidth = bodyHeight * 2; + int fuelTanksHeight = bodyHeight / 2; + g2d.setColor(additionalColor); + g2d.fillRect( + _startPosX + _bomberWidth / 2 - _bomberWidth / 7, + _startPosY + _bomberHeight / 2 - bodyHeight - bodyHeight / 2, + fuelTanksWidth, + fuelTanksHeight); + g2d.fillRect( + _startPosX + _bomberWidth / 2 - _bomberWidth / 7, + _startPosY + _bomberHeight / 2 + bodyHeight / 2 + bodyHeight / 2, + fuelTanksWidth, + fuelTanksHeight); + g2d.setColor(blackColor); + g2d.drawRect( + _startPosX + _bomberWidth / 2 - _bomberWidth / 7, + _startPosY + _bomberHeight / 2 - bodyHeight - bodyHeight / 2, + fuelTanksWidth, + fuelTanksHeight); + g2d.drawRect( + _startPosX + _bomberWidth / 2 - _bomberWidth / 7, + _startPosY + _bomberHeight / 2 + bodyHeight / 2 + bodyHeight / 2, + fuelTanksWidth, + fuelTanksHeight); + } + // Рисуем нос + Polygon cockPitPolygon = new Polygon(); + cockPitPolygon.addPoint(_startPosX, _startPosY + _bomberHeight / 2); + cockPitPolygon.addPoint(_startPosX + _bomberWidth / 8, _startPosY + _bomberHeight / 2 - bodyHeight / 2); + cockPitPolygon.addPoint(_startPosX + _bomberWidth / 8, _startPosY + _bomberHeight / 2 + bodyHeight / 2); + + g2d.setColor(blackColor); + g2d.fillPolygon(cockPitPolygon); + + // Рисуем крылья + Polygon wingsPolygon = new Polygon(); + wingsPolygon.addPoint(_startPosX + _bomberWidth / 2, _startPosY); + wingsPolygon.addPoint(_startPosX + _bomberWidth / 2 + _bomberWidth / 15, _startPosY); + wingsPolygon.addPoint(_startPosX + _bomberWidth / 2 + _bomberWidth / 6, _startPosY + _bomberHeight / 2); + wingsPolygon.addPoint(_startPosX + _bomberWidth / 2 + _bomberWidth / 15, _startPosY + _bomberHeight); + wingsPolygon.addPoint(_startPosX + _bomberWidth / 2, _startPosY + _bomberHeight); + + g2d.setColor(bodyColor); + g.fillPolygon(wingsPolygon); + g2d.setColor(blackColor); + g.drawPolygon(wingsPolygon); + + // Рисуем хвостовое оперение + Polygon tailPolygon = new Polygon(); + tailPolygon.addPoint(_startPosX + _bomberWidth, _startPosY + _bomberHeight / 2 - _bomberHeight / 3); + tailPolygon.addPoint(_startPosX + bodyWidth, _startPosY + _bomberHeight / 2 - _bomberHeight / 8); + tailPolygon.addPoint(_startPosX + bodyWidth, _startPosY + _bomberHeight / 2 + _bomberHeight / 8); + tailPolygon.addPoint(_startPosX + _bomberWidth, _startPosY + _bomberHeight / 2 + _bomberHeight / 3); + + g2d.setColor(bodyColor); + g.fillPolygon(tailPolygon); + g2d.setColor(blackColor); + g.drawPolygon(tailPolygon); + + // Рисуем фюзеляж + g2d.setColor(bodyColor); + g2d.fillRect( + _startPosX + _bomberWidth / 8, + _startPosY + _bomberHeight / 2 - bodyHeight / 2, + bodyWidth, + bodyHeight + ); + g2d.setColor(blackColor); + g2d.drawRect( + _startPosX + _bomberWidth / 8, + _startPosY + _bomberHeight / 2 - bodyHeight / 2, + bodyWidth, + bodyHeight + ); + } +} diff --git a/ProjectBomber/src/ProjectBomber/DrawingEngines.java b/ProjectBomber/src/ProjectBomber/DrawingEngines.java new file mode 100644 index 0000000..db7abc2 --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/DrawingEngines.java @@ -0,0 +1,85 @@ +package ProjectBomber; + +import java.awt.*; + +public class DrawingEngines { + private EnumEnginesCount _enumEnginesCount; + + public void SetEnumEnginesCount(int enginesCount) { + for (EnumEnginesCount val : EnumEnginesCount.values()) { + if (val.count == enginesCount) { + this._enumEnginesCount = val; + return; + } + } + this._enumEnginesCount = EnumEnginesCount.Two; + } + + private void DrawEngine(Graphics2D g2d, Color color, int x, int y, int w, int h) { + g2d.setColor(Color.WHITE); + g2d.fillRect(x, y, w, h); + g2d.setColor(Color.BLACK); + g2d.drawRect(x, y, w, h); + g2d.setColor(color); + g2d.fillRect(x, y, 6, h); + } + + public void DrawEngines(Graphics g, Color color, int startPosX, int startPosY, int drawingWidth, int drawingHeight) { + if (_enumEnginesCount == null) { + return; + } + Graphics2D g2d = (Graphics2D) g; + + int engineWidth = 20; + int engineHeight = 6; + + if (_enumEnginesCount.count >= EnumEnginesCount.Two.count) { + DrawEngine( + g2d, color, + startPosX + drawingWidth - drawingWidth / 5, + startPosY + drawingHeight / 2 - drawingHeight / 6, + engineWidth, + engineHeight + ); + DrawEngine( + g2d, color, + startPosX + drawingWidth - drawingWidth / 5, + startPosY + drawingHeight / 2 + drawingHeight / 6 - engineHeight, + engineWidth, + engineHeight + ); + } + if (_enumEnginesCount.count >= EnumEnginesCount.Four.count) { + DrawEngine( + g2d, color, + startPosX + drawingWidth - drawingWidth / 5 + 5, + startPosY + drawingHeight / 2 - drawingHeight / 6 - 10, + engineWidth - 5, + engineHeight + ); + DrawEngine( + g2d, color, + startPosX + drawingWidth - drawingWidth / 5 + 5, + startPosY + drawingHeight / 2 + drawingHeight / 6 - engineHeight + 10, + engineWidth - 5, + engineHeight + ); + } + if (_enumEnginesCount.count >= EnumEnginesCount.Six.count) { + DrawEngine( + g2d, color, + startPosX + drawingWidth / 2 - 10, + startPosY + drawingHeight / 2 - drawingHeight / 6 - 10, + engineWidth, + engineHeight + ); + DrawEngine( + g2d, color, + startPosX + drawingWidth / 2 - 10, + startPosY + drawingHeight / 2 + drawingHeight / 6 + 3, + engineWidth, + engineHeight + ); + } + } +} diff --git a/ProjectBomber/src/ProjectBomber/EntityBomber.java b/ProjectBomber/src/ProjectBomber/EntityBomber.java new file mode 100644 index 0000000..fb9b6df --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/EntityBomber.java @@ -0,0 +1,25 @@ +package ProjectBomber; + +import java.awt.*; + +public class EntityBomber { + public int Speed; + public double Weight; + public Color BodyColor; + public Color AdditionalColor; + public boolean FuelTanks; + public boolean Bombs; + + public double Step() { + return (double) Speed * 250 / Weight; + } + + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, boolean fuelTanks, boolean bombs) { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + FuelTanks = fuelTanks; + Bombs = bombs; + } +} diff --git a/ProjectBomber/src/ProjectBomber/EnumDirectionType.java b/ProjectBomber/src/ProjectBomber/EnumDirectionType.java new file mode 100644 index 0000000..b09cd79 --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/EnumDirectionType.java @@ -0,0 +1,5 @@ +package ProjectBomber; + +public enum EnumDirectionType { + Up, Down, Left, Right +} diff --git a/ProjectBomber/src/ProjectBomber/EnumEnginesCount.java b/ProjectBomber/src/ProjectBomber/EnumEnginesCount.java new file mode 100644 index 0000000..99a1184 --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/EnumEnginesCount.java @@ -0,0 +1,11 @@ +package ProjectBomber; + +public enum EnumEnginesCount { + Two(2), + Four(4), + Six(6); + public final int count; + EnumEnginesCount(int count) { + this.count = count; + } +} diff --git a/ProjectBomber/src/ProjectBomber/FormBomber.form b/ProjectBomber/src/ProjectBomber/FormBomber.form new file mode 100644 index 0000000..569d8c7 --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/FormBomber.form @@ -0,0 +1,94 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/ProjectBomber/src/ProjectBomber/FormBomber.java b/ProjectBomber/src/ProjectBomber/FormBomber.java new file mode 100644 index 0000000..839af30 --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/FormBomber.java @@ -0,0 +1,84 @@ +package ProjectBomber; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; +import java.util.Random; + +public class FormBomber { + DrawingBomber _drawingBomber = new DrawingBomber(); + private JButton buttonCreate; + private JPanel pictureBox; + private JButton buttonDown; + private JButton buttonUp; + private JButton buttonLeft; + private JButton buttonRight; + + public JPanel getPictureBox() { + return pictureBox; + } + + public FormBomber() { + buttonUp.setName("buttonUp"); + buttonDown.setName("buttonDown"); + buttonLeft.setName("buttonLeft"); + buttonRight.setName("buttonRight"); + + buttonCreate.addActionListener(e -> { + _drawingBomber = new DrawingBomber(); + Random random = new Random(); + + _drawingBomber.Init( + random.nextInt(100, 300), + random.nextInt(1000, 3000), + 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(), + pictureBox.getWidth(), + pictureBox.getHeight() + ); + + _drawingBomber.SetEnginesCount(random.nextInt(2, 7)); + _drawingBomber.SetPosition(random.nextInt(10, 100), random.nextInt(10, 100)); + + Draw(); + }); + + ActionListener buttonMoveClickedListener = e -> { + String buttonName = ((JButton) e.getSource()).getName(); + + switch (buttonName) { + case ("buttonUp") -> { + _drawingBomber.MoveTransport(EnumDirectionType.Up); + } + case ("buttonDown") -> { + _drawingBomber.MoveTransport(EnumDirectionType.Down); + } + case ("buttonLeft") -> { + _drawingBomber.MoveTransport(EnumDirectionType.Left); + } + case ("buttonRight") -> { + _drawingBomber.MoveTransport(EnumDirectionType.Right); + } + } + + Draw(); + }; + + buttonUp.addActionListener(buttonMoveClickedListener); + buttonDown.addActionListener(buttonMoveClickedListener); + buttonLeft.addActionListener(buttonMoveClickedListener); + buttonRight.addActionListener(buttonMoveClickedListener); + } + + public void Draw() { + if (_drawingBomber.EntityBomber == null) { + return; + } + + Graphics g = pictureBox.getGraphics(); + pictureBox.paint(g); + _drawingBomber.DrawTransport(g); + } +} diff --git a/ProjectBomber/src/ProjectBomber/Main.java b/ProjectBomber/src/ProjectBomber/Main.java new file mode 100644 index 0000000..b77ef84 --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/Main.java @@ -0,0 +1,5 @@ +package ProjectBomber; + +public class Main { + public static void main(String[] args) {MainFrameBomber mainFrameBomber = new MainFrameBomber();} +} \ No newline at end of file diff --git a/ProjectBomber/src/ProjectBomber/MainFrameBomber.java b/ProjectBomber/src/ProjectBomber/MainFrameBomber.java new file mode 100644 index 0000000..afe554b --- /dev/null +++ b/ProjectBomber/src/ProjectBomber/MainFrameBomber.java @@ -0,0 +1,19 @@ +package ProjectBomber; + +import javax.swing.*; + +public class MainFrameBomber extends JFrame { + private FormBomber _formBomber; + + public MainFrameBomber() { + super(); + setTitle("Бомбардировщик"); + setDefaultCloseOperation(EXIT_ON_CLOSE); + _formBomber = new FormBomber(); + setContentPane(_formBomber.getPictureBox()); + setDefaultLookAndFeelDecorated(false); + setLocation(300, 100); + pack(); + setVisible(true); + } +} diff --git a/ProjectBomber/src/ProjectBomber/img/arrowDOWN.png b/ProjectBomber/src/ProjectBomber/img/arrowDOWN.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef7c0835c433e845d8a36c12c5c97060c337ca2 GIT binary patch literal 1492 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 M07*qoM6N<$f_|;I`~Uy| literal 0 HcmV?d00001 diff --git a/ProjectBomber/src/ProjectBomber/img/arrowRIGHT.png b/ProjectBomber/src/ProjectBomber/img/arrowRIGHT.png new file mode 100644 index 0000000000000000000000000000000000000000..563b1b9c8532ddbccba60febab7fa883e7c97334 GIT binary patch literal 1429 zcmV;G1#0?3_-=0BUAO$kWI#v4&m^|rM4LWs11RIOStHPJ}%2U6QwT1#!Au@a$55$sh{ zVyn;=ZA}rZ2)*j1w;I>q3fXNC4B44Uc6TyozFy2`v%6V$H?tah(U)bIzjMB4-gC~J zGv5OLtGZb6K~FT+8*O>Th%C1}EhprS%$9zJ@z$O40-hf|iXW4nU2! zudqFVB-2#m?Eu!Pi%c>AwId#)y7`+Ea~FRF5ZT)=ukHxPq;|yJWGX805}wdf zvH@g9&$V71S2nH>S5=vK?OQ4-Gdjl7mP8c%(mQr}H*dX2Ajvd21LurOj7toTW9@v$ zyE*Z~fb@L>d{rwm6lSQ*P`R#|SS9yxXth6-JQuE0>3uE5RM{d>KM z+b;kJfY#d^IX=t`b-^bExvG)vy zX5y%{kf>kk=GU7(`Hblb3)(KvG*_ojY>5{^lZCY?VCvf3bmVA&!c-Zm%v6aobN22% zA^Lcu4&|9PbvGUU7@7=Kf+9hdAaj~?tX=)J-Ua1e$V*KtR_@yM?Dsz~O@b;jEqHnv zssvSLiUgU1GZ5hW@O-Aq2p0EmJwiTsXFAR?b2DBn^!k30cE!6gugsH7BNytSo%pr<~X*4<@(_pSWe ztMCZ{f$u~3wGjswoQTpW5^Y7MPztb z+ftimX@`+3o~={fojcBZ2gz~rU3j6hM~1(who+*!JLKI?*!$ll#{mE$_yo_-w^Ue~ z@IYcRY408&$63tB_&y109{H*fn(#o`(J}w=ll)|YyhD+%M{13!=LRIwmM^H#{RoIw zec#ltkZWpVa6mBTGbR`lj5VJ=sqfg@Sr=OGnU9r=NT-Hsd9v&E4F(zSI4-X8v$y6ejElXHS0REbDdd(J= z`e)|KRmn7s4KF`en(0fIA00lDnMl~aI6O5uExh8Z`FVAnst>PfFQog7^_>-ye8D#p zD_U1A&EyA*nTiv(JDDsDplXTpf_kE{zF2F`eEwqC5)xMDsv(ifo=-oi@z+9`)~R}N j-tSq-7XDI8{_FY|wU>1BYn}kO00000NkvXXu0mjf8*sJ& literal 0 HcmV?d00001 diff --git a/ProjectBomber/src/ProjectBomber/img/arrowUP.png b/ProjectBomber/src/ProjectBomber/img/arrowUP.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a432c4b89cffe052e56bc0c371e7bc1ffc66f7 GIT binary patch literal 1530 zcmV1uSGdsI2+ik-YY0-#9v5=VdMlV&8TKpmW6yd^3Tk4G=sUaXK)B=f#(HI~$ z0f`X-qZcYgyf!g-X}q8@=`KxdOynor*p%I_+wRWH@nU9nXQ$m?cA+G^$z;#&oH^h7 zp6{IRoH^gZV?4%vL6lSJdi%!bftEUR@nf!QCi-WoN(BX6Z{N5VH~@53%fQ>XthN!D z1WtF&M87Fz1IYIFB|OCSwpR4DZAGn!EJInaSER?JEaCg~t=pt;-|_x53H1BDlGltw z{x_gSZ);`E@P3-RH={-(#jVv5vlCajJATF$GY7on72y|f9q4T6*ueVlEjAgm74R}ZbNA*4$ErfC?%nPdvjIl&S6Yd^?}amr+<>!Gz)FWFoVNgI z^)h7MyhZBrPXILR+JXAS+Pc`OivVLP%G~ZgWIO>t>eM(*CqE&yySL`HYA(Q-iV@%Q z4q|>Dp*kZ}O6Ct80U-#zwX>%7YAV2p#)$XzBhx8FLjZ)cPD;SCNFEtQD1u<`j+)u5 znE)epgGB#6NT(2?04Pc>L`V>p1k)lpItD@z+_}AId*z}g0*u%V5`+7Y=@f(l2u*PW zxE_#TNu*(cVUj#H1_FXR?q5W{fGYO9Hu)jsVhRz`KvO|eKvfXV5R#4nVOU@&$c#er z*m0n85yHnYPk^XULAK`?Q;47jx&{H&_JEr6fRKP`_rA;sgs?3o$BtDcqKJSB$VX!& z`t4!kk{7xLx|$QAE~>3lR#~SA+dYFhKa!IYdjdGf&jqv#KC@XoQ6yCdwl1od*@|g)&ny=63gCB@*@o zRfIiERQqat|1kP1uiCvI)NJw%I)pTYuA)BGPWYpfh~_4Q>OL>B5i4_l=vk`1iGK$aunDpA=y)R04z$G#(g1-`wN0svrXPa3ZAHWz9CFu4^a!@o7X; zQ(hYgfdJwMN61XY3i9ytEZYOguP+sBvhjnX=-peES`i|5c}%NMuP6N3I3gTgw#D+i zU?VG_q5vwf7bl=`bPRpV>-qQHMJsK&(GQ-oc3G}RyfwvM5M{FB_Z6zsuL#&zVYVL$_{y%${+Q+H)I-T)E7``HPtM z;xr5m5ZKgFl)jf|Me9IdQwM=lpO&teHeexx^ep{lEGAu%a zdrLo91?u8~U{5!Zug>z{d3*oVIMh$Dr@J1e>UT01?CGu>X)hkRvr#j*(VK&11eis3 zf-3>3*faocn#n8R8o<3@etqDi%Ej!&Rkt|l7Q6y30Nfovvm(7<#^c-_KjVHq?G~~E zoILDg`t}|EdV63+iExvAPNs6wn=|&$fo;HCDmKmZ)?Q{Ou0C`jvlCaD-rDPCDCdBF z@BQTx-A@8PQ%Ry*X4BVs4T{`tU-i<-?gEMKZCx|be~Jol;iNJLagu+Pz&^L}(-zh4 gcCP^!3jNjKe@5jeYd4kyO#lD@07*qoM6N<$f~*4G%>V!Z literal 0 HcmV?d00001