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; + + } + } +}