diff --git a/HoistingCrane/HoistingCrane/DirectionType.cs b/HoistingCrane/HoistingCrane/DirectionType.cs
new file mode 100644
index 0000000..b1cd6d6
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/DirectionType.cs
@@ -0,0 +1,18 @@
+
+
+namespace HoistingCrane
+{
+ public enum DirectionType
+ {
+
+ /// Вверх
+ Up = 1,
+ /// Вниз
+ Down = 2,
+ /// Влево
+ Left = 3,
+ /// Вправо
+ Right = 4
+
+ }
+}
diff --git a/HoistingCrane/HoistingCrane/DrawingHoistingCrane.cs b/HoistingCrane/HoistingCrane/DrawingHoistingCrane.cs
new file mode 100644
index 0000000..1f7b8df
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/DrawingHoistingCrane.cs
@@ -0,0 +1,121 @@
+
+
+namespace HoistingCrane
+{
+ public class DrawingHoistingCrane
+ {
+ /// Класс-сущность
+ public EntityHoistingCrane? EntityHoistingCrane { get; private set; }
+ /// Ширина окна
+ private int? _pictureWidth;
+ /// Высота окна
+ private int? _pictureHeight;
+ /// Левая координата прорисовки автомобиля
+ private int? _startPosX;
+ /// Верхняя кооридната прорисовки автомобиля
+ private int? _startPosY;
+ /// Ширина прорисовки автомобиля
+ private readonly int _drawningCarWidth = 110;
+ /// Высота прорисовки автомобиля
+ private readonly int _drawningCarHeight = 60;
+
+
+ /// Инициализация свойств
+ /// Скорость
+ /// Вес автомобиля
+ /// Основной цвет
+ /// Дополнительный цвет
+ /// Признак наличия крана
+ /// Признак наличия противовеса
+ public void Init(int speed, double weight, Color bodyColor, Color
+ additionalColor, bool crane, bool counterweight)
+ {
+ EntityHoistingCrane = new EntityHoistingCrane();
+ EntityHoistingCrane.Init(speed, weight, bodyColor, additionalColor, crane, counterweight);
+ _pictureWidth = null;
+ _pictureHeight = null;
+ _startPosX = null;
+ _startPosY = null;
+ }
+
+ /// Установка границ поля
+ /// Ширина поля
+ /// Высота поля
+ /// 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 (EntityHoistingCrane == null || !_startPosX.HasValue ||
+ !_startPosY.HasValue)
+ {
+ return false;
+ }
+ switch (direction)
+ {
+ //влево
+ case DirectionType.Left:
+ if (_startPosX.Value - EntityHoistingCrane.Step > 0)
+ {
+ _startPosX -= (int)EntityHoistingCrane.Step;
+ }
+ return true;
+ //вверх
+ case DirectionType.Up:
+ if (_startPosY.Value - EntityHoistingCrane.Step > 0)
+ {
+ _startPosY -= (int)EntityHoistingCrane.Step;
+ }
+ return true;
+ // вправо
+ case DirectionType.Right:
+ //TODO прописать логику сдвига в право
+ return true;
+ //вниз
+ case DirectionType.Down:
+ //TODO прописать логику сдвига в вниз
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ ///
+ /// Прорисовка объекта
+ ///
+ ///
+
+ public void DrawTransport(Graphics g)
+ {
+ if (EntityHoistingCrane == null || !_startPosX.HasValue || !_startPosY.HasValue)
+ {
+ return;
+ }
+ }
+
+
+ }
+}
diff --git a/HoistingCrane/HoistingCrane/EntityHoistingCrane.cs b/HoistingCrane/HoistingCrane/EntityHoistingCrane.cs
new file mode 100644
index 0000000..d659046
--- /dev/null
+++ b/HoistingCrane/HoistingCrane/EntityHoistingCrane.cs
@@ -0,0 +1,51 @@
+
+
+namespace HoistingCrane
+{
+ public class EntityHoistingCrane
+ {
+
+
+ /// Скорость
+ 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 Crane { get; private set; }
+
+ /// Признак (опция) наличия противовеса
+ public bool Counterweight { get; private set; }
+
+ /// Шаг перемещения автомобиля
+ public double Step => Speed * 100 / Weight;
+
+ /// Инициализация полей объекта-класса спортивного автомобиля
+ /// Скорость
+ /// Вес автомобиля
+ /// Основной цвет
+ /// Дополнительный цвет
+ /// Признак наличия крана
+ /// Признак наличия противовеса
+ public void Init(int speed, double weight, Color bodyColor, Color
+ additionalColor, bool crane, bool counterweight)
+ {
+ Speed = speed;
+ Weight = weight;
+ BodyColor = bodyColor;
+ AdditionalColor = additionalColor;
+ Crane = crane;
+ Counterweight = counterweight;
+ }
+
+
+
+ }
+}