From 90ceb3ed941c3197f3eafba5e64de5b316597ec5 Mon Sep 17 00:00:00 2001 From: Programmist73 Date: Thu, 3 Nov 2022 23:34:20 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BE=D1=82=D1=80=D0=B8=D1=81=D0=BE=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82,=20=D1=84=D0=BE=D1=80=D0=BC=D1=8B,=20?= =?UTF-8?q?=D0=B8=20=D1=82.=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/src/DesertStormMap.java | 51 ++++ Project/src/Direction.java | 4 +- Project/src/DrawingAirbus.java | 48 ++++ Project/src/DrawingAirplaneWindow.java | 57 +++-- Project/src/DrawingPlane.java | 102 +++++--- Project/src/DrawingRectAirplaneWindow.java | 55 +++++ .../src/DrawingTriangleAirplaneWindow.java | 63 +++++ Project/src/DrawningObjectPlane.java | 50 ++++ Project/src/EntityAirbus.java | 21 ++ Project/src/EntityPlane.java | 4 +- Project/src/FormAirbus.form | 2 +- Project/src/FormAirbus.java | 15 +- Project/src/FormMap.form | 125 ++++++++++ Project/src/FormMap.java | 217 ++++++++++++++++++ Project/src/Main.java | 4 +- Project/src/SimpleMap.java | 51 ++++ Project/src/StarWarsMap.java | 55 +++++ 17 files changed, 847 insertions(+), 77 deletions(-) create mode 100644 Project/src/DesertStormMap.java create mode 100644 Project/src/DrawingAirbus.java create mode 100644 Project/src/DrawingRectAirplaneWindow.java create mode 100644 Project/src/DrawingTriangleAirplaneWindow.java create mode 100644 Project/src/DrawningObjectPlane.java create mode 100644 Project/src/EntityAirbus.java create mode 100644 Project/src/FormMap.form create mode 100644 Project/src/FormMap.java create mode 100644 Project/src/SimpleMap.java create mode 100644 Project/src/StarWarsMap.java diff --git a/Project/src/DesertStormMap.java b/Project/src/DesertStormMap.java new file mode 100644 index 0000000..a806b60 --- /dev/null +++ b/Project/src/DesertStormMap.java @@ -0,0 +1,51 @@ +import java.awt.*; + +public class DesertStormMap extends AbstractMap{ + //цвет закрытого участка + private final Color barriedColor = new Color(139, 0, 0); + + //цвет открытого участка + private final Color roadColor = new Color(255, 140, 0); + + @Override + protected void GenerateMap() { + _map = new int[100][100]; + _size_x = (float)_width / _map.length; + _size_y = (float)_height / _map[0].length; + int counter = 0; + + for(int i = 0; i < _map.length; ++i) + { + for(int j = 0; j < _map[0].length; ++j) + { + _map[i][j] = _freeRoad; + } + } + + while(counter < 50) + { + int x = _random.nextInt(0, 100); + int y = _random.nextInt(0, 100); + + if (_map[x][y] == _freeRoad) + { + _map[x][y] = _barrier; + counter++; + } + } + } + + @Override + protected void DrawRoadPart(Graphics g, int i, int j) { + Graphics2D g2d = (Graphics2D)g; + g2d.setPaint(roadColor); + g2d.fillRect((int)(i * _size_x), (int)(j * _size_y), (int)(_size_x), (int)(_size_y)); + } + + @Override + protected void DrawBarrierPart(Graphics g, int i, int j) { + Graphics2D g2d = (Graphics2D)g; + g2d.setPaint(barriedColor); + g.fillRect((int)(i * _size_x), (int)(j * _size_y), (int)(_size_x), (int)(_size_y)); + } +} diff --git a/Project/src/Direction.java b/Project/src/Direction.java index 6716191..e2d98d9 100644 --- a/Project/src/Direction.java +++ b/Project/src/Direction.java @@ -1,4 +1,6 @@ -public enum Direction { +//направление перемещения +public enum Direction +{ Up(1), Down(2), Left(3), diff --git a/Project/src/DrawingAirbus.java b/Project/src/DrawingAirbus.java new file mode 100644 index 0000000..3c53628 --- /dev/null +++ b/Project/src/DrawingAirbus.java @@ -0,0 +1,48 @@ +import java.awt.*; + +public class DrawingAirbus extends DrawingPlane +{ + //Инициализаци свойств + public DrawingAirbus(int speed, int weight, Color corpusColor, Color addColor, boolean addCompartment, boolean addEngine) + { + super(speed, weight, corpusColor, 110, 60); + Plane = new EntityAirbus(speed, weight, corpusColor, addColor, addCompartment, addEngine); + } + + @Override + public void DrawTransport(Graphics g) + { + Graphics2D g2d = (Graphics2D) g; + EntityAirbus airbus; + + if (!(GetPlane() instanceof EntityAirbus)) + { + return; + } + + airbus = (EntityAirbus) Plane; + _startPosX += 10; + _startPosY += 5; + super.DrawTransport(g); + _startPosX -= 10; + _startPosY -= 5; + + //дополнительный пассажирский отсек + if (airbus.AddСompartment) + { + g2d.setPaint(airbus.AddColor); + g.fillRect((int)_startPosX + 30, (int)_startPosY + 12, 14, 3); + g2d.setPaint(Color.BLACK); + g.drawRect((int)_startPosX + 30, (int)_startPosY + 12, 14, 3); + } + + //дополнительный двигатель + if (airbus.AddEngine) + { + g2d.setPaint(airbus.AddColor); + g.fillOval((int)_startPosX + 24, (int)_startPosY + 22, 10, 5); + g2d.setPaint(Color.BLACK); + g.drawOval((int)_startPosX + 24, (int)_startPosY + 22, 10, 5); + } + } +} diff --git a/Project/src/DrawingAirplaneWindow.java b/Project/src/DrawingAirplaneWindow.java index ec6a8ab..186b922 100644 --- a/Project/src/DrawingAirplaneWindow.java +++ b/Project/src/DrawingAirplaneWindow.java @@ -1,16 +1,19 @@ import javax.swing.*; import java.awt.*; -public class DrawingAirplaneWindow extends JComponent +public class DrawingAirplaneWindow extends JComponent implements IAdditionalDrawingObject { private Additional_Enum _airplaneWindowEnum; - public void SetAddEnum(int decksAmount) { + @Override + public void SetAddEnum(int airplaneWindow) + { for(Additional_Enum item : _airplaneWindowEnum.values()) { - if(item.GetAddEnum() == decksAmount) + if(item.GetAddEnum() == airplaneWindow) { _airplaneWindowEnum = item; + return; } } @@ -21,35 +24,31 @@ public class DrawingAirplaneWindow extends JComponent super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; - switch(_airplaneWindowEnum.GetAddEnum()) + if(_airplaneWindowEnum.GetAddEnum() >= 1) { - case 1: - g2d.setPaint(colorWindow); - g2d.fillOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); + g2d.setPaint(colorWindow); + g2d.fillOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); - g2d.setPaint(Color.BLACK); - g2d.drawOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); - break; - case 2: - g2d.setPaint(colorWindow); - g2d.fillOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); - g2d.fillOval((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); + g2d.setPaint(Color.BLACK); + g2d.drawOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); + } - g2d.setPaint(Color.BLACK); - g2d.drawOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); - g2d.drawOval((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); - break; - case 3: - g2d.setPaint(colorWindow); - g2d.fillOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); - g2d.fillOval((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); - g2d.fillOval((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); + if(_airplaneWindowEnum.GetAddEnum() >= 2) + { + g2d.setPaint(colorWindow); + g2d.fillOval((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); - g2d.setPaint(Color.BLACK); - g2d.drawOval((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); - g2d.drawOval((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); - g2d.drawOval((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); - break; + g2d.setPaint(Color.BLACK); + g2d.drawOval((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); + } + + if(_airplaneWindowEnum.GetAddEnum() >= 3) + { + g2d.setPaint(colorWindow); + g2d.fillOval((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); + + g2d.setPaint(Color.BLACK); + g2d.drawOval((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); } } -} \ No newline at end of file +} diff --git a/Project/src/DrawingPlane.java b/Project/src/DrawingPlane.java index 30157bf..8c58f47 100644 --- a/Project/src/DrawingPlane.java +++ b/Project/src/DrawingPlane.java @@ -1,40 +1,68 @@ import java.awt.*; +import javax.swing.*; import java.awt.Color; import java.util.Random; -public class DrawingPlane +public class DrawingPlane extends JPanel { - public EntityPlane Airbus; //класс-сущность - public DrawingAirplaneWindow _airplaneWindow; //для дополнительной отрисовки + protected EntityPlane Plane; //класс-сущность + public IAdditionalDrawingObject _airplaneWindow; //для дополнительной отрисовки - private float _startPosX; //левая координата отрисовки - private float _startPosY; //верхняя координата отрисовки - private Integer _pictureWidth = null; //ширина окна отрисовки - private Integer _pictureHeight = null; //высота окна отрисовки - protected final int _airbusWidth = 50; //ширина отрисовки самолёта - protected final int _airbusHeight = 16; //высота отрисовки самолёта - - //инициализаци свойств - public void Initial(int speed, float weight, Color corpusColor) - { - Airbus = new EntityPlane(); - Airbus.Initial(speed, weight, corpusColor); - _airplaneWindow = new DrawingAirplaneWindow(); - - SetAddEnum(); - } - - //установка кол-ва иллюминаторов public void SetAddEnum() { Random rnd = new Random(); - int countWindow = rnd.nextInt(1, 4); - _airplaneWindow.SetAddEnum(countWindow); + int numbEnum = rnd.nextInt(1, 4); + _airplaneWindow.SetAddEnum(numbEnum); + } + + public void SetFormEnum() + { + Random rnd = new Random(); + + int numbEnum = rnd.nextInt(1, 4); + + if(numbEnum == 1) + { + _airplaneWindow = new DrawingAirplaneWindow(); + } + + if(numbEnum == 2) + { + _airplaneWindow = new DrawingTriangleAirplaneWindow(); + } + + if(numbEnum == 3) + { + _airplaneWindow = new DrawingRectAirplaneWindow(); + } } public EntityPlane GetPlane() { - return Airbus; + return Plane; + } + + protected float _startPosX; //левая координата отрисовки + protected float _startPosY; //верхняя координата отрисовки + private Integer _pictureWidth = null; //ширина окна отрисовки + private Integer _pictureHeight = null; //высота окна отрисовки + protected int _airbusWidth = 50; //ширина отрисовки самолёта + protected int _airbusHeight = 16; //высота отрисовки самолёта + + //конструктор + public DrawingPlane(int speed, float weight, Color corpusColor) + { + Plane = new EntityPlane(speed, weight, corpusColor); + SetFormEnum(); + SetAddEnum(); + } + + //конструктор + public DrawingPlane(int speed, float weight, Color corpusColor, int planeWidth, int planeHeight) + { + this(speed, weight, corpusColor); + _airbusWidth = planeWidth; + _airbusHeight = planeHeight; } //установка координат позиции самолёта @@ -65,30 +93,30 @@ public class DrawingPlane switch (direction) { case Right: //вправо - if (_startPosX + _airbusWidth + Airbus.GetStep() < _pictureWidth) + if (_startPosX + _airbusWidth + Plane.GetStep() < _pictureWidth) { - _startPosX += Airbus.GetStep(); + _startPosX += Plane.GetStep(); } break; case Left: //влево - if (_startPosX - _airbusWidth - Airbus.GetStep() > 0) + if (_startPosX - _airbusWidth - Plane.GetStep() > 0) { - _startPosX -= Airbus.GetStep(); + _startPosX -= Plane.GetStep(); } break; case Up: //вверх - if (_startPosY - _airbusHeight - Airbus.GetStep() > 0) + if (_startPosY - _airbusHeight - Plane.GetStep() > 0) { - _startPosY -= Airbus.GetStep(); + _startPosY -= Plane.GetStep(); } break; case Down: //вниз - if (_startPosY + _airbusHeight + Airbus.GetStep() < _pictureHeight) + if (_startPosY + _airbusHeight + Plane.GetStep() < _pictureHeight) { - _startPosY += Airbus.GetStep(); + _startPosY += Plane.GetStep(); } break; } @@ -143,7 +171,7 @@ public class DrawingPlane g2d.drawLine((int)_startPosX + 40, (int)_startPosY + 20, (int)_startPosX + 50, (int)_startPosY + 15); //отрисовка иллюминаторов - _airplaneWindow.DrawAirplaneWindow(Airbus.GetColor(), g, _startPosX, _startPosY); + _airplaneWindow.DrawAirplaneWindow(Plane.GetColor(), g, _startPosX, _startPosY); } //смена границ формы отрисовки @@ -169,4 +197,10 @@ public class DrawingPlane _startPosY = _pictureHeight - _airbusHeight; } } -} \ No newline at end of file + + public float[] GetCurrentPosition() + { + return new float[] {_startPosX, _startPosX + _airbusWidth, + _startPosY + _airbusHeight, _startPosX}; + } +} diff --git a/Project/src/DrawingRectAirplaneWindow.java b/Project/src/DrawingRectAirplaneWindow.java new file mode 100644 index 0000000..9055068 --- /dev/null +++ b/Project/src/DrawingRectAirplaneWindow.java @@ -0,0 +1,55 @@ +import javax.swing.*; +import java.awt.*; + +public class DrawingRectAirplaneWindow extends JComponent implements IAdditionalDrawingObject +{ + private Additional_Enum _airplaneWindowEnum; + + @Override + public void SetAddEnum(int airplaneWindow) + { + for(Additional_Enum item : _airplaneWindowEnum.values()) + { + if(item.GetAddEnum() == airplaneWindow) + { + _airplaneWindowEnum = item; + + return; + } + } + } + + public void DrawAirplaneWindow(Color colorWindow, Graphics g, float _startPosX, float _startPosY) + { + super.paintComponent(g); + Graphics2D g2d = (Graphics2D) g; + + if(_airplaneWindowEnum.GetAddEnum() >= 1) + { + g2d.setPaint(colorWindow); + g2d.fillRect((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); + + g2d.setPaint(Color.BLACK); + g2d.drawRect((int)_startPosX + 9, (int)_startPosY + 11, 6, 4); + } + + if(_airplaneWindowEnum.GetAddEnum() >= 2) + { + g2d.setPaint(colorWindow); + g2d.fillRect((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); + + g2d.setPaint(Color.BLACK); + g2d.drawRect((int)_startPosX + 18, (int)_startPosY + 11, 6, 4); + } + + if(_airplaneWindowEnum.GetAddEnum() >= 3) + { + g2d.setPaint(colorWindow); + g2d.fillRect((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); + + g2d.setPaint(Color.BLACK); + g2d.drawRect((int)_startPosX + 27, (int)_startPosY + 11, 6, 4); + } + } +} + diff --git a/Project/src/DrawingTriangleAirplaneWindow.java b/Project/src/DrawingTriangleAirplaneWindow.java new file mode 100644 index 0000000..bdbebfb --- /dev/null +++ b/Project/src/DrawingTriangleAirplaneWindow.java @@ -0,0 +1,63 @@ +import javax.swing.*; +import java.awt.*; + +public class DrawingTriangleAirplaneWindow extends JComponent implements IAdditionalDrawingObject +{ + private Additional_Enum _airplaneWindowEnum; + + @Override + public void SetAddEnum(int airplaneWindow) + { + for(Additional_Enum item : _airplaneWindowEnum.values()) + { + if(item.GetAddEnum() == airplaneWindow) + { + _airplaneWindowEnum = item; + + return; + } + } + } + + public void DrawAirplaneWindow(Color colorWindow, Graphics g, float _startPosX, float _startPosY) + { + super.paintComponent(g); + Graphics2D g2d = (Graphics2D) g; + + if(_airplaneWindowEnum.GetAddEnum() >= 1) + { + int[] x_point = {(int)_startPosX + 12, (int)_startPosX + 16, (int)_startPosX + 9}; + int[] y_point = {(int)_startPosY + 11, (int)_startPosY + 15, (int)_startPosY + 15}; + + g2d.setPaint(colorWindow); + g2d.fillPolygon(x_point, y_point, 3); + + g2d.setPaint(Color.BLACK); + g2d.drawPolygon(x_point, y_point, 3); + } + + if(_airplaneWindowEnum.GetAddEnum() >= 2) + { + int[] x_point = {(int)_startPosX + 21, (int)_startPosX + 25, (int)_startPosX + 18}; + int[] y_point = {(int)_startPosY + 11, (int)_startPosY + 15, (int)_startPosY + 15}; + + g2d.setPaint(colorWindow); + g2d.fillPolygon(x_point, y_point, 3); + + g2d.setPaint(Color.BLACK); + g2d.drawPolygon(x_point, y_point, 3); + } + + if(_airplaneWindowEnum.GetAddEnum() >= 3) + { + int[] x_point = {(int)_startPosX + 30, (int)_startPosX + 34, (int)_startPosX + 27}; + int[] y_point = {(int)_startPosY + 11, (int)_startPosY + 15, (int)_startPosY + 15}; + + g2d.setPaint(colorWindow); + g2d.fillPolygon(x_point, y_point, 3); + + g2d.setPaint(Color.BLACK); + g2d.drawPolygon(x_point, y_point, 3); + } + } +} diff --git a/Project/src/DrawningObjectPlane.java b/Project/src/DrawningObjectPlane.java new file mode 100644 index 0000000..7240f70 --- /dev/null +++ b/Project/src/DrawningObjectPlane.java @@ -0,0 +1,50 @@ +import java.awt.*; + +public class DrawningObjectPlane implements IDrawningObject +{ + private DrawingPlane _plane = null; + + public DrawningObjectPlane(DrawingPlane plane){ + _plane = plane; + } + + @Override + public float Step() + { + if(_plane != null && _plane.Plane != null) + { + return _plane.Plane.GetStep(); + } + + return 0; + } + + @Override + public void SetObject(int x, int y, int width, int height) + { + _plane.SetPosition(x, y, width, height); + } + + @Override + public void MoveObject(Direction direction) + { + _plane.MoveTransport(direction); + } + + @Override + public void DrawningObject(Graphics g) + { + _plane.DrawTransport(g); + } + + @Override + public float[] GetCurrentPosition() + { + if(_plane != null) + { + return _plane.GetCurrentPosition(); + } + + return null; + } +} diff --git a/Project/src/EntityAirbus.java b/Project/src/EntityAirbus.java new file mode 100644 index 0000000..25c99c8 --- /dev/null +++ b/Project/src/EntityAirbus.java @@ -0,0 +1,21 @@ +import java.awt.*; + +public class EntityAirbus extends EntityPlane{ + //Дополнительный цвет + public Color AddColor; + + //Признак наличия дополнительно пассажирского отсека + public boolean AddСompartment; + + //Признак наличия дополнительных двигателей + public boolean AddEngine; + + //Инициализация свойств + public EntityAirbus(int speed, float weight, Color corpusColor, Color addColor, boolean addCompartment, boolean addEngine) + { + super(speed, weight, corpusColor); + AddColor = addColor; + AddСompartment = addCompartment; + AddEngine = addEngine; + } +} diff --git a/Project/src/EntityPlane.java b/Project/src/EntityPlane.java index 38df649..f9e4256 100644 --- a/Project/src/EntityPlane.java +++ b/Project/src/EntityPlane.java @@ -22,10 +22,10 @@ public class EntityPlane return Speed * 100 / Weight; } - public void Initial(int speed, float weight, Color corpusColor) + public EntityPlane(int speed, float weight, Color corpusColor) { Speed = speed; Weight = weight; CorpusColor = corpusColor; } -} \ No newline at end of file +} diff --git a/Project/src/FormAirbus.form b/Project/src/FormAirbus.form index b34deed..714bd1f 100644 --- a/Project/src/FormAirbus.form +++ b/Project/src/FormAirbus.form @@ -63,7 +63,7 @@ - + diff --git a/Project/src/FormAirbus.java b/Project/src/FormAirbus.java index 3fbd8c3..d682a4e 100644 --- a/Project/src/FormAirbus.java +++ b/Project/src/FormAirbus.java @@ -9,7 +9,7 @@ import java.util.Random; public class FormAirbus { - protected DrawingPlane plane = new DrawingPlane(); + protected DrawingPlane plane; public JPanel MainPanel; private JButton ButtonCreate; @@ -18,7 +18,7 @@ public class FormAirbus private JButton ButtonRight; private JButton ButtonUp; private JToolBar StatusStrip; - private JPanel PictureBox; + private JPanel PictureBoxPlane; private JLabel LabelSpeed = new JLabel(); private JLabel LabelWeight = new JLabel(); private JLabel LabelColor = new JLabel(); @@ -51,12 +51,11 @@ public class FormAirbus ButtonCreate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - plane = new DrawingPlane(); Random rnd = new Random(); - plane.Initial(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), + plane = new DrawingPlane(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), new Color(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))); plane.SetPosition(rnd.nextInt(10, 100), rnd.nextInt(10, 100), - PictureBox.getWidth(), PictureBox.getHeight()); + PictureBoxPlane.getWidth(), PictureBoxPlane.getHeight()); LabelSpeed.setText("Скорость: " + plane.GetPlane().GetSpeed() + " "); LabelWeight.setText("Вес: " + plane.GetPlane().GetWeight() + " "); LabelColor.setText("Цвет: r = " + plane.GetPlane().GetColor().getRed() + " g = " + plane.GetPlane().GetColor().getGreen() + @@ -70,7 +69,7 @@ public class FormAirbus @Override public void componentResized(ComponentEvent e) { super.componentResized(e); - plane.ChangeBorders(PictureBox.getWidth(), PictureBox.getHeight()); + plane.ChangeBorders(PictureBoxPlane.getWidth(), PictureBoxPlane.getHeight()); Draw(); } }); @@ -115,6 +114,6 @@ public class FormAirbus return; } - plane.DrawTransport(PictureBox.getGraphics()); + plane.DrawTransport(PictureBoxPlane.getGraphics()); } -} \ No newline at end of file +} diff --git a/Project/src/FormMap.form b/Project/src/FormMap.form new file mode 100644 index 0000000..1aca1e8 --- /dev/null +++ b/Project/src/FormMap.form @@ -0,0 +1,125 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Project/src/FormMap.java b/Project/src/FormMap.java new file mode 100644 index 0000000..531d17d --- /dev/null +++ b/Project/src/FormMap.java @@ -0,0 +1,217 @@ +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.image.BufferedImage; +import java.util.Random; +import java.util.Set; + +public class FormMap extends JFrame +{ + public JPanel MainPanel; + private JButton ButtonCreate; + private JButton ButtonCreateModif; + private JButton ButtonLeft; + private JButton ButtonDown; + private JButton ButtonRight; + private JButton ButtonUp; + private JToolBar StatusStrip; + private JPanel PictureBoxPlane; + private JComboBox ComboBoxSelectorMap; + private JLabel LabelSpeed = new JLabel(); + private JLabel LabelWeight = new JLabel(); + private JLabel LabelColor = new JLabel(); + + protected DrawingPlane _plane; + private AbstractMap _abstractMap; + private Random rnd = new Random(); + private BufferedImage bufferImg = null; + + public void Draw() + { + PictureBoxPlane.removeAll(); + + bufferImg = new BufferedImage(PictureBoxPlane.getWidth(), PictureBoxPlane.getHeight(), BufferedImage.TYPE_INT_RGB); + Graphics g = bufferImg.getGraphics(); + g.setColor(new Color(238, 238, 238)); + g.fillRect(0, 0, PictureBoxPlane.getWidth(), PictureBoxPlane.getHeight()); + + if(_plane != null) + { + _plane.DrawTransport(g); + JLabel imageOfLogo = new JLabel(); + imageOfLogo.setPreferredSize(PictureBoxPlane.getSize()); + imageOfLogo.setMinimumSize(new Dimension(1, 1)); + imageOfLogo.setIcon(new ImageIcon(bufferImg)); + PictureBoxPlane.add(imageOfLogo, BorderLayout.CENTER); + } + + validate(); + } + + @Override + public void paint(Graphics g) + { + super.paint(g); + Draw(); + } + + public void SetData(DrawingPlane _plane) + { + PictureBoxPlane.removeAll(); + + LabelSpeed.setText("Скорость: " + _plane.GetPlane().GetSpeed() + " "); + LabelWeight.setText("Вес: " + _plane.GetPlane().GetWeight() + " "); + LabelColor.setText("Цвет: r = " + _plane.GetPlane().GetColor().getRed() + " g = " + _plane.GetPlane().GetColor().getGreen() + + " b = " + _plane.GetPlane().GetColor().getBlue()); + + JLabel imageWithMapAndObject = new JLabel(); + imageWithMapAndObject.setPreferredSize(PictureBoxPlane.getSize()); + imageWithMapAndObject.setMinimumSize(new Dimension(1, 1)); + imageWithMapAndObject.setIcon(new ImageIcon(_abstractMap.CreateMap(PictureBoxPlane.getWidth(), PictureBoxPlane.getHeight(), new DrawningObjectPlane((_plane))))); + PictureBoxPlane.add(imageWithMapAndObject, BorderLayout.CENTER); + PictureBoxPlane.revalidate(); + } + + public FormMap() + { + _abstractMap = new SimpleMap(); + //создание строки отображения скорости, веса и цвета объекта + Box LableBox = Box.createHorizontalBox(); + LableBox.setMinimumSize(new Dimension(1, 20)); + LableBox.add(LabelSpeed); + LableBox.add(LabelWeight); + LableBox.add(LabelColor); + StatusStrip.add(LableBox); + + try + { + Image img = ImageIO.read(getClass().getResource("resourses/Up.png")); + ButtonUp.setIcon(new ImageIcon(img)); + img = ImageIO.read(getClass().getResource("resourses/Left.png")); + ButtonLeft.setIcon(new ImageIcon(img)); + img = ImageIO.read(getClass().getResource("resourses/Down.png")); + ButtonDown.setIcon(new ImageIcon(img)); + img = ImageIO.read(getClass().getResource("resourses/Right.png")); + ButtonRight.setIcon(new ImageIcon(img)); + } catch (Exception ex) + { + System.out.println(ex.getMessage()); + } + + _plane = new DrawingPlane(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), new Color(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))); + + ButtonCreate.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Random rnd = new Random(); + var plane = new DrawingPlane(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), + new Color(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))); + plane.SetPosition(rnd.nextInt(10, 100), rnd.nextInt(10, 100), + PictureBoxPlane.getWidth(), PictureBoxPlane.getHeight()); + SetData(plane); + } + }); + + ButtonUp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + PictureBoxPlane.removeAll(); + + JLabel imageWithMapAndObject = new JLabel(); + imageWithMapAndObject.setPreferredSize(PictureBoxPlane.getSize()); + imageWithMapAndObject.setMinimumSize(new Dimension(1, 1)); + imageWithMapAndObject.setIcon(new ImageIcon(_abstractMap.MoveObject((Direction.Up)))); + + PictureBoxPlane.add(imageWithMapAndObject, BorderLayout.CENTER); + PictureBoxPlane.revalidate(); + PictureBoxPlane.repaint(); + } + }); + + ButtonLeft.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + PictureBoxPlane.removeAll(); + + JLabel imageWithMapAndObject = new JLabel(); + imageWithMapAndObject.setPreferredSize(PictureBoxPlane.getSize()); + imageWithMapAndObject.setMinimumSize(new Dimension(1, 1)); + imageWithMapAndObject.setIcon(new ImageIcon(_abstractMap.MoveObject((Direction.Left)))); + + PictureBoxPlane.add(imageWithMapAndObject, BorderLayout.CENTER); + PictureBoxPlane.revalidate(); + PictureBoxPlane.repaint(); + } + }); + + ButtonDown.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + PictureBoxPlane.removeAll(); + + JLabel imageWithMapAndObject = new JLabel(); + imageWithMapAndObject.setPreferredSize(PictureBoxPlane.getSize()); + imageWithMapAndObject.setMinimumSize(new Dimension(1, 1)); + imageWithMapAndObject.setIcon(new ImageIcon(_abstractMap.MoveObject((Direction.Down)))); + + PictureBoxPlane.add(imageWithMapAndObject, BorderLayout.CENTER); + PictureBoxPlane.revalidate(); + PictureBoxPlane.repaint(); + } + }); + + ButtonRight.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + PictureBoxPlane.removeAll(); + + JLabel imageWithMapAndObject = new JLabel(); + imageWithMapAndObject.setPreferredSize(PictureBoxPlane.getSize()); + imageWithMapAndObject.setMinimumSize(new Dimension(1, 1)); + imageWithMapAndObject.setIcon(new ImageIcon(_abstractMap.MoveObject((Direction.Right)))); + + PictureBoxPlane.add(imageWithMapAndObject, BorderLayout.CENTER); + PictureBoxPlane.revalidate(); + PictureBoxPlane.repaint(); + } + }); + + ButtonCreateModif.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + _plane = new DrawingAirbus(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), + new Color(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)), + new Color(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)), + rnd.nextBoolean(), rnd.nextBoolean()); + _plane.SetPosition(rnd.nextInt(100, 500), rnd.nextInt(10, 100), + PictureBoxPlane.getWidth(), PictureBoxPlane.getHeight()); + SetData(_plane); + } + }); + + + ComboBoxSelectorMap.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ComboBoxSelectorMap = (JComboBox)e.getSource(); + String item = (String)ComboBoxSelectorMap.getSelectedItem(); + switch(item) + { + case "Простая карта": + _abstractMap = new SimpleMap(); + break; + case "Буря в пустыне": + _abstractMap = new DesertStormMap(); + break; + case "Звёздные войны": + _abstractMap = new StarWarsMap(); + break; + } + } + }); + } +} diff --git a/Project/src/Main.java b/Project/src/Main.java index 1d1f21a..6b0c728 100644 --- a/Project/src/Main.java +++ b/Project/src/Main.java @@ -3,11 +3,11 @@ import javax.swing.*; public class Main { public static void main(String[] args) { JFrame frame = new JFrame("Airbus"); - frame.setContentPane(new FormAirbus().MainPanel); + frame.setContentPane(new FormMap().MainPanel); 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 +} diff --git a/Project/src/SimpleMap.java b/Project/src/SimpleMap.java new file mode 100644 index 0000000..3eb01a8 --- /dev/null +++ b/Project/src/SimpleMap.java @@ -0,0 +1,51 @@ +import java.awt.*; + +public class SimpleMap extends AbstractMap{ + //цвет закрытого участка + private final Color barriedColor = Color.black; + + //цвет открытого участка + private final Color roadColor = Color.gray; + + @Override + protected void GenerateMap() { + _map = new int[100][100]; + _size_x = (float)_width / _map.length; + _size_y = (float)_height / _map[0].length; + int counter = 0; + + for(int i = 0; i < _map.length; ++i) + { + for(int j = 0; j < _map[0].length; ++j) + { + _map[i][j] = _freeRoad; + } + } + + while(counter < 50) + { + int x = _random.nextInt(0, 100); + int y = _random.nextInt(0, 100); + + if (_map[x][y] == _freeRoad) + { + _map[x][y] = _barrier; + counter++; + } + } + } + + @Override + protected void DrawRoadPart(Graphics g, int i, int j) { + Graphics2D g2d = (Graphics2D)g; + g2d.setPaint(roadColor); + g2d.fillRect((int)(i * _size_x), (int)(j * _size_y), (int)(_size_x), (int)(_size_y)); + } + + @Override + protected void DrawBarrierPart(Graphics g, int i, int j) { + Graphics2D g2d = (Graphics2D)g; + g2d.setPaint(barriedColor); + g2d.fillRect((int)(i * _size_x), (int)(j * _size_y), (int)(_size_x), (int)(_size_y)); + } +} diff --git a/Project/src/StarWarsMap.java b/Project/src/StarWarsMap.java new file mode 100644 index 0000000..8d184ee --- /dev/null +++ b/Project/src/StarWarsMap.java @@ -0,0 +1,55 @@ +import java.awt.*; +import java.util.Random; + +public class StarWarsMap extends AbstractMap{ + Random rnd = new Random(); + + //цвет закрытого участка + Color barriedColor; + + //цвет открытого участка + private final Color roadColor = new Color(0, 0, 139); + + @Override + protected void GenerateMap() { + _map = new int[100][100]; + _size_x = (float)_width / _map.length; + _size_y = (float)_height / _map[0].length; + int counter = 0; + + for(int i = 0; i < _map.length; ++i) + { + for(int j = 0; j < _map[0].length; ++j) + { + _map[i][j] = _freeRoad; + } + } + + while(counter < 50) + { + int x = _random.nextInt(0, 100); + int y = _random.nextInt(0, 100); + + if (_map[x][y] == _freeRoad) + { + _map[x][y] = _barrier; + counter++; + } + } + } + + @Override + protected void DrawRoadPart(Graphics g, int i, int j) { + Graphics2D g2d = (Graphics2D)g; + g2d.setPaint(roadColor); + g2d.fillRect((int)(i * _size_x), (int)(j * _size_y), (int)(_size_x), (int)(_size_y)); + } + + @Override + protected void DrawBarrierPart(Graphics g, int i, int j) { + Graphics2D g2d = (Graphics2D)g; + barriedColor = new Color(rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); + g2d.setPaint(barriedColor); + g2d.fillRect((int)(i * _size_x), (int)(j * _size_y), (int)(_size_x), (int)(_size_y)); + } +}