diff --git a/ProjectStormtrooper/DirectionType.cs b/ProjectStormtrooper/DirectionType.cs
deleted file mode 100644
index d9c72fb..0000000
--- a/ProjectStormtrooper/DirectionType.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-namespace ProjectStormtrooper;
-
-///
-/// Направление перемещения
-///
-public enum DirectionType
-{
- ///
- /// Вверх
- ///
- Up = 1,
-
- ///
- /// Вниз
- ///
- Down = 2,
-
- ///
- /// Влево
- ///
- Left = 3,
-
- ///
- /// Вправо
- ///
- Right = 4
-}
\ No newline at end of file
diff --git a/ProjectStormtrooper/DrawningStormtrooper.cs b/ProjectStormtrooper/DrawningStormtrooper.cs
deleted file mode 100644
index eb4ee81..0000000
--- a/ProjectStormtrooper/DrawningStormtrooper.cs
+++ /dev/null
@@ -1,284 +0,0 @@
-namespace ProjectStormtrooper;
-
-///
-/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
-///
-public class DrawningStormtrooper
-{
- ///
- /// Класс-сущность
- ///
- public EntityStormtrooper? EntityStormtrooper { get; private set; }
-
- ///
- /// Ширина окна
- ///
- private int? _pictureWidth;
-
- ///
- /// Высота окна
- ///
- private int? _pictureHeight;
-
- ///
- /// Левая координата прорисовки автомобиля
- ///
- private int? _startPosX;
-
- ///
- /// Верхняя кооридната прорисовки автомобиля
- ///
- private int? _startPosY;
-
- ///
- /// Ширина прорисовки автомобиля
- ///
- private readonly int _drawningStormtrooperWidth = 150;
-
- ///
- /// Высота прорисовки автомобиля
- ///
- private readonly int _drawningStormtrooperHeight = 120;
-
- ///
- /// Инициализация свойств
- ///
- /// Скорость
- /// Вес
- /// Основной цвет
- /// Дополнительный цвет
- /// Признак наличия обвеса
- /// Признак наличия антикрыла
- public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool dvigatel, bool vint)
- {
- EntityStormtrooper = new EntityStormtrooper();
- EntityStormtrooper.Init(speed, weight, bodyColor, additionalColor, dvigatel, vint);
- _pictureWidth = null;
- _pictureHeight = null;
- _startPosX = null;
- _startPosY = null;
- }
-
- ///
- /// Установка границ поля
- ///
- /// Ширина поля
- /// Высота поля
- /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах
- ///
- /// Установка границ поля
- ///
- /// Ширина поля
- /// Высота поля
- /// true - границы заданы, false - проверка не пройдена, нельзя
- public bool SetPictureSize(int width, int height)
- {
- if (_drawningStormtrooperWidth <= width && _drawningStormtrooperHeight <= height)
- {
- _pictureWidth = width;
- _pictureHeight = height;
- if (_startPosX.HasValue && _startPosY.HasValue)
- {
- if (_startPosX + _drawningStormtrooperWidth > _pictureWidth)
- {
- _startPosX = _pictureWidth - _drawningStormtrooperWidth;
- }
-
- if (_startPosY + _drawningStormtrooperHeight > _pictureHeight)
- {
- _startPosY = _pictureHeight - _drawningStormtrooperHeight;
- }
- }
- return true;
- }
- return false;
- }
- ///
- /// Установка позиции
- ///
- /// Координата X
- /// Координата Y
- public void SetPosition(int x, int y)
- {
- if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
- {
- return;
- }
- if (x < 0) x = 0;
- else if (x + _drawningStormtrooperWidth > _pictureWidth) x = _pictureWidth.Value - _drawningStormtrooperWidth;
-
- if (y < 0) y = 0;
- else if (y + _drawningStormtrooperHeight > _pictureHeight) y = _pictureHeight.Value - _drawningStormtrooperHeight;
- _startPosX = x;
- _startPosY = y;
- }
-
-
- ///
- /// Изменение направления перемещения
- ///
- /// Направление
- /// true - перемещене выполнено, false - перемещение невозможно
- public bool MoveTransport(DirectionType direction)
- {
- if (EntityStormtrooper == null || !_startPosX.HasValue || !_startPosY.HasValue)
- {
- return false;
- }
-
- switch (direction)
- {
- //влево
- case DirectionType.Left:
- if (_startPosX.Value - EntityStormtrooper.Step > 0)
- _startPosX -= (int)EntityStormtrooper.Step;
- return true;
- //вверх
- case DirectionType.Up:
- if (_startPosY.Value - EntityStormtrooper.Step > 0)
- _startPosY -= (int)EntityStormtrooper.Step;
- return true;
- // вправо
- case DirectionType.Right:
- if (_startPosX.Value + _drawningStormtrooperWidth + EntityStormtrooper.Step < _pictureWidth)
- _startPosX += (int)EntityStormtrooper.Step;
- return true;
- //вниз
- case DirectionType.Down:
- if (_startPosY.Value + _drawningStormtrooperHeight + EntityStormtrooper.Step < _pictureHeight)
- _startPosY += (int)EntityStormtrooper.Step;
- return true;
- default:
- return false;
- }
- }
-
- ///
- /// Прорисовка объекта
- ///
- ///
- public void DrawTransport(Graphics g)
- {
- if (EntityStormtrooper == null || !_startPosX.HasValue || !_startPosY.HasValue)
- {
- return;
- }
-
- Pen pen = new(Color.Black);
- Brush additionalBrush = new SolidBrush(EntityStormtrooper.AdditionalColor);
-
- Brush nosBrush = new SolidBrush(Color.Black);
-
- ///отрисовка носа
- Point p = new Point(_startPosX.Value +10, _startPosY.Value + 60 );
- Point p2 = new Point(_startPosX.Value + 30, _startPosY.Value + 50);
- Point p3 = new Point(_startPosX.Value + 30, _startPosY.Value + 70);
- Point p4 = new Point(_startPosX.Value +10, _startPosY.Value + 60);
-
- Brush bortBrush = new SolidBrush(EntityStormtrooper.BodyColor);
-
- ///отрисовка борта
- g.FillRectangle(bortBrush, _startPosX.Value + 30, _startPosY.Value + 50, 130, 20);
- g.DrawRectangle(pen, _startPosX.Value + 30, _startPosY.Value + 50, 130, 20);
-
- ///отрисовка вепхнего крыла
- Point p5 = new Point(_startPosX.Value + 50, _startPosY.Value);
- Point p6 = new Point(_startPosX.Value + 65, _startPosY.Value);
- Point p7 = new Point(_startPosX.Value + 80, _startPosY.Value + 50);
- Point p8 = new Point(_startPosX.Value + 50, _startPosY.Value + 50);
- Point p9 = new Point(_startPosX.Value + 50, _startPosY.Value);
-
- ///отрисовка нижнего крыла
- Point p10 = new Point(_startPosX.Value +50, _startPosY.Value + 70);
- Point p11 = new Point(_startPosX.Value +80, _startPosY.Value + 70);
- Point p12 = new Point(_startPosX.Value +65, _startPosY.Value + 120);
- Point p13 = new Point(_startPosX.Value +50, _startPosY.Value + 120);
- Point p14 = new Point(_startPosX.Value +50, _startPosY.Value + 70);
-
- ///отрисовка верхнего хвоста
- Point p15 = new Point(_startPosX.Value + 125, _startPosY.Value + 50);
- Point p16 = new Point(_startPosX.Value + 125, _startPosY.Value + 37);
- Point p17 = new Point(_startPosX.Value + 150, _startPosY.Value + 20);
- Point p18 = new Point(_startPosX.Value + 150, _startPosY.Value + 50);
- Point p19 = new Point(_startPosX.Value + 125, _startPosY.Value + 50);
-
- ///отрисовка нижнего хвоста
- Point p20 = new Point(_startPosX.Value + 125, _startPosY.Value + 70);
- Point p21 = new Point(_startPosX.Value + 125, _startPosY.Value + 83);
- Point p22 = new Point(_startPosX.Value + 150, _startPosY.Value + 100);
- Point p23 = new Point(_startPosX.Value + 150, _startPosY.Value + 70);
- Point p24 = new Point(_startPosX.Value + 125, _startPosY.Value + 70);
-
- ///отрисовка крепления нижнего двигателя
- Point p33 = new Point(_startPosX.Value + 90, _startPosY.Value + 70);
- Point p34 = new Point(_startPosX.Value + 95, _startPosY.Value + 75);
- Point p35 = new Point(_startPosX.Value + 110, _startPosY.Value + 75);
- Point p36 = new Point(_startPosX.Value + 115, _startPosY.Value + 70);
-
- ///отрисовка крепления верхнего двигателя
- Point p37 = new Point(_startPosX.Value + 90, _startPosY.Value + 50);
- Point p38 = new Point(_startPosX.Value + 95, _startPosY.Value + 45);
- Point p39 = new Point(_startPosX.Value + 110, _startPosY.Value + 45);
- Point p40 = new Point(_startPosX.Value + 115, _startPosY.Value + 50);
-
- ///отрисовка верхней ракеты
- g.DrawEllipse(pen, _startPosX.Value +88, _startPosY.Value + 35, 34, 10);
-
- ///отрисовка нижней ракеты
- g.DrawEllipse(pen, _startPosX.Value + 88, _startPosY.Value + 75, 34, 10);
-
- ///отрисовка винта
- Point p25 = new Point(_startPosX.Value +10, _startPosY.Value + 60);
- Point p26 = new Point(_startPosX.Value +5, _startPosY.Value + 35);
- Point p27 = new Point(_startPosX.Value + 15, _startPosY.Value + 35);
- Point p28 = new Point(_startPosX.Value +10, _startPosY.Value + 60);
-
-
-
- Point p29 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
- Point p30 = new Point(_startPosX.Value + 5, _startPosY.Value + 85);
- Point p31 = new Point(_startPosX.Value + 15, _startPosY.Value + 85);
- Point p32 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
-
- if (EntityStormtrooper.Vint)
- {
- Point[] p_vint = { p25, p26, p27, p28, p29, p30, p31, p32 };
- g.DrawPolygon(pen, p_vint);
- }
-
- // отрисовка двигателей
- if (EntityStormtrooper.Dvigatel)
- {
- g.FillEllipse(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 25, 15, 15);
- g.FillEllipse(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 75, 15, 15);
- }
-
-
-
- Point[] p_nos = { p, p2, p3, p4, };
- Point[] p_krilo1 = { p5, p6, p7, p8, p9 };
- Point[] p_krilo2 = { p10, p11, p12, p13, p14 };
- Point[] p_hvost1 = { p15, p16, p17, p18, p19 };
- Point[] p_hvost2 = { p20, p21, p22, p23, p24 };
- Point[] p_kreplenie2 = { p33, p34, p35, p36 };
- Point[] p_kreplenie1 = { p37, p38, p39, p40 };
-
- g.FillPolygon(nosBrush, p_nos);
- g.FillPolygon(bortBrush, p_krilo1);
- g.FillPolygon(bortBrush, p_krilo2);
- g.FillPolygon(bortBrush, p_hvost1);
- g.FillPolygon(bortBrush, p_hvost2);
-
-
- g.DrawPolygon(pen, p_krilo1);
- g.DrawPolygon(pen, p_krilo2);
- g.DrawPolygon(pen, p_hvost1);
- g.DrawPolygon(pen, p_hvost2);
- g.DrawPolygon(pen, p_kreplenie2);
- g.DrawPolygon(pen, p_kreplenie1);
-
-
-
-
- }
-}
\ No newline at end of file
diff --git a/ProjectStormtrooper/Drawnings/DirectionType.cs b/ProjectStormtrooper/Drawnings/DirectionType.cs
new file mode 100644
index 0000000..935c295
--- /dev/null
+++ b/ProjectStormtrooper/Drawnings/DirectionType.cs
@@ -0,0 +1,27 @@
+namespace ProjectStormtrooper.Drawnings;
+
+///
+/// Направление перемещения
+///
+public enum DirectionType
+{
+ ///
+ /// Вверх
+ ///
+ Up = 1,
+
+ ///
+ /// Вниз
+ ///
+ Down = 2,
+
+ ///
+ /// Влево
+ ///
+ Left = 3,
+
+ ///
+ /// Вправо
+ ///
+ Right = 4
+}
\ No newline at end of file
diff --git a/ProjectStormtrooper/Drawnings/DrawningAirplane.cs b/ProjectStormtrooper/Drawnings/DrawningAirplane.cs
new file mode 100644
index 0000000..5f472d9
--- /dev/null
+++ b/ProjectStormtrooper/Drawnings/DrawningAirplane.cs
@@ -0,0 +1,250 @@
+using ProjectStormtrooper.Entites;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ProjectStormtrooper.Drawnings;
+
+public class DrawningAirplane
+{
+ ///
+ /// Класс-сущность
+ ///
+ public EntityAirplane? EntityAirplane { get; protected set; }
+
+ ///
+ /// Ширина окна
+ ///
+ private int? _pictureWidth;
+
+ ///
+ /// Высота окна
+ ///
+ private int? _pictureHeight;
+
+ ///
+ /// Левая координата прорисовки самолета
+ ///
+ protected int? _startPosX;
+
+ ///
+ /// Верхняя кооридната прорисовки самолета
+ ///
+ protected int? _startPosY;
+
+ ///
+ /// Ширина прорисовки самолета
+ ///
+ private readonly int _drawningAirplaneWidth = 153;
+
+ ///
+ /// Высота прорисовки самолета
+ ///
+ private readonly int _drawningAirplaneHeight = 110;
+
+ ///
+ /// Координата X объекта
+ ///
+ public int? GetPosX => _startPosX;
+
+ ///
+ /// Координата Y объекта
+ ///
+ public int? GetPosY => _startPosY;
+
+ ///
+ /// Ширина объекта
+ ///
+ public int GetWidth => _drawningAirplaneWidth;
+
+ ///
+ /// Высота объекта
+ ///
+ public int GetHeight => _drawningAirplaneHeight;
+
+ ///
+ /// пустой конструктор
+ ///
+ private DrawningAirplane()
+ {
+ _pictureWidth = null;
+ _pictureHeight = null;
+ _startPosX = null;
+ _startPosY = null;
+ }
+
+ ///
+ /// конструктор
+ ///
+ /// Скорость
+ /// Вес
+ /// Основной цвет
+
+ public DrawningAirplane(int speed, double weight, Color bodyColor) : this()
+ {
+ EntityAirplane = new EntityAirplane(speed, weight, bodyColor);
+ }
+
+ ///
+ /// конструктор для наследников
+ ///
+ /// Ширина прорисовки самолета
+ /// Высота прорисовки самолета
+ protected DrawningAirplane(int drawningAirplaneWidth, int drawningAirplaneHeight) : this()
+ {
+ _drawningAirplaneWidth = drawningAirplaneWidth;
+ _pictureHeight = drawningAirplaneHeight;
+ }
+
+ ///
+ /// Установка границ поля
+ ///
+ /// Ширина поля
+ /// Высота поля
+ /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах
+ public bool SetPictureSize(int width, int height)
+ {
+ // TODO проверка, что объект "влезает" в размеры поля
+ // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена
+ _pictureWidth = width;
+ _pictureHeight = height;
+ return true;
+ }
+
+ ///
+ /// Установка позиции
+ ///
+ /// Координата X
+ /// Координата Y
+ public void SetPosition(int x, int y)
+ {
+ if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
+ {
+ return;
+ }
+
+ // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы
+ // то надо изменить координаты, чтобы он оставался в этих границах
+ _startPosX = x;
+ _startPosY = y;
+
+ }
+
+
+ ///
+ /// Изменение направления перемещения
+ ///
+ /// Направление
+ /// true - перемещене выполнено, false - перемещение невозможно
+ public bool MoveTransport(DirectionType direction)
+ {
+ if (EntityAirplane == null || !_startPosX.HasValue || !_startPosY.HasValue)
+ {
+ return false;
+ }
+
+ switch (direction)
+ {
+ //влево
+ case DirectionType.Left:
+ if (_startPosX.Value - EntityAirplane.Step > 0)
+ _startPosX -= (int)EntityAirplane.Step;
+ return true;
+ //вверх
+ case DirectionType.Up:
+ if (_startPosY.Value - EntityAirplane.Step > 0)
+ _startPosY -= (int)EntityAirplane.Step;
+ return true;
+ // вправо
+ case DirectionType.Right:
+ if (_startPosX.Value + _drawningAirplaneWidth + EntityAirplane.Step < _pictureWidth)
+ _startPosX += (int)EntityAirplane.Step;
+ return true;
+ //вниз
+ case DirectionType.Down:
+ if (_startPosY.Value + _drawningAirplaneHeight + EntityAirplane.Step < _pictureHeight)
+ _startPosY += (int)EntityAirplane.Step;
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ ///
+ /// Прорисовка объекта
+ ///
+ ///
+ public virtual void DrawTransport(Graphics g)
+ {
+ if (EntityAirplane == null || !_startPosX.HasValue || !_startPosY.HasValue)
+ {
+ return;
+ }
+
+ Pen pen = new(Color.Black);
+
+ ///отрисовка носа
+ Point p = new Point(_startPosX.Value, _startPosY.Value + 50);
+ Point p2 = new Point(_startPosX.Value + 20, _startPosY.Value + 40);
+ Point p3 = new Point(_startPosX.Value + 20, _startPosY.Value + 60);
+ Point p4 = new Point(_startPosX.Value, _startPosY.Value + 50);
+
+ Brush bortBrush = new SolidBrush(EntityAirplane.BodyColor);
+
+ ///отрисовка борта
+ g.FillRectangle(bortBrush, _startPosX.Value + 20, _startPosY.Value + 40, 120, 20);
+ g.DrawRectangle(pen, _startPosX.Value + 20, _startPosY.Value + 40, 120, 20);
+
+ ///отрисовка вепхнего крыла
+ Point p5 = new Point(_startPosX.Value + 40, _startPosY.Value);
+ Point p6 = new Point(_startPosX.Value + 55, _startPosY.Value);
+ Point p7 = new Point(_startPosX.Value + 70, _startPosY.Value + 40);
+ Point p8 = new Point(_startPosX.Value + 40, _startPosY.Value + 40);
+ Point p9 = new Point(_startPosX.Value + 40, _startPosY.Value);
+
+ ///отрисовка нижнего крыла
+ Point p10 = new Point(_startPosX.Value + 40, _startPosY.Value + 60);
+ Point p11 = new Point(_startPosX.Value + 70, _startPosY.Value + 60);
+ Point p12 = new Point(_startPosX.Value + 55, _startPosY.Value + 110);
+ Point p13 = new Point(_startPosX.Value + 40, _startPosY.Value + 110);
+ Point p14 = new Point(_startPosX.Value + 40, _startPosY.Value + 60);
+
+ ///отрисовка верхнего хвоста
+ Point p15 = new Point(_startPosX.Value + 115, _startPosY.Value + 40);
+ Point p16 = new Point(_startPosX.Value + 115, _startPosY.Value + 27);
+ Point p17 = new Point(_startPosX.Value + 140, _startPosY.Value + 10);
+ Point p18 = new Point(_startPosX.Value + 140, _startPosY.Value + 40);
+ Point p19 = new Point(_startPosX.Value + 115, _startPosY.Value + 40);
+
+ ///отрисовка нижнего хвоста
+ Point p20 = new Point(_startPosX.Value + 115, _startPosY.Value + 60);
+ Point p21 = new Point(_startPosX.Value + 115, _startPosY.Value + 73);
+ Point p22 = new Point(_startPosX.Value + 140, _startPosY.Value + 90);
+ Point p23 = new Point(_startPosX.Value + 140, _startPosY.Value + 60);
+ Point p24 = new Point(_startPosX.Value + 115, _startPosY.Value + 60);
+
+
+
+ Point[] p_nos = { p, p2, p3, p4, };
+ Point[] p_krilo1 = { p5, p6, p7, p8, p9 };
+ Point[] p_krilo2 = { p10, p11, p12, p13, p14 };
+ Point[] p_hvost1 = { p15, p16, p17, p18, p19 };
+ Point[] p_hvost2 = { p20, p21, p22, p23, p24 };
+
+
+ g.FillPolygon(bortBrush, p_nos);
+ g.FillPolygon(bortBrush, p_krilo1);
+ g.FillPolygon(bortBrush, p_krilo2);
+ g.FillPolygon(bortBrush, p_hvost1);
+ g.FillPolygon(bortBrush, p_hvost2);
+
+ g.DrawPolygon(pen, p_nos);
+ g.DrawPolygon(pen, p_krilo1);
+ g.DrawPolygon(pen, p_krilo2);
+ g.DrawPolygon(pen, p_hvost1);
+ g.DrawPolygon(pen, p_hvost2);
+
+ }
+}
diff --git a/ProjectStormtrooper/Drawnings/DrawningStormtrooper.cs b/ProjectStormtrooper/Drawnings/DrawningStormtrooper.cs
new file mode 100644
index 0000000..24632c2
--- /dev/null
+++ b/ProjectStormtrooper/Drawnings/DrawningStormtrooper.cs
@@ -0,0 +1,93 @@
+using ProjectStormtrooper.Entites;
+
+namespace ProjectStormtrooper.Drawnings;
+
+///
+/// Класс, отвечающий за прорисовку и перемещение объекта-сущности
+///
+public class DrawningStormtrooper : DrawningAirplane
+{
+ ///
+ /// конструктор
+ ///
+ /// Скорость
+ /// Вес
+ /// Основной цвет
+ /// Дополнительный цвет
+ /// Признак наличия обвеса
+ /// Признак наличия антикрыла
+ public DrawningStormtrooper(int speed, double weight, Color bodyColor, Color additionalColor, bool dvigatel, bool vint) : base(153, 110)
+ {
+ EntityAirplane = new EntityStormtrooper(speed, weight, bodyColor, additionalColor, dvigatel, vint);
+ }
+
+ public DrawningStormtrooper(int speed, double weight, Color bodyColor, Color additionalColor, bool dvigatel, bool vint, bool v) : this(speed, weight, bodyColor, additionalColor, dvigatel, vint)
+ {
+ }
+
+ public override void DrawTransport(Graphics g)
+ {
+ if (EntityAirplane == null || EntityAirplane is not EntityStormtrooper stormtrooper || !_startPosX.HasValue || !_startPosY.HasValue)
+ {
+ return;
+ }
+
+ Pen pen = new(Color.Black);
+ Brush additionalBrush = new SolidBrush(stormtrooper.AdditionalColor);
+
+ if (stormtrooper.Vint)
+ {
+ ///отрисовка винта
+ Point p25 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
+ Point p26 = new Point(_startPosX.Value + 5, _startPosY.Value + 35);
+ Point p27 = new Point(_startPosX.Value + 15, _startPosY.Value + 35);
+ Point p28 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
+
+
+
+ Point p29 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
+ Point p30 = new Point(_startPosX.Value + 5, _startPosY.Value + 85);
+ Point p31 = new Point(_startPosX.Value + 15, _startPosY.Value + 85);
+ Point p32 = new Point(_startPosX.Value + 10, _startPosY.Value + 60);
+ Point[] p_vint = { p25, p26, p27, p28, p29, p30, p31, p32 };
+ g.DrawPolygon(pen, p_vint);
+
+ ///отрисовка крепления нижнего двигателя
+ Point p33 = new Point(_startPosX.Value + 90, _startPosY.Value + 66);
+ Point p34 = new Point(_startPosX.Value + 95, _startPosY.Value + 70);
+ Point p35 = new Point(_startPosX.Value + 110, _startPosY.Value + 70);
+ Point p36 = new Point(_startPosX.Value + 115, _startPosY.Value + 65);
+
+ ///отрисовка крепления верхнего двигателя
+ Point p37 = new Point(_startPosX.Value + 90, _startPosY.Value + 45);
+ Point p38 = new Point(_startPosX.Value + 95, _startPosY.Value + 40);
+ Point p39 = new Point(_startPosX.Value + 110, _startPosY.Value + 40);
+ Point p40 = new Point(_startPosX.Value + 115, _startPosY.Value + 45);
+
+ ///отрисовка верхней ракеты
+ g.DrawEllipse(pen, _startPosX.Value + 88, _startPosY.Value + 30, 34, 10);
+
+ ///отрисовка нижней ракеты
+ g.DrawEllipse(pen, _startPosX.Value + 88, _startPosY.Value + 70, 34, 10);
+
+ Point[] p_kreplenie2 = { p33, p34, p35, p36 };
+ Point[] p_kreplenie1 = { p37, p38, p39, p40 };
+
+ g.DrawPolygon(pen, p_kreplenie2);
+ g.DrawPolygon(pen, p_kreplenie1);
+ }
+
+ _startPosX += 10;
+ _startPosY += 5;
+ base.DrawTransport(g);
+ _startPosX -= 10;
+ _startPosY -= 5;
+
+ // отрисовка двигателей
+ if (stormtrooper.Dvigatel)
+ {
+ g.FillEllipse(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 25, 15, 15);
+ g.FillEllipse(additionalBrush, _startPosX.Value + 75, _startPosY.Value + 75, 15, 15);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectStormtrooper/Entites/EntityAirplane.cs b/ProjectStormtrooper/Entites/EntityAirplane.cs
new file mode 100644
index 0000000..60010dc
--- /dev/null
+++ b/ProjectStormtrooper/Entites/EntityAirplane.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ProjectStormtrooper.Entites;
+
+///
+/// Класс-сущность "Самолет"
+///
+
+public class EntityAirplane
+{
+ ///
+ /// Скорость
+ ///
+ public int Speed { get; private set; }
+
+ ///
+ /// Вес
+ ///
+ public double Weight { get; private set; }
+
+ ///
+ /// Основной цвет
+ ///
+ public Color BodyColor { get; private set; }
+
+ ///
+ /// Шаг перемещения самолета
+ ///
+ public double Step => Speed * 100 / Weight;
+
+ ///
+ /// консруктор сущности
+ ///
+ /// Скорость
+ /// Вес самолета
+ /// Основной цвет
+ public EntityAirplane(int speed, double weight, Color bodyColor)
+ {
+ Speed = speed;
+ Weight = weight;
+ BodyColor = bodyColor;
+ }
+}
diff --git a/ProjectStormtrooper/Entites/EntityStormtrooper.cs b/ProjectStormtrooper/Entites/EntityStormtrooper.cs
new file mode 100644
index 0000000..5c18c5c
--- /dev/null
+++ b/ProjectStormtrooper/Entites/EntityStormtrooper.cs
@@ -0,0 +1,59 @@
+namespace ProjectStormtrooper.Entites;
+
+///
+/// Класс-сущность "Спортивный автомобиль"
+///
+public class EntityStormtrooper : EntityAirplane
+{
+ ///
+ /// Скорость
+ ///
+ public int Speed { get; private set; }
+
+ ///
+ /// Вес
+ ///
+ public double Weight { get; private set; }
+
+ ///
+ /// Основной цвет
+ ///
+ public Color BodyColor { get; private set; }
+
+ ///
+ /// Дополнительный цвет (для опциональных элементов)
+ ///
+ public Color AdditionalColor { get; private set; }
+
+ ///
+ /// Признак (опция) наличия обвеса
+ ///
+ public bool Dvigatel { get; private set; }
+
+ ///
+ /// Признак (опция) наличия антикрыла
+ ///
+ public bool Vint { get; private set; }
+
+
+ ///
+ /// Шаг перемещения самолета
+ ///
+ public double Step => Speed * 100 / Weight;
+
+ ///
+ /// Инициализация полей объекта-класса штурмовика
+ ///
+ /// Скорость
+ /// Вес автомобиля
+ /// Основной цвет
+ /// Дополнительный цвет
+ /// Признак наличия обвеса
+ /// Признак наличия антикрыла
+ public EntityStormtrooper(int speed, double weight, Color bodyColor, Color additionalColor, bool dvigatel, bool vint) : base(speed, weight, bodyColor)
+ {
+ AdditionalColor = additionalColor;
+ Dvigatel = dvigatel;
+ Vint = vint;
+ }
+}
\ No newline at end of file
diff --git a/ProjectStormtrooper/EntityStormtrooper.cs b/ProjectStormtrooper/EntityStormtrooper.cs
deleted file mode 100644
index 07a3527..0000000
--- a/ProjectStormtrooper/EntityStormtrooper.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-namespace ProjectStormtrooper;
-
-///
-/// Класс-сущность "Спортивный автомобиль"
-///
-public class EntityStormtrooper
-{
- ///
- /// Скорость
- ///
- public int Speed { get; private set; }
-
- ///
- /// Вес
- ///
- public double Weight { get; private set; }
-
- ///
- /// Основной цвет
- ///
- public Color BodyColor { get; private set; }
-
- ///
- /// Дополнительный цвет (для опциональных элементов)
- ///
- public Color AdditionalColor { get; private set; }
-
- ///
- /// Признак (опция) наличия обвеса
- ///
- public bool Dvigatel { get; private set; }
-
- ///
- /// Признак (опция) наличия антикрыла
- ///
- public bool Vint { get; private set; }
-
-
- ///
- /// Шаг перемещения автомобиля
- ///
- public double Step => Speed * 100 / Weight;
-
- ///
- /// Инициализация полей объекта-класса спортивного автомобиля
- ///
- /// Скорость
- /// Вес автомобиля
- /// Основной цвет
- /// Дополнительный цвет
- /// Признак наличия обвеса
- /// Признак наличия антикрыла
- public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool dvigatel, bool vint)
- {
- Speed = speed;
- Weight = weight;
- BodyColor = bodyColor;
- AdditionalColor = additionalColor;
- Dvigatel = dvigatel;
- Vint = vint;
- }
-}
\ No newline at end of file
diff --git a/ProjectStormtrooper/FormStormtrooper.Designer.cs b/ProjectStormtrooper/FormStormtrooper.Designer.cs
index e23429b..304290b 100644
--- a/ProjectStormtrooper/FormStormtrooper.Designer.cs
+++ b/ProjectStormtrooper/FormStormtrooper.Designer.cs
@@ -34,6 +34,7 @@ partial class FormStormtrooper
buttonUp = new Button();
buttonLeft = new Button();
buttonDown = new Button();
+ buttonCreateAirplane = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxStormtrooper).BeginInit();
SuspendLayout();
//
@@ -52,11 +53,11 @@ partial class FormStormtrooper
buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCreate.Location = new Point(12, 477);
buttonCreate.Name = "buttonCreate";
- buttonCreate.Size = new Size(94, 29);
+ buttonCreate.Size = new Size(325, 29);
buttonCreate.TabIndex = 1;
- buttonCreate.Text = "создать";
+ buttonCreate.Text = "создать штурмовик";
buttonCreate.UseVisualStyleBackColor = true;
- buttonCreate.Click += ButtonCreateStormtrooper_Click;
+ buttonCreate.Click += buttonCreateStormtrooper_Click;
//
// buttonRight
//
@@ -102,9 +103,21 @@ partial class FormStormtrooper
buttonDown.UseVisualStyleBackColor = true;
buttonDown.Click += ButtonMove_Click;
//
+ // buttonCreateAirplane
+ //
+ buttonCreateAirplane.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
+ buttonCreateAirplane.Location = new Point(343, 477);
+ buttonCreateAirplane.Name = "buttonCreateAirplane";
+ buttonCreateAirplane.Size = new Size(325, 29);
+ buttonCreateAirplane.TabIndex = 6;
+ buttonCreateAirplane.Text = "создать самолет";
+ buttonCreateAirplane.UseVisualStyleBackColor = true;
+ buttonCreateAirplane.Click += ButtonCreateAirplane_Click;
+ //
// FormStormtrooper
//
ClientSize = new Size(1268, 518);
+ Controls.Add(buttonCreateAirplane);
Controls.Add(buttonDown);
Controls.Add(buttonLeft);
Controls.Add(buttonUp);
@@ -125,5 +138,6 @@ partial class FormStormtrooper
private Button buttonUp;
private Button buttonLeft;
private Button buttonDown;
+ private Button buttonCreateAirplane;
}
diff --git a/ProjectStormtrooper/FormStormtrooper.cs b/ProjectStormtrooper/FormStormtrooper.cs
index c48a4d7..9d50e9a 100644
--- a/ProjectStormtrooper/FormStormtrooper.cs
+++ b/ProjectStormtrooper/FormStormtrooper.cs
@@ -4,16 +4,19 @@ using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
+using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using ProjectStormtrooper.Drawnings;
namespace ProjectStormtrooper;
public partial class FormStormtrooper : Form
{
- private DrawningStormtrooper? _drawningStormtrooper;
+ private DrawningAirplane? _drawningAirplane;
+
public FormStormtrooper()
{
InitializeComponent();
@@ -24,46 +27,73 @@ public partial class FormStormtrooper : Form
///
private void Draw()
{
- if (_drawningStormtrooper == null)
+ if (_drawningAirplane == null)
{
return;
}
- Bitmap bmp = new(pictureBoxStormtrooper.Width,
- pictureBoxStormtrooper.Height);
+ Bitmap bmp = new(pictureBoxStormtrooper.Width, pictureBoxStormtrooper.Height);
Graphics gr = Graphics.FromImage(bmp);
- _drawningStormtrooper.DrawTransport(gr);
+ _drawningAirplane.DrawTransport(gr);
pictureBoxStormtrooper.Image = bmp;
}
///
- /// Обработка нажатия кнопки "Создать"
+ /// Создание объекта класса-перемещения
+ ///
+ /// Тип создаваемого объекта
+ private void CreateObject(string type)
+ {
+ Random random = new();
+ switch (type)
+ {
+ case nameof(DrawningAirplane):
+ _drawningAirplane = new DrawningAirplane(random.Next(100, 300), random.Next(1000, 3000),
+ Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
+ break;
+ case nameof(DrawningStormtrooper):
+ _drawningAirplane = new DrawningStormtrooper(random.Next(100, 300), random.Next(1000, 3000),
+ Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
+ Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
+ Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
+ break;
+ default:
+ return;
+ }
+
+ _drawningAirplane.SetPictureSize(pictureBoxStormtrooper.Width, pictureBoxStormtrooper.Height);
+ _drawningAirplane.SetPosition(random.Next(10, 100), random.Next(10, 100));
+ Draw();
+ }
+
+ ///
+ /// Обработка нажатия кнопки "Создать штурмовик"
+ ///
+ ///
+ ///
+
+
+ private void buttonCreateStormtrooper_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningStormtrooper));
+
+ ///
+ /// Обработка нажатия кнопки "Создать самолет"
///
///
///
- private void ButtonCreateStormtrooper_Click(object sender, EventArgs e)
- {
- Random random = new();
- _drawningStormtrooper = new DrawningStormtrooper();
- _drawningStormtrooper.Init(random.Next(650, 700), random.Next(15760,
- 16130),
- Color.FromArgb(random.Next(0, 256), random.Next(0, 256),
- random.Next(0, 256)),
- Color.FromArgb(random.Next(0, 256), random.Next(0, 256),
- random.Next(0, 256)),
- Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
- _drawningStormtrooper.SetPictureSize(pictureBoxStormtrooper.Width,
- pictureBoxStormtrooper.Height);
- _drawningStormtrooper.SetPosition(random.Next(10, 100), random.Next(10,
- 100));
- Draw();
- }
///
/// Перемещение объекта по форме (нажатие кнопок навигации)
///
///
///
+
+ private void ButtonCreateAirplane_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAirplane));
+
+ ///
+ /// Перемещение объекта по форме (нажатие кнопок навигации)
+ ///
+ ///
+ ///
private void ButtonMove_Click(object sender, EventArgs e)
{
- if (_drawningStormtrooper == null)
+ if (_drawningAirplane == null)
{
return;
}
@@ -73,19 +103,19 @@ public partial class FormStormtrooper : Form
{
case "buttonUp":
result =
- _drawningStormtrooper.MoveTransport(DirectionType.Up);
+ _drawningAirplane.MoveTransport(DirectionType.Up);
break;
case "buttonDown":
result =
- _drawningStormtrooper.MoveTransport(DirectionType.Down);
+ _drawningAirplane.MoveTransport(DirectionType.Down);
break;
case "buttonLeft":
result =
- _drawningStormtrooper.MoveTransport(DirectionType.Left);
+ _drawningAirplane.MoveTransport(DirectionType.Left);
break;
case "buttonRight":
result =
- _drawningStormtrooper.MoveTransport(DirectionType.Right);
+ _drawningAirplane.MoveTransport(DirectionType.Right);
break;
}
if (result)
@@ -94,4 +124,10 @@ public partial class FormStormtrooper : Form
}
}
+ ///
+ /// Обработка нажатия кнопки "Шаг"
+ ///
+ ///
+ ///
+
}