diff --git a/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/DirectionType.cs b/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/DirectionType.cs
new file mode 100644
index 0000000..1aa2210
--- /dev/null
+++ b/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/DirectionType.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PIbd_23_Ivanov_V.N._DoubleDeckerBus._Base
+{
+ ///
+ /// Направление перемещения
+ ///
+ public enum DirectionType
+ {
+ ///
+ /// Вверх
+ ///
+ Up = 1,
+ ///
+ /// Вниз
+ ///
+ Down = 2,
+ ///
+ /// Влево
+ ///
+ Left = 3,
+ ///
+ /// Вправо
+ ///
+ Right = 4
+ }
+}
diff --git a/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/DrawningDoubleDeckerBus.cs b/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/DrawningDoubleDeckerBus.cs
new file mode 100644
index 0000000..73d74aa
--- /dev/null
+++ b/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/DrawningDoubleDeckerBus.cs
@@ -0,0 +1,168 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PIbd_23_Ivanov_V.N._DoubleDeckerBus._Base
+{
+ internal class DrawningDoubleDeckerBus
+ {
+ ///
+ /// Класс-сущность
+ ///
+ public EntityDoubleDeckerBus? EntityDoubleDeckerBus { get; private set; }
+
+ ///
+ /// Ширина окна
+ ///
+ private int _pictureWidth;
+
+ ///
+ /// Высота окна
+ ///
+ private int _pictureHeight;
+
+ ///
+ /// Левая координата прорисовки автобуса
+ ///
+ ///
+ private int _startPosX;
+
+ ///
+ /// Верхняя кооридната прорисовки автобуса
+ ///
+ private int _startPosY;
+
+ ///
+ /// Ширина прорисовки автобуса
+ ///
+ private readonly int _busWidth = 100;
+
+ ///
+ /// Высота прорисовки автобуса
+ ///
+ private readonly int _busHeight = 50;
+
+ ///
+ /// Инициализация свойств
+ ///
+ /// Скорость
+ /// Вес
+ /// Цвет кузова
+ /// Дополнительный цвет
+ /// Признак наличия второго этажа
+ /// Признак наличия лестницы на второй этаж
+ /// Признак наличия дорожной полосы
+ /// Ширина картинки
+ /// Высота картинки
+ /// true - объект создан, false - проверка не пройдена,
+ /// нельзя создать объект в этих размерах
+ public bool Init(int speed, double weight, Color bodyColor, Color
+additionalColor, bool secondFloor, bool ladder, bool roadLine, int width, int height)
+ {
+ _pictureWidth = width;
+ _pictureHeight = height;
+ if (_pictureHeight < _busHeight || _pictureWidth < _busWidth)
+ {
+ return false;
+ }
+ EntityDoubleDeckerBus = new EntityDoubleDeckerBus();
+ EntityDoubleDeckerBus.Init(speed, weight, bodyColor, additionalColor,
+ secondFloor, ladder, roadLine);
+ return true;
+ }
+
+ ///
+ /// Установка позиции
+ ///
+ /// Координата X
+ /// Координата Y
+ public void SetPosition(int x, int y)
+ {
+ _startPosX = Math.Min(x, _pictureWidth - _busWidth);
+ _startPosY = Math.Min(y, _pictureHeight - _busHeight);
+ }
+
+ ///
+ /// Изменение направления перемещения
+ ///
+ /// Направление
+ public void MoveTransport(DirectionType direction)
+ {
+ if (EntityDoubleDeckerBus == null)
+ {
+ return;
+ }
+ switch (direction)
+ {
+ //влево
+ case DirectionType.Left:
+ if (_startPosX - EntityDoubleDeckerBus.Step > 0)
+ {
+ _startPosX -= (int)EntityDoubleDeckerBus.Step;
+ }
+ break;
+ //вверх
+ case DirectionType.Up:
+ if (_startPosY - EntityDoubleDeckerBus.Step > 0)
+ {
+ _startPosY -= (int)EntityDoubleDeckerBus.Step;
+ }
+ break;
+ // вправо
+ case DirectionType.Right:
+ if (_startPosX + _busWidth + EntityDoubleDeckerBus.Step < _pictureWidth)
+ {
+ _startPosX += (int)EntityDoubleDeckerBus.Step;
+ }
+ break;
+ //вниз
+ case DirectionType.Down:
+ if (_startPosY + _busHeight + EntityDoubleDeckerBus.Step < _pictureHeight)
+ {
+ _startPosY += (int)EntityDoubleDeckerBus.Step;
+ }
+ break;
+ }
+ }
+
+ ///
+ /// Прорисовка объекта
+ ///
+ ///
+ public void DrawTransport(Graphics g)
+ {
+ if (EntityDoubleDeckerBus == null)
+ {
+ return;
+ }
+
+ Pen pen = new(Color.Black);
+
+ //границы автобсуса
+ g.DrawRectangle(pen, _startPosX - 1, _startPosY + 11, 100, 30);
+ Brush brBodyColor = new SolidBrush(EntityDoubleDeckerBus.BodyColor);
+ g.FillRectangle(brBodyColor, _startPosX, _startPosY + 10, 100, 30);
+
+ //Дверь
+ g.DrawRectangle(pen, _startPosX + 30, _startPosY + 20, 10, 20);
+ Brush brBlack = new SolidBrush(Color.Black);
+ g.FillRectangle(brBlack, _startPosX + 30, _startPosY + 20, 10, 20);
+
+ //Колеса
+ g.DrawEllipse(pen, _startPosX + 7, _startPosY + 35, 10, 10);
+ g.DrawEllipse(pen, _startPosX + 77, _startPosY + 35, 10, 10);
+ g.FillEllipse(brBlack, _startPosX + 7, _startPosY + 35, 10, 10);
+ g.FillEllipse(brBlack, _startPosX + 77, _startPosY + 35, 10, 10);
+
+ //окна
+ Brush brBlue = new SolidBrush(Color.Blue);
+ g.FillEllipse(brBlue, _startPosX + 10, _startPosY + 15, 10, 15);
+ g.FillEllipse(brBlue, _startPosX + 50, _startPosY + 15, 10, 15);
+ g.FillEllipse(brBlue, _startPosX + 70, _startPosY + 15, 10, 15);
+ g.FillEllipse(brBlue, _startPosX + 90, _startPosY + 15, 10, 15);
+ }
+
+ }
+}
diff --git a/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/EntityDoubleDeckerBus.cs b/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/EntityDoubleDeckerBus.cs
new file mode 100644
index 0000000..c746f7b
--- /dev/null
+++ b/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/PIbd-23_Ivanov_V.N._DoubleDeckerBus._Base/EntityDoubleDeckerBus.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PIbd_23_Ivanov_V.N._DoubleDeckerBus._Base
+{
+ public class EntityDoubleDeckerBus
+ {
+ ///
+ /// Скорость
+ ///
+ 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 SecondFloor { get; private set; }
+ ///
+ /// Признак (опция) наличия лестницы на второй этаж
+ ///
+ public bool Ladder { get; private set; }
+ ///
+ /// Признак (опция) наличия гоночной полосы
+ ///
+ public bool RoadLine { get; private set; }
+
+ ///
+ /// Шаг перемещения автобуса
+ ///
+ public double Step => (double)Speed * 100 / Weight;
+ ///
+ /// Инициализация полей объекта-класса спортивного автомобиля
+ ///
+ /// Скорость
+ /// Вес автобуса
+ /// Основной цвет
+ /// Дополнительный цвет
+ /// Признак наличия второго этажа
+ /// Признак наличия лестницы на второй этаж
+ /// Признак наличия дорожной полосы
+
+ public void Init(int speed, double weight, Color bodyColor, Color
+ additionalColor, bool secondFloor, bool ladder, bool roadLine)
+ {
+ Speed = speed;
+ Weight = weight;
+ BodyColor = bodyColor;
+ AdditionalColor = additionalColor;
+ SecondFloor = secondFloor;
+ Ladder = ladder;
+ RoadLine = roadLine;
+
+ }
+ }
+}