using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Cruiser { public class DrawingCruiser { /// /// Класс-сущность /// public EntityCruiser? EntityCruiser { get; private set; } /// /// Ширина окна /// private int _pictureWidth; /// /// Высота окна /// private int _pictureHeight; /// /// Левая координата прорисовки Крейсера /// private static int _startPosX; /// /// Верхняя кооридната прорисовки Крейсера /// private static int _startPosY; /// /// Ширина прорисовки Крейсера /// private readonly int _cruiserWidth = 150; /// /// Высота прорисовки Крейсера /// private readonly int _cruiserHeight = 60; /// /// Цвет для палубы /// public Color PalubaColor { get; private set; } /// /// Цвет для элементов /// public Color ElementsColor { get; private set; } /// /// Цвет для дополнений /// public Color DopColor { get; private set; } /// /// Шахты /// public bool Mines { get; private set; } /// /// Верт. площадка /// public bool HelicopPad { get; private set; } /// /// Инициализация свойств /// /// Скорость /// Вес автомобиля /// Основной цвет /// Элементов цвет /// Дополнений цвет /// Признак наличия ракетных шахт /// Признак наличия вертолётной площадки /// Ширина картинки /// Высота картинки /// true - объект создан, false - проверка не пройдена, ///нельзя создать объект в этих размерах public bool Init(int speed, double weight, Color bodyColor, Color secColor, Color dopColor, bool rocketMines, bool helipad, int width, int height) { if (width < _cruiserWidth || height < _cruiserHeight) { _pictureHeight = _cruiserHeight + 100; _pictureWidth = _cruiserWidth + 100; } _pictureWidth = width; _pictureHeight = height; PalubaColor = bodyColor; ElementsColor = secColor; DopColor = dopColor; Mines = rocketMines; HelicopPad = helipad; EntityCruiser = new EntityCruiser(); EntityCruiser.Init(speed, weight, bodyColor, secColor, rocketMines, helipad); return true; } /// /// Установка позиции /// /// Координата X /// Координата Y public void SetPosition(int x, int y) { if (x < 0 || y < 0) { return; } if (x > _pictureWidth || y > _pictureHeight) { return; } _startPosX = x; _startPosY = y; } /// /// Изменение направления перемещения /// /// Направление public void MoveTransport(Direction direction) { if (EntityCruiser == null) { return; } switch (direction) { //влево case Direction.Left: if (_startPosX - EntityCruiser.Step > 0) { _startPosX -= (int)EntityCruiser.Step; } break; //вверх case Direction.Up: if (_startPosY - EntityCruiser.Step > 0) { _startPosY -= (int)EntityCruiser.Step; } break; // вправо case Direction.Right: if (_startPosX + EntityCruiser.Step < _pictureWidth - _cruiserWidth) { _startPosX += (int)EntityCruiser.Step; } break; //вниз case Direction.Down: if (_startPosY + EntityCruiser.Step < _pictureHeight - _cruiserHeight) { _startPosY += (int)EntityCruiser.Step; } break; } } /// /// Прорисовка объекта /// /// public void DrawTransport(Graphics g) { if (EntityCruiser == null) { return; } // палуба Point[] Paluba = new Point[5] { new Point(_startPosX + 10,_startPosY), new Point(_startPosX + 110,_startPosY), new Point(_startPosX + 160,_startPosY + 30), new Point(_startPosX + 110,_startPosY + 60), new Point(_startPosX + 10,_startPosY + 60) }; Brush brush = new SolidBrush(PalubaColor); g.FillPolygon(brush, Paluba); // элементы Point[] Elements = new Point[8] { new Point(_startPosX + 50,_startPosY + 20), new Point(_startPosX + 70,_startPosY + 20), new Point(_startPosX + 70,_startPosY + 10), new Point(_startPosX + 90,_startPosY + 10), new Point(_startPosX + 90,_startPosY + 50), new Point(_startPosX + 70,_startPosY + 50), new Point(_startPosX + 70,_startPosY + 40), new Point(_startPosX + 50,_startPosY + 40), }; Brush brushElem = new SolidBrush(ElementsColor); g.FillPolygon(brushElem, Elements); g.FillEllipse(brushElem, _startPosX + 100, _startPosY + 20, 20, 20); // турбины Brush Turbins = new SolidBrush(Color.Black); g.FillRectangle(Turbins, _startPosX, _startPosY + 10, 10, 20); g.FillRectangle(Turbins, _startPosX, _startPosY + 35, 10, 20); // шахты if (Mines) { Brush DopBrush = new SolidBrush(DopColor); g.FillRectangle(DopBrush, _startPosX + 15, _startPosY + 10, 10, 15); g.FillRectangle(DopBrush, _startPosX + 30, _startPosY + 10, 10, 15); } // верт площадка if (HelicopPad) { Brush DopBrush = new SolidBrush(DopColor); g.FillEllipse(DopBrush, _startPosX + 15, _startPosY + 25, 25, 25); } } } }