From 27ffa4f62912a6b8dcf994bab2795cdb8b4d17ab Mon Sep 17 00:00:00 2001 From: allllen4a Date: Mon, 4 Dec 2023 15:53:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D0=BB?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DirectionType.java | 2 + .../DoorNumberType.java | 2 + .../DrawningObjects/DrawningBus.java | 190 ++++++++++++++++++ .../DrawningObjects/DrawningDoor.java | 39 ++-- .../DrawningObjects/DrawningDoorOval.java | 72 +++++++ .../DrawningObjects/DrawningDoorTriangle.java | 74 +++++++ .../DrawningDoubleDeckerBus.java | 53 +++++ DoubleDeckerBus/DrawningObjects/IDraw.java | 12 ++ DoubleDeckerBus/Entities/EntityBus.java | 33 +++ .../Entities/EntityDoubleDeckerBus.java | 37 ++++ DoubleDeckerBus/FormDoubleDeckerBus.java | 167 +++++++++++++++ .../MovementStrategy/AbstractStrategy.java | 98 +++++++++ .../MovementStrategy/DrawningObjectBus.java | 40 ++++ .../MovementStrategy/IMoveableObject.java | 10 + .../MovementStrategy/MoveToBorder.java | 37 ++++ .../MovementStrategy/MoveToCenter.java | 50 +++++ .../MovementStrategy/ObjectParameters.java | 29 +++ DoubleDeckerBus/MovementStrategy/Status.java | 7 + DrawningDoubleDeckerBus.java | 137 ------------- EntityDoubleDeckerBus.java | 55 ----- FormDoubleDeckerBus.java | 94 --------- Resources/down.png | Bin 0 -> 10121 bytes Resources/left.png | Bin 0 -> 9654 bytes Resources/right.png | Bin 0 -> 8818 bytes Resources/up.png | Bin 0 -> 10441 bytes .../Resources/down.png | Bin 0 -> 10121 bytes .../Resources/left.png | Bin 0 -> 9654 bytes .../Resources/right.png | Bin 0 -> 8818 bytes .../Resources/up.png | Bin 0 -> 10441 bytes 29 files changed, 940 insertions(+), 298 deletions(-) rename DirectionType.java => DoubleDeckerBus/DirectionType.java (70%) rename DoorNumberType.java => DoubleDeckerBus/DoorNumberType.java (68%) create mode 100644 DoubleDeckerBus/DrawningObjects/DrawningBus.java rename DrawningDoor.java => DoubleDeckerBus/DrawningObjects/DrawningDoor.java (58%) create mode 100644 DoubleDeckerBus/DrawningObjects/DrawningDoorOval.java create mode 100644 DoubleDeckerBus/DrawningObjects/DrawningDoorTriangle.java create mode 100644 DoubleDeckerBus/DrawningObjects/DrawningDoubleDeckerBus.java create mode 100644 DoubleDeckerBus/DrawningObjects/IDraw.java create mode 100644 DoubleDeckerBus/Entities/EntityBus.java create mode 100644 DoubleDeckerBus/Entities/EntityDoubleDeckerBus.java create mode 100644 DoubleDeckerBus/FormDoubleDeckerBus.java create mode 100644 DoubleDeckerBus/MovementStrategy/AbstractStrategy.java create mode 100644 DoubleDeckerBus/MovementStrategy/DrawningObjectBus.java create mode 100644 DoubleDeckerBus/MovementStrategy/IMoveableObject.java create mode 100644 DoubleDeckerBus/MovementStrategy/MoveToBorder.java create mode 100644 DoubleDeckerBus/MovementStrategy/MoveToCenter.java create mode 100644 DoubleDeckerBus/MovementStrategy/ObjectParameters.java create mode 100644 DoubleDeckerBus/MovementStrategy/Status.java delete mode 100644 DrawningDoubleDeckerBus.java delete mode 100644 EntityDoubleDeckerBus.java delete mode 100644 FormDoubleDeckerBus.java create mode 100644 Resources/down.png create mode 100644 Resources/left.png create mode 100644 Resources/right.png create mode 100644 Resources/up.png create mode 100644 out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/down.png create mode 100644 out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/left.png create mode 100644 out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/right.png create mode 100644 out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/up.png diff --git a/DirectionType.java b/DoubleDeckerBus/DirectionType.java similarity index 70% rename from DirectionType.java rename to DoubleDeckerBus/DirectionType.java index d3a2058..96d0d11 100644 --- a/DirectionType.java +++ b/DoubleDeckerBus/DirectionType.java @@ -1,3 +1,5 @@ +package DoubleDeckerBus; + public enum DirectionType { Up, Down, diff --git a/DoorNumberType.java b/DoubleDeckerBus/DoorNumberType.java similarity index 68% rename from DoorNumberType.java rename to DoubleDeckerBus/DoorNumberType.java index d3aa9f3..fe013f2 100644 --- a/DoorNumberType.java +++ b/DoubleDeckerBus/DoorNumberType.java @@ -1,3 +1,5 @@ +package DoubleDeckerBus; + public enum DoorNumberType { Three, Four, diff --git a/DoubleDeckerBus/DrawningObjects/DrawningBus.java b/DoubleDeckerBus/DrawningObjects/DrawningBus.java new file mode 100644 index 0000000..0e13a84 --- /dev/null +++ b/DoubleDeckerBus/DrawningObjects/DrawningBus.java @@ -0,0 +1,190 @@ +package DoubleDeckerBus.DrawningObjects; + +import DoubleDeckerBus.DirectionType; +import DoubleDeckerBus.Entities.EntityBus; +import java.util.Scanner; +import javax.swing.*; +import java.awt.*; +import java.util.Random; + +public class DrawningBus { + protected JPanel BusPanel; + protected EntityBus EntityBus; + private int _pictureWidth; + private int _pictureHeight; + protected int _startPosX; + protected int _startPosY; + protected int _busWidth = 160; + protected int _busHeight = 100; + + + private IDraw DrawningDoor; + + public EntityBus EntityBus() { + return EntityBus; + } + + public DrawningBus(int speed, double weight, Color bodyColor, int width, int height, JPanel busPanel) { + if (width <= _busWidth || height <= _busHeight) { + return; + } + + _startPosX = 0; + _startPosY = 0; + busPanel.setSize(width, height); + BusPanel = busPanel; + busPanel.paint(BusPanel.getGraphics()); + _pictureWidth = width; + _pictureHeight = height; + EntityBus = new EntityBus(speed, weight, bodyColor); + Random random = new Random(); + int option = random.nextInt(1,4); + if (option == 1) { + DrawningDoor = new DrawningDoor(_busWidth, _busHeight, _startPosX, _startPosY, busPanel); + } else if (option == 2) { + DrawningDoor = new DrawningDoorOval(_busWidth, _busHeight, _startPosX, _startPosY, busPanel); + } else if (option == 3) { + DrawningDoor = new DrawningDoorTriangle(_busWidth, _busHeight, _startPosX, _startPosY, busPanel); + } + DrawningDoor.ChangeDoorsNumber(random.nextInt(2, 6)); + } + + protected DrawningBus(int speed, double weight, Color bodyColor, + int width, int height, int busWidth, int busHeight, JPanel busPanel) { + if (width <= _busWidth || height <= _busHeight) { + return; + } + + _startPosX = 0; + _startPosY = 0; + busPanel.setSize(width, height); + BusPanel = busPanel; + busPanel.paint(BusPanel.getGraphics()); + _pictureWidth = width; + _pictureHeight = height; + _busWidth = busWidth; + _busHeight = busHeight; + EntityBus = new EntityBus(speed, weight, bodyColor); + Random random = new Random(); + int option = random.nextInt(4) + 1; + if (option == 1) { + DrawningDoor = new DrawningDoor(_busWidth, _busHeight, _startPosX, _startPosY, busPanel); + } else if (option == 2) { + DrawningDoor = new DrawningDoorOval(_busWidth, _busHeight, _startPosX, _startPosY, busPanel); + } else if (option == 3) { + DrawningDoor = new DrawningDoorTriangle(_busWidth, _busHeight, _startPosX, _startPosY, busPanel); + } + DrawningDoor.ChangeDoorsNumber(random.nextInt(2, 6)); + } + + public void SetPosition(int x, int y){ + if (x < 0 || x + _busWidth > _pictureWidth) + { + x = Math.max(0, _pictureWidth - _busWidth); + } + if (y < 0 || y + _busHeight > _pictureHeight) + { + y = Math.max(0, _pictureHeight - _busHeight); + } + _startPosX = x; + _startPosY = y; + } + + public int GetPosX() { + return _startPosX; + } + + public int GetPosY() { + return _startPosY; + } + + public int GetWidth() { + return _busWidth; + } + + public int GetHeight() { + return _busHeight; + } + + public boolean CanMove(DirectionType direction) + { + if (EntityBus == null) + return false; + boolean can = false; + switch (direction) + { + case Left: + can = _startPosX - EntityBus.Step() >= 0; + break; + case Right: + can = _startPosX + EntityBus.Step() + _busWidth < _pictureWidth; + break; + case Down: + can = _startPosY + EntityBus.Step() + _busHeight < _pictureHeight; + break; + case Up: + can = _startPosY - EntityBus.Step() >= 0; + break; + }; + return can; + } + + public void MoveTransport(DirectionType direction){ + if (!CanMove(direction) || EntityBus == null) { + return; + } + BusPanel.paint(BusPanel.getGraphics()); + switch (direction) + { + case Left: + if (_startPosX - EntityBus.Step() >= 0) { + _startPosX -= (int) EntityBus.Step(); + } + break; + case Up: + if (_startPosY - EntityBus.Step() >= 0) { + _startPosY -= (int) EntityBus.Step(); + } + break; + case Right: + if (_startPosX + EntityBus.Step() + _busWidth <= _pictureWidth) { + _startPosX += (int) EntityBus.Step(); + } + break; + case Down: + if (_startPosY + EntityBus.Step() + _busHeight <= _pictureHeight) { + _startPosY += (int) EntityBus.Step(); + } + break; + } + DrawningDoor.ChangeX(_startPosX); + DrawningDoor.ChangeY(_startPosY); + } + + public void DrawTransport() { + Graphics2D g2d = (Graphics2D)BusPanel.getGraphics(); + + if (EntityBus == null) { + return; + } + + // Границы первого этажа автобуса + g2d.setColor(EntityBus.BodyColor()); + g2d.fillRect(_startPosX + 40, _startPosY + 40, 120, 40); + + // Колеса + g2d.setColor(Color.black); + g2d.fillOval(_startPosX + 45, _startPosY + 75, 20, 20); + g2d.fillOval(_startPosX + 127, _startPosY + 75, 20, 20); + + // Окна + g2d.setColor(Color.blue); + g2d.fillOval(_startPosX + 50, _startPosY + 45, 20, 20); + g2d.fillOval(_startPosX + 75, _startPosY + 45, 20, 20); + g2d.fillOval(_startPosX + 100, _startPosY + 45, 20, 20); + g2d.fillOval(_startPosX + 125, _startPosY + 45, 20, 20); + + // Двери + DrawningDoor.DrawDoors(); + } +} \ No newline at end of file diff --git a/DrawningDoor.java b/DoubleDeckerBus/DrawningObjects/DrawningDoor.java similarity index 58% rename from DrawningDoor.java rename to DoubleDeckerBus/DrawningObjects/DrawningDoor.java index abe1346..6a572ec 100644 --- a/DrawningDoor.java +++ b/DoubleDeckerBus/DrawningObjects/DrawningDoor.java @@ -1,8 +1,12 @@ +package DoubleDeckerBus.DrawningObjects; + +import DoubleDeckerBus.DoorNumberType; + import javax.swing.*; import java.awt.*; -public class DrawningDoor { - JPanel DoubleDeckerBusPanel; +public class DrawningDoor implements IDraw { + JPanel BusPanel; private DoorNumberType DoorNumberType; private Color blackColor; private int Width; @@ -10,14 +14,20 @@ public class DrawningDoor { public int CurX; public int CurY; - public boolean Init(int width, int height, int curX, int curY, JPanel doubleDeckerBusPanel) { + public DrawningDoor(int width, int height, int curX, int curY, JPanel busPanel) { Width = width; Height = height; CurX = curX; CurY = curY; blackColor = Color.BLACK; - DoubleDeckerBusPanel = doubleDeckerBusPanel; - return true; + BusPanel = busPanel; + } + + public void ChangeX(int x){ + CurX = x; + } + public void ChangeY(int y){ + CurY = y; } public void ChangeDoorsNumber(int x) { @@ -36,22 +46,27 @@ public class DrawningDoor { return DoorNumberType; } + public void DrawDoor(int x, int y){ + Graphics2D g2d = (Graphics2D)BusPanel.getGraphics(); + g2d.fillRect(x, y, 10, 15); + } + public void DrawDoors() { - Graphics2D g2d = (Graphics2D) DoubleDeckerBusPanel.getGraphics(); + Graphics2D g2d = (Graphics2D) BusPanel.getGraphics(); g2d.setColor(blackColor); - g2d.fillRect(CurX + 55, CurY + 65, 10, 15); - g2d.fillRect(CurX + 70, CurY + 65, 10, 15); + DrawDoor(CurX + 55, CurY + 65); + DrawDoor(CurX + 70, CurY + 65); if (DoorNumberType() == DoorNumberType.Three || DoorNumberType() == DoorNumberType.Four || DoorNumberType() == DoorNumberType.Five) { - g2d.fillRect(CurX + 85, CurY + 65, 10, 15); + DrawDoor(CurX + 85, CurY + 65); } if (DoorNumberType() == DoorNumberType.Four || DoorNumberType() == DoorNumberType.Five) { - g2d.fillRect(CurX + 100, CurY + 65, 10, 15); + DrawDoor(CurX + 100, CurY + 65); } if (DoorNumberType() == DoorNumberType.Five) { - g2d.fillRect(CurX + 115, CurY + 65, 10, 15); + DrawDoor(CurX + 115, CurY + 65); } } -} +} \ No newline at end of file diff --git a/DoubleDeckerBus/DrawningObjects/DrawningDoorOval.java b/DoubleDeckerBus/DrawningObjects/DrawningDoorOval.java new file mode 100644 index 0000000..6b52c78 --- /dev/null +++ b/DoubleDeckerBus/DrawningObjects/DrawningDoorOval.java @@ -0,0 +1,72 @@ +package DoubleDeckerBus.DrawningObjects; + +import DoubleDeckerBus.DoorNumberType; + +import javax.swing.*; +import java.awt.*; + +public class DrawningDoorOval implements IDraw { + JPanel BusPanel; + private DoorNumberType DoorNumberType; + private Color blackColor; + private int Width; + private int Height; + public int CurX; + public int CurY; + + public DrawningDoorOval(int width, int height, int curX, int curY, JPanel busPanel) { + Width = width; + Height = height; + CurX = curX; + CurY = curY; + blackColor = Color.BLACK; + BusPanel = busPanel; + } + + public void ChangeX(int x){ + CurX = x; + } + public void ChangeY(int y){ + CurY = y; + } + + public void ChangeDoorsNumber(int x) { + if (x <= 3) { + DoorNumberType = DoorNumberType.Three; + } + if (x == 4) { + DoorNumberType = DoorNumberType.Four; + } + if (x >= 5) { + DoorNumberType = DoorNumberType.Five; + } + } + + public DoorNumberType DoorNumberType() { + return DoorNumberType; + } + + public void DrawDoor(int x, int y){ + Graphics2D g2d = (Graphics2D)BusPanel.getGraphics(); + g2d.fillOval(x, y, 10, 20); + } + + public void DrawDoors() { + Graphics2D g2d = (Graphics2D) BusPanel.getGraphics(); + g2d.setColor(blackColor); + DrawDoor(CurX + 55, CurY + 60); + DrawDoor(CurX + 70, CurY + 60); + + if (DoorNumberType() == DoorNumberType.Three || DoorNumberType() == DoorNumberType.Four || DoorNumberType() == DoorNumberType.Five) { + DrawDoor(CurX + 85, CurY + 60); + } + + if (DoorNumberType() == DoorNumberType.Four || DoorNumberType() == DoorNumberType.Five) { + DrawDoor(CurX + 100, CurY + 60); + } + + if (DoorNumberType() == DoorNumberType.Five) { + DrawDoor(CurX + 115, CurY + 60); + } + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/DrawningObjects/DrawningDoorTriangle.java b/DoubleDeckerBus/DrawningObjects/DrawningDoorTriangle.java new file mode 100644 index 0000000..656d921 --- /dev/null +++ b/DoubleDeckerBus/DrawningObjects/DrawningDoorTriangle.java @@ -0,0 +1,74 @@ +package DoubleDeckerBus.DrawningObjects; + +import DoubleDeckerBus.DoorNumberType; + +import javax.swing.*; +import java.awt.*; + +public class DrawningDoorTriangle implements IDraw { + JPanel BusPanel; + private DoubleDeckerBus.DoorNumberType DoorNumberType; + private Color blackColor; + private int Width; + private int Height; + public int CurX; + public int CurY; + + public DrawningDoorTriangle(int width, int height, int curX, int curY, JPanel busPanel) { + Width = width; + Height = height; + CurX = curX; + CurY = curY; + blackColor = Color.BLACK; + BusPanel = busPanel; + } + + public void ChangeX(int x){ + CurX = x; + } + public void ChangeY(int y){ + CurY = y; + } + + public void ChangeDoorsNumber(int x) { + if (x <= 3) { + DoorNumberType = DoorNumberType.Three; + } + if (x == 4) { + DoorNumberType = DoorNumberType.Four; + } + if (x >= 5) { + DoorNumberType = DoorNumberType.Five; + } + } + + public DoorNumberType DoorNumberType() { + return DoorNumberType; + } + + public void DrawDoor(int x, int y){ + Graphics2D g2d = (Graphics2D)BusPanel.getGraphics(); + int[] xPoints = {x, x + 5, x + 10}; + int[] yPoints = {y + 20, y, y + 20}; + g2d.fillPolygon(xPoints, yPoints, 3); + } + + public void DrawDoors() { + Graphics2D g2d = (Graphics2D) BusPanel.getGraphics(); + g2d.setColor(blackColor); + DrawDoor(CurX + 55, CurY + 60); + DrawDoor(CurX + 70, CurY + 60); + + if (DoorNumberType() == DoorNumberType.Three || DoorNumberType() == DoorNumberType.Four || DoorNumberType() == DoorNumberType.Five) { + DrawDoor(CurX + 85, CurY + 60); + } + + if (DoorNumberType() == DoorNumberType.Four || DoorNumberType() == DoorNumberType.Five) { + DrawDoor(CurX + 100, CurY + 60); + } + + if (DoorNumberType() == DoorNumberType.Five) { + DrawDoor(CurX + 115, CurY + 60); + } + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/DrawningObjects/DrawningDoubleDeckerBus.java b/DoubleDeckerBus/DrawningObjects/DrawningDoubleDeckerBus.java new file mode 100644 index 0000000..c28ed28 --- /dev/null +++ b/DoubleDeckerBus/DrawningObjects/DrawningDoubleDeckerBus.java @@ -0,0 +1,53 @@ +package DoubleDeckerBus.DrawningObjects; + +import DoubleDeckerBus.Entities.EntityDoubleDeckerBus; + +import javax.swing.*; +import java.awt.*; + +public class DrawningDoubleDeckerBus extends DrawningBus { + + public DrawningDoubleDeckerBus(int speed, double weight, Color bodyColor, Color additionalColor, int doorNumber, + int width, int height, boolean secondFloor, boolean tailpipe, JPanel busPanel) { + super(speed, weight, bodyColor, width, height, busPanel); + if (EntityBus != null) { + EntityBus = new EntityDoubleDeckerBus(speed, weight, bodyColor, additionalColor, doorNumber, secondFloor, tailpipe); + } + } + + @Override + public void DrawTransport() { + + if (!(EntityBus instanceof EntityDoubleDeckerBus)) { + return; + } + + super.DrawTransport(); + + EntityDoubleDeckerBus _bus = (EntityDoubleDeckerBus) EntityBus; + Graphics2D g2d = (Graphics2D)BusPanel.getGraphics(); + + // второй этаж + if (_bus.SecondFloor()) + { + g2d.setColor(_bus.BodyColor()); + // Границы второго этажа автобуса + g2d.setColor(_bus.AdditionalColor()); + g2d.fillRect(_startPosX + 40, _startPosY, 120, 40); + + // Окна второго этажа + g2d.setColor(Color.BLUE); + g2d.setColor(Color.blue); + g2d.fillOval(_startPosX + 50, _startPosY +10,20, 20); + g2d.fillOval(_startPosX + 75, _startPosY +10, 20, 20); + g2d.fillOval(_startPosX + 100, _startPosY +10,20, 20); + g2d.fillOval(_startPosX + 125, _startPosY +10,20,20); + } + + if (_bus.Tailpipe()) + { + g2d.setColor(_bus.AdditionalColor()); + g2d.fillRect(_startPosX, _startPosY + 65, 40, 15); + } + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/DrawningObjects/IDraw.java b/DoubleDeckerBus/DrawningObjects/IDraw.java new file mode 100644 index 0000000..f448930 --- /dev/null +++ b/DoubleDeckerBus/DrawningObjects/IDraw.java @@ -0,0 +1,12 @@ +package DoubleDeckerBus.DrawningObjects; + +import DoubleDeckerBus.DoorNumberType; + +public interface IDraw { + public void ChangeDoorsNumber(int x); + public DoorNumberType DoorNumberType(); + public void DrawDoor(int x, int y); + public void DrawDoors(); + public void ChangeX(int x); + public void ChangeY(int y); +} \ No newline at end of file diff --git a/DoubleDeckerBus/Entities/EntityBus.java b/DoubleDeckerBus/Entities/EntityBus.java new file mode 100644 index 0000000..b886e4e --- /dev/null +++ b/DoubleDeckerBus/Entities/EntityBus.java @@ -0,0 +1,33 @@ +package DoubleDeckerBus.Entities; + +import java.awt.*; + +public class EntityBus { + public int Speed; + public double Weight; + public Color BodyColor; + public double Step; + + public int Speed() { + return Speed; + } + + public double Weight() { + return Weight; + } + + public Color BodyColor() { + return BodyColor; + } + + public double Step() { + return Step; + } + + public EntityBus(int speed, double weight, Color bodyColor) { + Speed = speed; + Weight = weight; + Step = (double) Speed * 100 / Weight; + BodyColor = bodyColor; + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/Entities/EntityDoubleDeckerBus.java b/DoubleDeckerBus/Entities/EntityDoubleDeckerBus.java new file mode 100644 index 0000000..2fd1957 --- /dev/null +++ b/DoubleDeckerBus/Entities/EntityDoubleDeckerBus.java @@ -0,0 +1,37 @@ +package DoubleDeckerBus.Entities; + + + +import java.awt.*; + +public class EntityDoubleDeckerBus extends EntityBus { + public Color AdditionalColor; + public boolean SecondFloor; + public boolean Tailpipe; + + public Color AdditionalColor() { + return AdditionalColor; + } + + public boolean SecondFloor() { + return SecondFloor; + } + + public boolean Tailpipe() { + return Tailpipe; + } + + + public double Step() { + return Step; + } + + public EntityDoubleDeckerBus(int speed, double weight, Color bodyColor, Color additionalColor, + int doorNumber, boolean secondFloor ,boolean tailpipe) { + super(speed, weight, bodyColor); + AdditionalColor = additionalColor; + SecondFloor = secondFloor; + Tailpipe = tailpipe; + + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/FormDoubleDeckerBus.java b/DoubleDeckerBus/FormDoubleDeckerBus.java new file mode 100644 index 0000000..7404808 --- /dev/null +++ b/DoubleDeckerBus/FormDoubleDeckerBus.java @@ -0,0 +1,167 @@ +package DoubleDeckerBus; + +import DoubleDeckerBus.DrawningObjects.DrawningDoubleDeckerBus; +import DoubleDeckerBus.DrawningObjects.DrawningBus; +import DoubleDeckerBus.MovementStrategy.*; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.Random; +import javax.imageio.ImageIO; +import javax.swing.*; + +public class FormDoubleDeckerBus { + static DrawningBus DrawningBus; + static AbstractStrategy _abstractStrategy; + public static void main(String[] args) throws IOException { + String[] items = {"Довести до центра", "Довести до края"}; + + JComboBox comboBoxStrategy = new JComboBox(items); + comboBoxStrategy.setBounds(562,12,151,28); + JFrame BusFrame = new JFrame(); + BusFrame.setResizable(false); + JPanel BusPanel = new JPanel(); + BusFrame.setLayout(new BorderLayout()); + BusFrame.setSize(743, 576); + BusFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + BusFrame.setLayout(new BorderLayout(1,1)); + BusPanel.setLayout(null); + BufferedImage RightIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/right.png")); + BufferedImage LeftIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/left.png")); + BufferedImage UpIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/up.png")); + BufferedImage DownIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/down.png")); + + JButton RightButton = new JButton(new ImageIcon(RightIcon)); + JButton LeftButton = new JButton(new ImageIcon(LeftIcon)); + JButton UpButton = new JButton(new ImageIcon(UpIcon)); + JButton DownButton = new JButton(new ImageIcon(DownIcon)); + JButton CreateButton = new JButton(); + JButton CreateDoubleDeckerBusButton = new JButton(); + JButton buttonStep = new JButton(); + + CreateDoubleDeckerBusButton.setBounds(198,477,180, 40); + CreateDoubleDeckerBusButton.setText("Создать двухэтажный автобус"); + CreateButton.setText("Создать"); + buttonStep.setBounds(619, 46, 94, 29); + buttonStep.setText("шаг"); + CreateButton.setBounds(12, 477, 180, 40); + RightButton.setBounds(683,487,30,30); + LeftButton.setBounds(611,487,30,30); + UpButton.setBounds(647,451,30,30); + DownButton.setBounds(647,487,30,30); + + BusPanel.add(CreateButton); + BusPanel.add(CreateDoubleDeckerBusButton); + BusPanel.add(RightButton); + BusPanel.add(LeftButton); + BusPanel.add(UpButton); + BusPanel.add(DownButton); + BusPanel.add(comboBoxStrategy); + BusPanel.add(buttonStep); + comboBoxStrategy.setSelectedIndex(-1); + + BusFrame.add(BusPanel, BorderLayout.CENTER); + Random random = new Random(); + CreateButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + DrawningBus = new DrawningBus(random.nextInt(100, 300), random.nextDouble(1000, 3000), + Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)), + BusPanel.getWidth(), BusPanel.getHeight(), BusPanel); + DrawningBus.DrawTransport(); + comboBoxStrategy.enable(true); + } + }); + + CreateDoubleDeckerBusButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + DrawningBus = new DrawningDoubleDeckerBus(random.nextInt(100, 300), random.nextDouble(1000, 3000), + Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)), + Color.getHSBColor(random.nextInt(0, 301), random.nextInt(0, 301), random.nextInt(0, 301)), + random.nextInt(1, 6), BusPanel.getWidth(), BusPanel.getHeight(), random.nextBoolean(), random.nextBoolean(), + BusPanel); + DrawningBus.DrawTransport(); + comboBoxStrategy.enable(true); + } + }); + + + buttonStep.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (DrawningBus == null) { + return; + } + if (comboBoxStrategy.isEnabled()) { + if (comboBoxStrategy.getSelectedIndex() == 0) { + _abstractStrategy = new MoveToCenter(); + } + else if (comboBoxStrategy.getSelectedIndex() == 1) { + _abstractStrategy = new MoveToBorder(); + } else { + _abstractStrategy = null; + } + if (_abstractStrategy == null) { + return; + } + _abstractStrategy.SetData(new DrawningObjectBus(DrawningBus), BusPanel.getWidth(), + BusPanel.getHeight()); + comboBoxStrategy.enable(false); + } + if (_abstractStrategy == null) { + return; + } + _abstractStrategy.MakeStep(); + DrawningBus.DrawTransport(); + if (_abstractStrategy.GetStatus() == Status.Finish) { + comboBoxStrategy.enable(true); + _abstractStrategy = null; + } + } + }); + RightButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningBus.EntityBus() == null) { + return; + } + DrawningBus.MoveTransport(DirectionType.Right); + DrawningBus.DrawTransport(); + } + }); + LeftButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningBus.EntityBus() == null) + return; + DrawningBus.MoveTransport(DirectionType.Left); + DrawningBus.DrawTransport(); + } + }); + UpButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningBus.EntityBus() == null) + return; + DrawningBus.MoveTransport(DirectionType.Up); + DrawningBus.DrawTransport(); + } + }); + DownButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(DrawningBus.EntityBus() == null) + return; + DrawningBus.MoveTransport(DirectionType.Down); + DrawningBus.DrawTransport(); + } + }); + + BusFrame.setVisible(true); + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/MovementStrategy/AbstractStrategy.java b/DoubleDeckerBus/MovementStrategy/AbstractStrategy.java new file mode 100644 index 0000000..978fb73 --- /dev/null +++ b/DoubleDeckerBus/MovementStrategy/AbstractStrategy.java @@ -0,0 +1,98 @@ +package DoubleDeckerBus.MovementStrategy; + +import DoubleDeckerBus.DirectionType; + +public abstract class AbstractStrategy { + private IMoveableObject _moveableObject; + + private Status _state = Status.NotInit; + + private int FieldWidth; + + protected int FieldWidth() { + return FieldWidth; + } + + private int FieldHeight; + + protected int FieldHeight() { + return FieldHeight; + } + + public Status GetStatus() { + return _state; + } + + public void SetData(IMoveableObject moveableObject, int width, int height) { + if (moveableObject == null) { + _state = Status.NotInit; + return; + } + + _state = Status.InProgress; + _moveableObject = moveableObject; + FieldWidth = width; + FieldHeight = height; + } + + public void MakeStep() { + if (_state != Status.InProgress) { + return; + } + + if (IsTargetDestination()) { + _state = Status.Finish; + return; + } + MoveToTarget(); + } + + protected boolean MoveLeft() { + return MoveTo(DirectionType.Left); + } + + protected boolean MoveRight() { + return MoveTo(DirectionType.Right); + } + + protected boolean MoveUp() { + return MoveTo(DirectionType.Up); + } + + protected boolean MoveDown() { + return MoveTo(DirectionType.Down); + } + + protected ObjectParameters GetObjectParameters(){ + if (_moveableObject != null) { + return _moveableObject.GetObjectParameters(); + } + else { + return null; + } + } + + protected Integer GetStep() { + if (_state != Status.InProgress) { + return null; + } + return _moveableObject.GetStep(); + } + + protected abstract void MoveToTarget(); + + protected abstract boolean IsTargetDestination(); + + private boolean MoveTo(DirectionType directionType) { + if (_state != Status.InProgress) { + return false; + } + + if (_moveableObject.CheckCanMove(directionType)) { + _moveableObject.MoveObject(directionType); + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/MovementStrategy/DrawningObjectBus.java b/DoubleDeckerBus/MovementStrategy/DrawningObjectBus.java new file mode 100644 index 0000000..dc94ffc --- /dev/null +++ b/DoubleDeckerBus/MovementStrategy/DrawningObjectBus.java @@ -0,0 +1,40 @@ +package DoubleDeckerBus.MovementStrategy; + +import DoubleDeckerBus.DrawningObjects.DrawningBus; +import DoubleDeckerBus.DirectionType; + +public class DrawningObjectBus implements IMoveableObject { + private final DrawningBus _drawningBus; + + public DrawningObjectBus(DrawningBus drawningBus){ + _drawningBus = drawningBus; + } + + public ObjectParameters GetObjectParameters(){ + if (_drawningBus == null || _drawningBus.EntityBus() == null) { + return null; + } + return new ObjectParameters(_drawningBus.GetPosX(), _drawningBus.GetPosY(), _drawningBus.GetWidth(), _drawningBus.GetHeight()); + } + + public int GetStep(){ + if (_drawningBus.EntityBus() == null) { + return 0; + } + return (int)_drawningBus.EntityBus().Step(); + } + + public boolean CheckCanMove(DirectionType direction){ + if (_drawningBus == null) { + return false; + } + return _drawningBus.CanMove(direction); + } + + public void MoveObject(DirectionType direction){ + if (_drawningBus == null) { + return; + } + _drawningBus.MoveTransport(direction); + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/MovementStrategy/IMoveableObject.java b/DoubleDeckerBus/MovementStrategy/IMoveableObject.java new file mode 100644 index 0000000..bc5375a --- /dev/null +++ b/DoubleDeckerBus/MovementStrategy/IMoveableObject.java @@ -0,0 +1,10 @@ +package DoubleDeckerBus.MovementStrategy; + +import DoubleDeckerBus.DirectionType; + +public interface IMoveableObject { + public ObjectParameters GetObjectParameters(); + public int GetStep(); + boolean CheckCanMove(DirectionType direction); + void MoveObject(DirectionType direction); +} \ No newline at end of file diff --git a/DoubleDeckerBus/MovementStrategy/MoveToBorder.java b/DoubleDeckerBus/MovementStrategy/MoveToBorder.java new file mode 100644 index 0000000..edc39ab --- /dev/null +++ b/DoubleDeckerBus/MovementStrategy/MoveToBorder.java @@ -0,0 +1,37 @@ +package DoubleDeckerBus.MovementStrategy; + +public class MoveToBorder extends AbstractStrategy { + @Override + protected boolean IsTargetDestination() { + ObjectParameters objParams = GetObjectParameters(); + + if (objParams == null) { + return false; + } + + return objParams.RightBorder <= FieldWidth() && objParams.RightBorder + GetStep() >= FieldWidth() && + objParams.DownBorder <= FieldHeight() && objParams.DownBorder + GetStep() >= FieldHeight(); + } + @Override + protected void MoveToTarget() { + ObjectParameters objParams = GetObjectParameters(); + + if (objParams == null) { + return; + } + + int diffX = objParams.RightBorder - FieldWidth(); + if (Math.abs(diffX) >= GetStep()) { + if (diffX < 0) { + MoveRight(); + } + } + + int diffY = objParams.DownBorder - FieldHeight(); + if (Math.abs(diffY) >= GetStep()) { + if (diffY < 0) { + MoveDown(); + } + } + } +} \ No newline at end of file diff --git a/DoubleDeckerBus/MovementStrategy/MoveToCenter.java b/DoubleDeckerBus/MovementStrategy/MoveToCenter.java new file mode 100644 index 0000000..0204492 --- /dev/null +++ b/DoubleDeckerBus/MovementStrategy/MoveToCenter.java @@ -0,0 +1,50 @@ +package DoubleDeckerBus.MovementStrategy; + +public class MoveToCenter extends AbstractStrategy{ + @Override + protected boolean IsTargetDestination() { + ObjectParameters objParams = GetObjectParameters(); + + if (objParams == null) { + return false; + } + + return ((objParams.ObjectMiddleHorizontal <= FieldWidth() / 2 && + objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth() / 2) || + (objParams.ObjectMiddleHorizontal >= FieldWidth() / 2 && + objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth() / 2)) && + + ((objParams.ObjectMiddleVertical <= FieldHeight() / 2 && + objParams.ObjectMiddleVertical + GetStep() >= FieldHeight() / 2) || + (objParams.ObjectMiddleVertical >= FieldHeight() / 2 && + objParams.ObjectMiddleVertical - GetStep() <= FieldHeight() / 2)); + } + + @Override + protected void MoveToTarget() { + ObjectParameters objParams = GetObjectParameters(); + + if (objParams == null) { + return; + } + + int diffX = objParams.ObjectMiddleHorizontal - FieldWidth() / 2; + if (Math.abs(diffX) > GetStep()) { + if (diffX > 0) { + MoveLeft(); + } + else { + MoveRight(); + } + } + int 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/DoubleDeckerBus/MovementStrategy/ObjectParameters.java b/DoubleDeckerBus/MovementStrategy/ObjectParameters.java new file mode 100644 index 0000000..984b990 --- /dev/null +++ b/DoubleDeckerBus/MovementStrategy/ObjectParameters.java @@ -0,0 +1,29 @@ +package DoubleDeckerBus.MovementStrategy; + +public class ObjectParameters { + private final int _x; + private final int _y; + private final int _width; + private final int _height; + public int LeftBorder; + public int TopBorder; + public int RightBorder; + public int DownBorder; + public int ObjectMiddleHorizontal; + public int ObjectMiddleVertical; + + public ObjectParameters(int x, int y, int width, int height) + { + _x = x; + _y = y; + _width = width; + _height = height; + LeftBorder = _x; + TopBorder = _y; + RightBorder = _x + width; + DownBorder = _y + height; + ObjectMiddleHorizontal = _x + _width / 2; + ObjectMiddleVertical = _y + _height / 2; + } + +} \ No newline at end of file diff --git a/DoubleDeckerBus/MovementStrategy/Status.java b/DoubleDeckerBus/MovementStrategy/Status.java new file mode 100644 index 0000000..e874919 --- /dev/null +++ b/DoubleDeckerBus/MovementStrategy/Status.java @@ -0,0 +1,7 @@ +package DoubleDeckerBus.MovementStrategy; + +public enum Status { + NotInit, + InProgress, + Finish +} \ No newline at end of file diff --git a/DrawningDoubleDeckerBus.java b/DrawningDoubleDeckerBus.java deleted file mode 100644 index 87b1cb6..0000000 --- a/DrawningDoubleDeckerBus.java +++ /dev/null @@ -1,137 +0,0 @@ -import javax.swing.*; -import java.awt.*; -import java.util.Random; - -public class DrawningDoubleDeckerBus { - JPanel DoubleDeckerBusPanel; - private EntityDoubleDeckerBus EntityDoubleDeckerBus; - private int _pictureWidth; - private int _pictureHeight; - private int _startPosX = 0; - private int _startPosY = 0; - private final int _busWidth = 160; - private final int _busHeight = 100; - private DrawningDoor DrawningDoor; - - public EntityDoubleDeckerBus EntityDoubleDeckerBus() { - return EntityDoubleDeckerBus; - } - - public boolean Init(int speed, double weight, Color bodyColor, Color additionalColor, int doorNumber, - int width, int height, boolean secondFloor, boolean tailpipe, JPanel doubleDeckerBusPanel) { - if (width <= _busWidth || height <= _busHeight) { - return false; - } - - _startPosX = 0; - _startPosY = 0; - doubleDeckerBusPanel.setSize(width, height); - DoubleDeckerBusPanel = doubleDeckerBusPanel; - doubleDeckerBusPanel.paint(DoubleDeckerBusPanel.getGraphics()); - _pictureWidth = width; - _pictureHeight = height; - EntityDoubleDeckerBus = new EntityDoubleDeckerBus(); - EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor, doorNumber, secondFloor, tailpipe); - DrawningDoor = new DrawningDoor(); - DrawningDoor.Init(_busWidth, _busHeight, _startPosX, _startPosY, doubleDeckerBusPanel); - Random random = new Random(); - DrawningDoor.ChangeDoorsNumber(random.nextInt(5) + 2); - return true; - } - - public void SetPosition(int x, int y){ - if (EntityDoubleDeckerBus == null) { - return; - } - - _startPosX = x; - _startPosY = y; - - if (x + _busWidth <= _pictureWidth || y + _busHeight <= _pictureHeight) { - _startPosX = 0; - _startPosY = 0; - } - } - - public void MoveTransport(DirectionType direction){ - if (EntityDoubleDeckerBus == null) - return; - DoubleDeckerBusPanel.paint(DoubleDeckerBusPanel.getGraphics()); - switch (direction) - { - case Left: - if (_startPosX - EntityDoubleDeckerBus.Step() >= 0) - _startPosX -= (int)EntityDoubleDeckerBus.Step(); - else - _startPosX = 0; - break; - case Up: - if (_startPosY - EntityDoubleDeckerBus.Step() >= 0) - _startPosY -= (int)EntityDoubleDeckerBus.Step(); - else - _startPosY = 0; - break; - case Right: - if (_startPosX + EntityDoubleDeckerBus.Step() + _busWidth < _pictureWidth) - _startPosX += (int)EntityDoubleDeckerBus.Step(); - else - _startPosX = _pictureWidth - _busWidth; - break; - case Down: - if (_startPosY + EntityDoubleDeckerBus.Step() + _busHeight < _pictureHeight) - _startPosY += (int)EntityDoubleDeckerBus.Step(); - else - _startPosY = _pictureHeight - _busHeight; - break; - } - DrawningDoor.CurX = _startPosX; - DrawningDoor.CurY = _startPosY; - } - - public void DrawTransport() { - Graphics2D g2d = (Graphics2D) DoubleDeckerBusPanel.getGraphics(); - - if (EntityDoubleDeckerBus == null) { - return; - } - - // Границы первого этажа автобуса - g2d.setColor(EntityDoubleDeckerBus.BodyColor()); - g2d.fillRect(_startPosX + 40, _startPosY + 40, 120, 40); - - // Колеса - g2d.setColor(Color.black); - g2d.fillOval(_startPosX + 45, _startPosY + 75, 20, 20); - g2d.fillOval(_startPosX + 127, _startPosY + 75, 20, 20); - - // Окна - g2d.setColor(Color.blue); - g2d.fillOval(_startPosX + 50, _startPosY + 45, 20, 20); - g2d.fillOval(_startPosX + 75, _startPosY + 45, 20, 20); - g2d.fillOval(_startPosX + 100, _startPosY + 45, 20, 20); - g2d.fillOval(_startPosX + 125, _startPosY + 45, 20, 20); - - // Двери - DrawningDoor.DrawDoors(); - - // Второй этаж - if (EntityDoubleDeckerBus.SecondFloor()) { - g2d.setColor(EntityDoubleDeckerBus.AdditionalColor()); - // Границы второго этажа автобуса - g2d.fillRect(_startPosX + 40, _startPosY, 120, 40); - - // Окна второго этажа - g2d.setColor(Color.blue); - g2d.fillOval(_startPosX + 50, _startPosY +10,20, 20); - g2d.fillOval(_startPosX + 75, _startPosY +10, 20, 20); - g2d.fillOval(_startPosX + 100, _startPosY +10,20, 20); - g2d.fillOval(_startPosX + 125, _startPosY +10,20,20); - } - - if (EntityDoubleDeckerBus.Tailpipe()) { - g2d.setColor(EntityDoubleDeckerBus.AdditionalColor()); - g2d.fillRect(_startPosX, _startPosY + 65, 40, 15); - } - } - -} diff --git a/EntityDoubleDeckerBus.java b/EntityDoubleDeckerBus.java deleted file mode 100644 index 4f8d9ff..0000000 --- a/EntityDoubleDeckerBus.java +++ /dev/null @@ -1,55 +0,0 @@ -import java.awt.*; - -public class EntityDoubleDeckerBus { - private int Speed; - private int DoorNumber; - private double Weight; - private Color BodyColor; - private Color AdditionalColor; - private boolean SecondFloor; - private boolean Tailpipe; - private double Step; - - public int Speed() { - return Speed; - } - - public int DoorNumber() { - return DoorNumber; - } - - public double Weight() { - return Weight; - } - - public Color BodyColor() { - return BodyColor; - } - - public Color AdditionalColor() { - return AdditionalColor; - } - - public boolean SecondFloor() { - return SecondFloor; - } - - public boolean Tailpipe() { - return Tailpipe; - } - public double Step() { - return Step; - } - - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, - int doorNumber, boolean secondFloor ,boolean tailpipe) { - Speed = speed; - Weight = weight; - Step = (double) Speed * 100 / Weight; - BodyColor = bodyColor; - AdditionalColor = additionalColor; - SecondFloor = secondFloor; - DoorNumber = doorNumber; - Tailpipe = tailpipe; - } -} diff --git a/FormDoubleDeckerBus.java b/FormDoubleDeckerBus.java deleted file mode 100644 index cea8ab1..0000000 --- a/FormDoubleDeckerBus.java +++ /dev/null @@ -1,94 +0,0 @@ -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.Random; -import javax.imageio.ImageIO; -import javax.swing.*; - -public class FormDoubleDeckerBus { - public static void main(String[] args) throws IOException { - JFrame DoubleDeckerBusFrame = new JFrame(); - JPanel DoubleDeckerBusPanel = new JPanel(); - DoubleDeckerBusFrame.setLayout(new BorderLayout()); - DoubleDeckerBusFrame.setSize(900, 500); - DoubleDeckerBusFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - DoubleDeckerBusFrame.setLayout(new BorderLayout(1,1)); - DrawningDoubleDeckerBus DrawningDoubleDeckerBus = new DrawningDoubleDeckerBus(); - DoubleDeckerBusPanel.setLayout(null); - BufferedImage RightIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/right.png")); - BufferedImage LeftIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/left.png")); - BufferedImage UpIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/up.png")); - BufferedImage DownIcon = ImageIO.read(new File("C:/Users/User/IdeaProjects/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/down.png")); - - JButton RightButton = new JButton(new ImageIcon(RightIcon)); - JButton LeftButton = new JButton(new ImageIcon(LeftIcon)); - JButton UpButton = new JButton(new ImageIcon(UpIcon)); - JButton DownButton = new JButton(new ImageIcon(DownIcon)); - JButton CreateButton = new JButton(); - CreateButton.setText("Create"); - CreateButton.setBounds(12, 401, 90, 40); - RightButton.setBounds(840,411,30,30); - LeftButton.setBounds(768,411,30,30); - UpButton.setBounds(804,375,30,30); - DownButton.setBounds(804,411,30,30); - DoubleDeckerBusPanel.add(CreateButton); - DoubleDeckerBusPanel.add(RightButton); - DoubleDeckerBusPanel.add(LeftButton); - DoubleDeckerBusPanel.add(UpButton); - DoubleDeckerBusPanel.add(DownButton); - DoubleDeckerBusFrame.add(DoubleDeckerBusPanel, BorderLayout.CENTER); - Random random = new Random(); - CreateButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - DrawningDoubleDeckerBus.Init(random.nextInt(201) + 100, random.nextDouble() * 2000 + 1000, - Color.getHSBColor(random.nextInt(301), random.nextInt(301), random.nextInt(301)), - Color.getHSBColor(random.nextInt(301), random.nextInt(301), random.nextInt(301)), - random.nextInt(4) + 2, DoubleDeckerBusPanel.getWidth(), DoubleDeckerBusPanel.getHeight(), - random.nextBoolean(), random.nextBoolean(), DoubleDeckerBusPanel); - DrawningDoubleDeckerBus.DrawTransport(); - } - }); - RightButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningDoubleDeckerBus.EntityDoubleDeckerBus() == null) - return; - DrawningDoubleDeckerBus.MoveTransport(DirectionType.Right); - DrawningDoubleDeckerBus.DrawTransport(); - } - }); - LeftButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningDoubleDeckerBus.EntityDoubleDeckerBus() == null) - return; - DrawningDoubleDeckerBus.MoveTransport(DirectionType.Left); - DrawningDoubleDeckerBus.DrawTransport(); - } - }); - UpButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningDoubleDeckerBus.EntityDoubleDeckerBus() == null) - return; - DrawningDoubleDeckerBus.MoveTransport(DirectionType.Up); - DrawningDoubleDeckerBus.DrawTransport(); - } - }); - DownButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(DrawningDoubleDeckerBus.EntityDoubleDeckerBus() == null) - return; - DrawningDoubleDeckerBus.MoveTransport(DirectionType.Down); - DrawningDoubleDeckerBus.DrawTransport(); - } - }); - - DoubleDeckerBusFrame.setVisible(true); - } -} diff --git a/Resources/down.png b/Resources/down.png new file mode 100644 index 0000000000000000000000000000000000000000..870965acbac27a8fef31dc13423969901121c5c7 GIT binary patch literal 10121 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 DFV+PD literal 0 HcmV?d00001 diff --git a/Resources/left.png b/Resources/left.png new file mode 100644 index 0000000000000000000000000000000000000000..3636498f39090b5894dd799ab037ded128be2cec GIT binary patch literal 9654 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 literal 0 HcmV?d00001 diff --git a/Resources/up.png b/Resources/up.png new file mode 100644 index 0000000000000000000000000000000000000000..84db55c1f0317a5bb36e68860db7239de90d0265 GIT binary patch literal 10441 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 Wsux&lLk|phSeRO$d3@S4_J0Ahv|S1S literal 0 HcmV?d00001 diff --git a/out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/down.png b/out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/down.png new file mode 100644 index 0000000000000000000000000000000000000000..870965acbac27a8fef31dc13423969901121c5c7 GIT binary patch literal 10121 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 DFV+PD literal 0 HcmV?d00001 diff --git a/out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/left.png b/out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/left.png new file mode 100644 index 0000000000000000000000000000000000000000..3636498f39090b5894dd799ab037ded128be2cec GIT binary patch literal 9654 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 literal 0 HcmV?d00001 diff --git a/out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/up.png b/out/production/PIbd-21_Zhirnova_A_E_DoubleDeckerBus._Hard/Resources/up.png new file mode 100644 index 0000000000000000000000000000000000000000..84db55c1f0317a5bb36e68860db7239de90d0265 GIT binary patch literal 10441 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 Wsux&lLk|phSeRO$d3@S4_J0Ahv|S1S literal 0 HcmV?d00001