From c8589815a017a7369f60a3035e830a2e9de6d2f5 Mon Sep 17 00:00:00 2001 From: Basha Date: Mon, 15 Jan 2024 01:32:19 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=A2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BA,=20=D0=BF=D0=B5=D1=80=D0=B5=D1=87=D0=B8=D1=81?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B9,=20=D1=81=D1=83=D1=89?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=9E=D1=82=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20(=D0=B4=D0=BE=20SetPosition())?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WinFormsLabRad1/DirectionType.cs | 31 ++++++ .../WinFormsLabRad1/DrawningTankZU.cs | 99 +++++++++++++++++++ .../WinFormsLabRad1/EntityTankZU.cs | 69 +++++++++++++ 3 files changed, 199 insertions(+) create mode 100644 WinFormsLabRad1/WinFormsLabRad1/DirectionType.cs create mode 100644 WinFormsLabRad1/WinFormsLabRad1/DrawningTankZU.cs create mode 100644 WinFormsLabRad1/WinFormsLabRad1/EntityTankZU.cs diff --git a/WinFormsLabRad1/WinFormsLabRad1/DirectionType.cs b/WinFormsLabRad1/WinFormsLabRad1/DirectionType.cs new file mode 100644 index 0000000..e605801 --- /dev/null +++ b/WinFormsLabRad1/WinFormsLabRad1/DirectionType.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WinFormsLabRad1 +{ + /// + /// Направление перемещения + /// + /// Вверх + /// + Up = 1, + /// + /// Вниз + /// + Down = 2, + /// + /// Влево + /// + Left = 3, + /// + /// Вправо + /// + Right = 4 + } +} diff --git a/WinFormsLabRad1/WinFormsLabRad1/DrawningTankZU.cs b/WinFormsLabRad1/WinFormsLabRad1/DrawningTankZU.cs new file mode 100644 index 0000000..abc82fb --- /dev/null +++ b/WinFormsLabRad1/WinFormsLabRad1/DrawningTankZU.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WinFormsLabRad1 +{ + /// + /// Класс, отвечающий за прорисовку и перемещение объекта-сущности + /// + public class DrawningTankZU + { + /// + /// Класс-сущность + /// + public EntityTankZU? EntityTankZU { get; private set; } + /// + /// Ширина окна + /// + private int? _pictureWidth; + /// + /// Высота окна + /// + private int? _pictureHeight; + /// + /// Левая координата прорисовки автомобиля + /// + private int? _startPosX; + /// + /// Верхняя кооридната прорисовки автомобиля + /// + private int? _startPosY; + /// + /// Ширина прорисовки автомобиля + /// + private readonly int _drawningTankWidth = 110; + /// + /// Высота прорисовки автомобиля + /// + private readonly int _drawningTankHeight = 60; + + /// + /// Инициализация свойств + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public void Init(int speed, double weight, Color bodyColor, + Color additionalColor, bool bashnya, bool zenorudie, + bool radar) + { + EntityTankZU = new EntityTankZU(); + EntityTankZU.Init(speed, weight, bodyColor, additionalColor, bashnya, zenorudie, radar); + _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; + } + } +} diff --git a/WinFormsLabRad1/WinFormsLabRad1/EntityTankZU.cs b/WinFormsLabRad1/WinFormsLabRad1/EntityTankZU.cs new file mode 100644 index 0000000..3058c8c --- /dev/null +++ b/WinFormsLabRad1/WinFormsLabRad1/EntityTankZU.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WinFormsLabRad1 +/// +/// Класс-сущность "ЗУ с башней, с З.О. и Радаром" +/// +{ + public class EntityTankZU + { + /// + /// Скорость + /// + 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 Bashnya { get; private set; } + /// + /// Признак (опция) наличия З.О. + /// + public bool Zenorudie { get; private set; } + /// + /// Признак (опция) наличия радара + /// + public bool Radar { get; private set; } + /// + /// Шаг перемещения машины + /// + public double Step => Speed * 100 / Weight; + + /// + /// Инициализация полей объекта-класса спортивного автомобиля + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public void Init(int speed,double weight, Color bodyColor, + Color additionalColor, bool bashnya, bool zenorudie, + bool radar) + { Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + Bashnya = bashnya; + Zenorudie = zenorudie; + Radar = radar; + } + } +}