using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RoadTrain { public class DrawningRoadTrain { /// /// Класс-сущность /// public EntityRoadTrain? EntityRoadTrain { get; private set; } /// /// Ширина окна /// private int _pictureWidth; /// /// Высота окна /// private int _pictureHeight; /// /// Левая координата прорисовки автомобиля /// private int _startPosX; /// /// Верхняя кооридната прорисовки автомобиля /// private int _startPosY; /// /// Ширина прорисовки автомобиля /// private readonly int _trainWidth = 70; /// /// Высота прорисовки автомобиля /// private readonly int _trainHeight = 30; /// /// Инициализация свойств /// /// Скорость /// Вес /// Цвет кузова /// Дополнительный цвет /// Признак наличия контейнера для воды /// Признак наличия щетки /// Ширина картинки /// Высота картинки /// true - объект создан, false - проверка не пройдена, нельзя создать объект в этих размерах public bool Init(EntityRoadTrain entityRoadTrain, int width, int height) { if (width < _trainWidth) { return false; } if (height < _trainHeight) { return false; } _pictureWidth = width; _pictureHeight = height; EntityRoadTrain = entityRoadTrain; return true; } /// /// Установка позиции /// /// Координата X /// Координата Y public void SetPosition(int x, int y) { if (x < 0) { x = 0; } if (y < 0) { y = 0; } if (x > 200) { x = 200; } if (y > 200) { y = 200; } _startPosX = x; _startPosY = y; } /// /// Изменение направления перемещения /// /// Направление public void MoveTransport(DirectionType direction) { if (EntityRoadTrain == null) { return; } switch (direction) { //влево case DirectionType.Left: if (_startPosX - EntityRoadTrain.Step > 0) { _startPosX -= (int)EntityRoadTrain.Step; } break; //вверх case DirectionType.Up: if (_startPosY - EntityRoadTrain.Step > 0) { _startPosY -= (int)EntityRoadTrain.Step; } break; // вправо case DirectionType.Right: if (_startPosX + EntityRoadTrain.Step + _trainWidth < _pictureWidth) { _startPosX += (int)EntityRoadTrain.Step; } break; //вниз case DirectionType.Down: if (_startPosY + EntityRoadTrain.Step + _trainHeight < _pictureHeight) { _startPosY += (int)EntityRoadTrain.Step; } break; } } /// /// Прорисовка объекта /// /// public void DrawTransport(Graphics g) { if (EntityRoadTrain == null) { return; } Pen pen = new(Color.Black); Brush additionalBrush = new SolidBrush(EntityRoadTrain.AdditionalColor); //Контейнер с водой if (EntityRoadTrain.WaterContainer) { g.DrawEllipse(pen, _startPosX + 30, _startPosY, 10, 20); g.FillEllipse(additionalBrush, _startPosX + 30, _startPosY, 10, 20); } if (EntityRoadTrain.SweepingBrush) { g.DrawLine(pen, _startPosX + 30, _startPosY + 10, _startPosX + 20, _startPosY + 10); g.DrawLine(pen, _startPosX + 20, _startPosY + 10, _startPosX + 10, _startPosY + 30); g.DrawLine(pen, _startPosX + 17, _startPosY + 30, _startPosX + 3, _startPosY + 30); } Brush br = new SolidBrush(EntityRoadTrain.BodyColor); g.DrawLine(pen, _startPosX + 20, _startPosY + 20, _startPosX + 70, _startPosY + 20); g.DrawEllipse(pen, _startPosX + 20, _startPosY + 20, 10, 10); g.DrawEllipse(pen, _startPosX + 30, _startPosY + 20, 10, 10); g.DrawEllipse(pen, _startPosX + 60, _startPosY + 20, 10, 10); g.DrawRectangle(pen, _startPosX + 60, _startPosY, 10, 20); g.FillEllipse(br, _startPosX + 20, _startPosY + 20, 10, 10); g.FillEllipse(br, _startPosX + 30, _startPosY + 20, 10, 10); g.FillEllipse(br, _startPosX + 60, _startPosY + 20, 10, 10); g.FillRectangle(br, _startPosX + 60, _startPosY, 10, 20); } } }