From b216138896a6685096e1954dfa67dd1daa2a7cd9 Mon Sep 17 00:00:00 2001 From: elbek Date: Sun, 16 Feb 2025 20:31:25 +0400 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B51?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectAircraft12/DrawningAircraft.cs | 173 ++++++++++++++---- .../ProjectAircraft12/EntityAircraft.cs | 6 +- 2 files changed, 141 insertions(+), 38 deletions(-) diff --git a/ProjectAircraft12/ProjectAircraft12/DrawningAircraft.cs b/ProjectAircraft12/ProjectAircraft12/DrawningAircraft.cs index 125111d..4f02572 100644 --- a/ProjectAircraft12/ProjectAircraft12/DrawningAircraft.cs +++ b/ProjectAircraft12/ProjectAircraft12/DrawningAircraft.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; +using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Drawing; + namespace ProjectAircraft12; @@ -40,7 +43,7 @@ public class DrawningAircraft /// /// Ширина прорисовки самолета /// - private readonly int _drawingAircraftWidth = 80; + private readonly int _drawingAircraftWidth = 100; /// /// Высота прорисовки самолета @@ -114,7 +117,6 @@ public class DrawningAircraft switch (direction) { - // влево case DirectionType.Left: if (_startPosX.Value - EntityAircraft.Step > 0) { @@ -122,7 +124,6 @@ public class DrawningAircraft } return true; - // вверх case DirectionType.Up: if (_startPosY.Value - EntityAircraft.Step > 0) { @@ -130,24 +131,92 @@ public class DrawningAircraft } return true; - // вправо case DirectionType.Right: - if (_startPosX.Value + EntityAircraft.Step < _pictureWidth) + if (_startPosX.Value + EntityAircraft.Step < _pictureWidth-60) //-60 { - _startPosX += (int)EntityAircraft.Step; + _startPosX += (int)EntityAircraft.Step-20; } return true; - // вниз case DirectionType.Down: if (_startPosY.Value + EntityAircraft.Step < _pictureHeight) { _startPosY += (int)EntityAircraft.Step; } return true; + } - default: - return false; + // Если вдруг передали неизвестное направление — возврат по умолчанию + return false; + } + //public bool MoveTransport(DirectionType direction) + //{ + // if (EntityAircraft == null || !_startPosX.HasValue || !_startPosY.HasValue) + // { + // return false; + // } + + // switch (direction) + // { + // // влево + // case DirectionType.Left: + // if (_startPosX.Value - EntityAircraft.Step > 0) + // { + // _startPosX -= (int)EntityAircraft.Step; + // } + // return true; + + // // вверх + // case DirectionType.Up: + // if (_startPosY.Value - EntityAircraft.Step > 0) + // { + // _startPosY -= (int)EntityAircraft.Step; + // } + // return true; + + // // вправо + // case DirectionType.Right: + // if (_startPosX.Value + EntityAircraft.Step < _pictureWidth) + // { + // _startPosX += (int)EntityAircraft.Step; + // } + // return true; + + // // вниз + // case DirectionType.Down: + // if (_startPosY.Value + EntityAircraft.Step < _pictureHeight) + // { + // _startPosY += (int)EntityAircraft.Step; + // } + // return true; + + // default: + // return false; + // } + //} + + + private GraphicsPath CreateRoundedRectangle(Rectangle rect, int radius) + { + GraphicsPath path = new GraphicsPath(); + int d = radius * 2; + + // Добавляем скруглённые углы + path.AddArc(rect.X, rect.Y, d, d, 180, 90); // Верхний левый + path.AddArc(rect.Right - d, rect.Y, d, d, 270, 90); // Верхний правый + path.AddArc(rect.Right - d, rect.Bottom - d, d, d, 0, 90); // Нижний правый + path.AddArc(rect.X, rect.Bottom - d, d, d, 90, 90); // Нижний левый + path.CloseFigure(); + + return path; + } + + private void DrawRoundedRectangle(Graphics g, Brush brush, Pen pen, Rectangle rect, int radius) + { + using (GraphicsPath path = CreateRoundedRectangle(rect, radius)) + { + g.FillPath(brush, path); // Закрашенный фон + g.DrawPath(pen, path); // Обводка } } @@ -166,36 +235,70 @@ public class DrawningAircraft g.FillRectangle(bodyBrush, _startPosX.Value, _startPosY.Value + 10, _drawingAircraftWidth, 20); g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 10, _drawingAircraftWidth, 20); - // Кабина - g.FillEllipse(bodyBrush, _startPosX. - Value + _drawingAircraftWidth - 15, _startPosY.Value + 5, 20, 30); - g.DrawEllipse(pen, _startPosX.Value + _drawingAircraftWidth - 15, _startPosY.Value + 5, 20, 30); + // orqa qanot + Point[] trianglePoints = { + new Point(_startPosX.Value, _startPosY.Value - 20), // Вершина + new Point(_startPosX.Value, _startPosY.Value+10), // Левый угол + new Point(_startPosX.Value + 30, _startPosY.Value+10) // Правый угол +}; - // Крылья - g.FillRectangle(bodyBrush, _startPosX.Value + 30, _startPosY.Value - 5, 60, 10); - g.FillRectangle(bodyBrush, _startPosX.Value + 30, _startPosY.Value + 35, 60, 10); - g.DrawRectangle(pen, _startPosX.Value + 30, _startPosY.Value - 5, 60, 10); - g.DrawRectangle(pen, _startPosX.Value + 30, _startPosY.Value + 35, 60, 10); + g.FillPolygon(bodyBrush, trianglePoints); // Закрашенный треугольник + g.DrawPolygon(pen, trianglePoints); // Контур треугольника - // Хвостовое оперение - g.FillRectangle(bodyBrush, _startPosX.Value + 5, _startPosY.Value - 10, 20, 15); - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value - 10, 20, 15); - // Топливные баки (если есть) - if (EntityAircraft.ExtraFuelTanks) - { - g.FillEllipse(additionalBrush, _startPosX.Value + 20, _startPosY.Value + 5, 15, 15); - g.FillEllipse(additionalBrush, _startPosX.Value + 20, _startPosY.Value + 30, 15, 15); - g.DrawEllipse(pen, _startPosX.Value + 20, _startPosY.Value + 5, 15, 15); - g.DrawEllipse(pen, _startPosX.Value + 20, _startPosY.Value + 30, 15, 15); - } + // бак + Rectangle rect = new Rectangle(_startPosX.Value - 5, _startPosY.Value + 5, 30, 10); // Прямоугольник от заданной точки + int radius = 4; // Радиус скругления + DrawRoundedRectangle(g, bodyBrush, Pens.Black, rect, radius); + + + // oldi uchburchak + Point[] triangle_right = { + new Point(_startPosX.Value+120, _startPosY.Value + 20), // Вершина + new Point(_startPosX.Value+100, _startPosY.Value+10), // Левый угол + new Point(_startPosX.Value+100, _startPosY.Value+30) // Правый угол +}; + + g.FillPolygon(bodyBrush, triangle_right); // Закрашенный треугольник + g.DrawPolygon(pen, triangle_right); // Контур треугольника + + Pen line_triangle_right = new Pen(Color.Black, 1); // Чёрная линия толщиной 2 пикселя + g.DrawLine(line_triangle_right, _startPosX.Value+100, _startPosY.Value+20, _startPosX.Value + 120, _startPosY.Value + 20); + + //иллюминатор + Pen okno = new Pen(Color.Black, 3); // Чёрная линия толщиной 3 пикселя + g.DrawLine(okno, _startPosX.Value + 40, _startPosY.Value + 20, _startPosX.Value + 80, _startPosY.Value + 20); + + // шасси + Pen shassi1 = new Pen(Color.Black, 2); // Чёрная линия толщиной 2 пикселя + g.DrawLine(shassi1, _startPosX.Value + 40, _startPosY.Value + 30, _startPosX.Value + 40, _startPosY.Value + 36); + + Pen koliso1 = new Pen(Color.Black, 2); // Чёрная обводка толщиной 2 пикселя + g.DrawRectangle(koliso1, _startPosX.Value+35, _startPosY.Value+35, 4, 4); + Brush brush = new SolidBrush(Color.Black); + g.FillRectangle(brush, _startPosX.Value+35, _startPosY.Value+35, 4, 4); + + Pen koliso2 = new Pen(Color.Black, 2); // Чёрная обводка толщиной 2 пикселя + g.DrawRectangle(koliso2, _startPosX.Value + 42, _startPosY.Value + 35, 4, 4); + g.FillRectangle(brush, _startPosX.Value + 42, _startPosY.Value + 35, 4, 4); + + Pen shassi2 = new Pen(Color.Black, 2); // Чёрная линия толщиной 2 пикселя + g.DrawLine(shassi1, _startPosX.Value + 90, _startPosY.Value + 30, _startPosX.Value + 90, _startPosY.Value + 36); + + Pen koliso3 = new Pen(Color.Black, 2); // Чёрная обводка толщиной 2 пикселя + g.DrawRectangle(koliso3, _startPosX.Value + 88, _startPosY.Value + 35, 4, 4); + g.FillRectangle(brush, _startPosX.Value + 88, _startPosY.Value + 35, 4, 4); + + + // radar + Rectangle radar = new Rectangle(_startPosX.Value + 50, _startPosY.Value-5, 20, 10); // Прямоугольник от заданной точки + int radius_radara = 6; // Радиус скругления + DrawRoundedRectangle(g, bodyBrush, Pens.Black, radar, radius_radara); + + Pen os_radar = new Pen(Color.Black, 2); // Чёрная линия толщиной 1 пикселя + g.DrawLine(os_radar, _startPosX.Value + 60, _startPosY.Value + 10, _startPosX.Value + 60, _startPosY.Value+5); + - // Радар (если есть) - if (EntityAircraft.Radar) - { - g.FillEllipse(additionalBrush, _startPosX.Value + _drawingAircraftWidth - 10, _startPosY.Value + 15, 10, 10); - g.DrawEllipse(pen, _startPosX.Value + _drawingAircraftWidth - 10, _startPosY.Value + 15, 10, 10); - } } } diff --git a/ProjectAircraft12/ProjectAircraft12/EntityAircraft.cs b/ProjectAircraft12/ProjectAircraft12/EntityAircraft.cs index 177ad3f..4b351cb 100644 --- a/ProjectAircraft12/ProjectAircraft12/EntityAircraft.cs +++ b/ProjectAircraft12/ProjectAircraft12/EntityAircraft.cs @@ -37,9 +37,9 @@ public class EntityAircraft /// public double Step => Speed * 100 / Weight; - public int WindowCount { get; internal set; } - public bool BodyKit { get; internal set; } - public bool Wing { get; internal set; } + //public int WindowCount { get; internal set; } + //public bool BodyKit { get; internal set; } + //public bool Wing { get; internal set; } /// /// Инициализация полей объекта-класса самолета