From 070ddd23aa9d96719015aa372b495021523c7b82 Mon Sep 17 00:00:00 2001 From: user Date: Fri, 16 Feb 2024 13:15:04 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HoistingCrane/HoistingCrane/DirectionType.cs | 18 +++ .../HoistingCrane/DrawingHoistingCrane.cs | 121 ++++++++++++++++++ .../HoistingCrane/EntityHoistingCrane.cs | 51 ++++++++ 3 files changed, 190 insertions(+) create mode 100644 HoistingCrane/HoistingCrane/DirectionType.cs create mode 100644 HoistingCrane/HoistingCrane/DrawingHoistingCrane.cs create mode 100644 HoistingCrane/HoistingCrane/EntityHoistingCrane.cs 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; + } + + + + } +}