diff --git a/ProjectStormtrooper/ProjectStormtrooper/DrawingPlane.cs b/ProjectStormtrooper/ProjectStormtrooper/DrawingPlane.cs new file mode 100644 index 0000000..cc21783 --- /dev/null +++ b/ProjectStormtrooper/ProjectStormtrooper/DrawingPlane.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectStormtrooper +{ + /// <summary> + /// Класс отвечающий за прорисовку и перемещение объекта-сущности + /// </summary> + public class DrawingPlane + { + /// <summary> + /// Класс-сущность + /// </summary> + public EntityPlane? EntityPlane{ get; protected set; } + /// <summary> + /// Ширина окна + /// </summary> + private int _pictureWidth; + /// <summary> + /// Высота окна + /// </summary> + private int _pictureHeight; + /// <summary> + /// Левая координата начала прорисовки + /// </summary> + private int _startPosX; + /// <summary> + /// Верхняя координата начала прорисовки + /// </summary> + private int _startPosY; + /// <summary> + /// Ширина прорисовки + /// </summary> + private readonly int _planeWidth = 110; + /// <summary> + /// Высота прорисовки + /// </summary> + private readonly int _planeHeight = 110; + /// <summary> + /// Конструктор + /// </summary> + /// <param name="speed">Скорость</param> + /// <param name="weight">Вес</param> + /// <param name="bodyColor">Основной цвет</param> + /// <param name="width">Ширина картинки</param> + /// <param name="height">Высота картинки</param> + public DrawingPlane(int speed, double weight, Color bodyColor, int width, int height) + { + if (width < _planeWidth && height < _planeHeight) + { + return; + } + _pictureWidth = width; + _pictureHeight = height; + EntityPlane = new EntityPlane(speed, weight, bodyColor); + } + /// <summary> + /// Конструктор + /// </summary> + /// <param name="speed">Скорость</param> + /// <param name="weight">Вес</param> + /// <param name="bodyColor">Основной цвет</param> + /// <param name="width">Ширина окна</param> + /// <param name="height">Высота окна</param> + /// <param name="planeWidth">Ширина объекта</param> + /// <param name="planeHeight">Высота объекта</param> + protected DrawingPlane(int speed, double weight, Color bodyColor, + int width, int height, int planeWidth, int planeHeight) + { + if (width < planeWidth && height < planeHeight) + { + return; + } + _pictureWidth = width; + _pictureHeight = height; + _planeWidth = planeWidth; + _planeHeight = planeHeight; + EntityPlane = new EntityPlane(speed, weight, bodyColor); + } + /// <summary> + /// Установка позиции + /// </summary> + /// <param name="x">Координата X</param> + /// <param name="y">Координата Y</param> + public void SetPosition(int x, int y) + { + if (x < 0) + { + x = 0; + } + else if (x > _pictureWidth - _planeWidth) + { + x = _pictureWidth - _planeWidth; + } + _startPosX = x; + + if (y < 0) + { + y = 0; + } + else if (y > _pictureHeight - _planeHeight) + { + y = _pictureHeight - _planeHeight; + } + _startPosY = y; + } + /// <summary> + /// Перемещение объекта + /// </summary> + /// <param name="direction">Направление перемещения</param> + public void MoveTransport(DirectionType direction) + { + if (EntityPlane == null) + { + return; + } + switch (direction) + { + // Вверх + case DirectionType.Up: + if (_startPosY - EntityPlane.Step >= 0) + { + _startPosY -= (int)EntityPlane.Step; + } + break; + // Вниз + case DirectionType.Down: + if (_startPosY + _planeHeight + EntityPlane.Step <= _pictureHeight) + { + _startPosY += (int)EntityPlane.Step; + } + break; + // Влево + case DirectionType.Left: + if (_startPosX - EntityPlane.Step >= 0) + { + _startPosX -= (int)EntityPlane.Step; + } + break; + // Вправо + case DirectionType.Right: + if (_startPosX + _planeWidth + EntityPlane.Step <= _pictureWidth) + { + _startPosX += (int)EntityPlane.Step; + } + break; + } + } + /// <summary> + /// Прорисовка объекта + /// </summary> + /// <param name="g"></param> + public void DrawTransport(Graphics g) + { + if (EntityPlane == null) + { + return; + } + Pen penBlack = new Pen(Color.Black); + Brush brushBlack = new SolidBrush(Color.Black); + Brush brushBodyColor = new SolidBrush(EntityPlane.BodyColor); + + // Высота фюзеляжа + int bodyHeight = _planeHeight / 9; + + // Рисуем нос + + Point[] pointsCockPit = { + new Point(_startPosX, _startPosY + _planeHeight / 2), + new Point(_startPosX + _planeWidth / 8, _startPosY + _planeHeight / 2 - bodyHeight / 2), + new Point(_startPosX + _planeWidth / 8, _startPosY + _planeHeight / 2 + bodyHeight / 2) + }; + + g.FillPolygon(brushBlack, pointsCockPit); + + // Рисуем крылья + + Point[] pointsWings = { + new Point(_startPosX + _planeWidth / 2, _startPosY), + new Point(_startPosX + _planeWidth / 2 + _planeWidth / 15, _startPosY), + new Point(_startPosX + _planeWidth / 2 + _planeWidth / 6, _startPosY + _planeHeight / 2), + new Point(_startPosX + _planeWidth / 2 + _planeWidth / 15, _startPosY + _planeHeight), + new Point(_startPosX + _planeWidth / 2 , _startPosY + _planeHeight) + }; + + g.FillPolygon(brushBodyColor, pointsWings); + g.DrawPolygon(penBlack, pointsWings); + + // Рисуем хвостовое оперение + + Point[] pointsTail = { + new Point(_startPosX + _planeWidth, _startPosY + _planeHeight / 2 - _planeHeight / 3), + new Point(_startPosX + _planeWidth - _planeWidth / 8, _startPosY + _planeHeight / 2 - _planeHeight / 8), + new Point(_startPosX + _planeWidth - _planeWidth / 8, _startPosY + _planeHeight / 2 + _planeHeight / 8), + new Point(_startPosX + _planeWidth, _startPosY + _planeHeight / 2 + _planeHeight / 3) + + }; + + g.FillPolygon(brushBodyColor, pointsTail); + g.DrawPolygon(penBlack, pointsTail); + + // Рисуем фюзеляж + + g.FillRectangle(brushBodyColor, _startPosX + _planeWidth / 8, _startPosY + _planeHeight / 2 - bodyHeight / 2, _planeWidth - _planeWidth / 8, bodyHeight); + g.DrawRectangle(penBlack, _startPosX + _planeWidth / 8, _startPosY + _planeHeight / 2 - bodyHeight / 2, _planeWidth - _planeWidth / 8, bodyHeight); + } + } +} diff --git a/ProjectStormtrooper/ProjectStormtrooper/EntityPlane.cs b/ProjectStormtrooper/ProjectStormtrooper/EntityPlane.cs index 3411574..f384c92 100644 --- a/ProjectStormtrooper/ProjectStormtrooper/EntityPlane.cs +++ b/ProjectStormtrooper/ProjectStormtrooper/EntityPlane.cs @@ -29,6 +29,12 @@ namespace ProjectStormtrooper /// Шаг перемещения /// </summary> public double Step => (double)Speed * 250 / Weight; + /// <summary> + /// Конструктор + /// </summary> + /// <param name="speed"></param> + /// <param name="weight"></param> + /// <param name="bodyColor"></param> public EntityPlane(int speed, double weight, Color bodyColor) { Speed = speed;