From a4c26fed31142e56350e1ac9134d28c736a88033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=95=D1=80=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2?= Date: Tue, 1 Oct 2024 21:16:10 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=5F1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab0/lab0/DrawingTeplohod.cs | 172 +++++++++++++---------------- lab0/lab0/EntityTeplohod.cs | 57 ++++++++-- lab0/lab0/FormTeplohod.Designer.cs | 1 - lab0/lab0/FormTeplohod.cs | 165 +++++++++++++-------------- 4 files changed, 201 insertions(+), 194 deletions(-) diff --git a/lab0/lab0/DrawingTeplohod.cs b/lab0/lab0/DrawingTeplohod.cs index 80a5806..d6b83c1 100644 --- a/lab0/lab0/DrawingTeplohod.cs +++ b/lab0/lab0/DrawingTeplohod.cs @@ -3,50 +3,57 @@ using System.Drawing; namespace Teplohod; -public class DrawingTeplohod +public class DrawningTeplohod { /// - /// Класс-сущность - /// - public EntityTeplohod? EntityTeplohod { get; set; } + /// Класс-сущность + /// + public EntityTeplohod? EntityTeplohod { get; private set; } /// /// Ширина окна /// private int? _pictureWidth; + /// /// Высота окна /// private int? _pictureHeight; - /// - /// Левая координата прорисовки теплохода - /// - private int? _startPosX; + /// - /// Верхняя кооридната прорисовки теплохода + /// Левая координата прорисовки автомобиля + /// + private int? _startPosX; + + /// + /// Верхняя кооридната прорисовки автомобиля /// private int? _startPosY; + /// - /// Ширина прорисовки теплохода + /// Ширина прорисовки автомобиля /// - private readonly int _drawningTeplohodWidth = 150; + private readonly int _drawningTeplohodWidth = 110; + /// - /// Высота прорисовки теплохода + /// Высота прорисовки автомобиля /// - private readonly int _drawningTeplohodHeight = 88; + private readonly int _drawningTeplohodHeight = 60; + /// /// Инициализация свойств /// /// Скорость /// Вес - /// Основной цвет - /// Дополнительный цвет - /// Признак наличия труб - /// Признак наличия топливных баков - public void Init(int speed, double weight, Color bodycolor, Color additionalcolor, bool pipes, bool fueltank) + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool pipes, bool tank, bool firstDack) { EntityTeplohod = new EntityTeplohod(); - EntityTeplohod.Init(speed, weight, bodycolor, additionalcolor, pipes, fueltank); + EntityTeplohod.Init(speed, weight, bodyColor, additionalColor, pipes, tank, firstDack); _pictureWidth = null; _pictureHeight = null; _startPosX = null; @@ -61,33 +68,24 @@ public class DrawingTeplohod /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - if (EntityTeplohod == null) + if (_drawningTeplohodWidth <= width && _drawningTeplohodHeight <= height) { - return false; - } - - // Проверяем, что объект не выходит за пределы формы - if (width >= _drawningTeplohodWidth && height >= _drawningTeplohodHeight) - { - _pictureWidth = width; - _pictureHeight = height; - - // Если уже заданы координаты прорисовки, то корректируем их, чтобы объект оставался видимым + _pictureWidth = width; + _pictureHeight = height; if (_startPosX.HasValue && _startPosY.HasValue) { if (_startPosX + _drawningTeplohodWidth > _pictureWidth) { _startPosX = _pictureWidth - _drawningTeplohodWidth; } + if (_startPosY + _drawningTeplohodHeight > _pictureHeight) { _startPosY = _pictureHeight - _drawningTeplohodHeight; } } - - return true; - } - + return true; + } return false; } @@ -102,26 +100,11 @@ public class DrawingTeplohod { return; } + if (x < 0) x = 0; + else if (x + _drawningTeplohodWidth > _pictureWidth) x = _pictureWidth.Value - _drawningTeplohodWidth; - // Проверяем, выходит ли объект за границы формы - if (x < 0) - { - x = 0; - } - else if (x + _drawningTeplohodWidth > _pictureWidth) - { - x = _pictureWidth.Value - _drawningTeplohodWidth; - } - - if (y < 0) - { - y = 0; - } - else if (y + _drawningTeplohodHeight > _pictureHeight) - { - y = _pictureHeight.Value - _drawningTeplohodHeight; - } - + if (y < 0) y = 0; + else if (y + _drawningTeplohodHeight > _pictureHeight) y = _pictureHeight.Value - _drawningTeplohodHeight; _startPosX = x; _startPosY = y; } @@ -137,6 +120,7 @@ public class DrawingTeplohod { return false; } + switch (direction) { //влево @@ -155,75 +139,73 @@ public class DrawingTeplohod return true; // вправо case DirectionType.Right: - if (_startPosX.Value + EntityTeplohod.Step + _drawningTeplohodWidth < _pictureWidth) - { + if (_startPosX.Value + _drawningTeplohodWidth + EntityTeplohod.Step < _pictureWidth) _startPosX += (int)EntityTeplohod.Step; - } return true; //вниз case DirectionType.Down: - if (_startPosY.Value + EntityTeplohod.Step + _drawningTeplohodHeight < _pictureHeight) - { + if (_startPosY.Value + _drawningTeplohodHeight + EntityTeplohod.Step < _pictureHeight) _startPosY += (int)EntityTeplohod.Step; - } return true; default: return false; } } - /// /// Прорисовка объекта /// /// public void DrawTransport(Graphics g) { - if (EntityTeplohod == null || !_startPosX.HasValue || - !_startPosY.HasValue) + if (EntityTeplohod == null || !_startPosX.HasValue || !_startPosY.HasValue) { return; } Pen pen = new(Color.Black); - Brush additionalBrush = new SolidBrush(EntityTeplohod.AdditionalColor); Brush bodybrush = new SolidBrush(EntityTeplohod.BodyColor); + Brush bodybrush2 = new SolidBrush(EntityTeplohod.AdditionalColor); - - //корпус - g.DrawRectangle(pen, new Rectangle(_startPosX.Value + 30, _startPosY.Value + 40, 90, 10)); - g.FillRectangle(bodybrush, _startPosX.Value + 30, _startPosY.Value + 40, 90, 10); - g.DrawPolygon(pen, new[]{ - new Point(_startPosX.Value, _startPosY.Value + 50), - new Point(_startPosX.Value + 150, _startPosY.Value + 50), - new Point(_startPosX.Value + 130, _startPosY.Value + 80), - new Point(_startPosX.Value + 20, _startPosY.Value + 80) - }); - g.FillPolygon(bodybrush, new[]{ - new Point(_startPosX.Value, _startPosY.Value + 50), - new Point(_startPosX.Value + 150, _startPosY.Value + 50), - new Point(_startPosX.Value + 130, _startPosY.Value + 80), - new Point(_startPosX.Value + 20, _startPosY.Value + 80) - }); - g.DrawLine(pen, _startPosX.Value, _startPosY.Value + 50, _startPosX.Value + 150, _startPosY.Value + 50); - //трубы + // Трубы if (EntityTeplohod.Pipes) { - g.DrawRectangle(pen, new Rectangle(_startPosX.Value + 5, _startPosY.Value, 15, 50)); - g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value, 15, 50); + g.DrawRectangle(pen, _startPosX.Value + 30, _startPosY.Value, 10, 20); + g.FillRectangle(bodybrush2, _startPosX.Value + 30, _startPosY.Value, 10, 20); + } - //топливный бак - if (EntityTeplohod.FuelTank) + + //границы Теплохода + g.DrawRectangle(pen, _startPosX.Value + 100, _startPosY.Value, 30, 20); + Point point1 = new Point(_startPosX.Value, _startPosY.Value + 20); + Point point2 = new Point(_startPosX.Value + 150, _startPosY.Value + 20); + Point point3 = new Point(_startPosX.Value + 130, _startPosY.Value + 45); + Point point4 = new Point(_startPosX.Value + 40, _startPosY.Value + 45); + Point point5 = new Point(_startPosX.Value, _startPosY.Value + 20); + + Point[] pointsTeplohod = { point1, point2, point3, point4, point5 }; + + g.DrawPolygon(pen, pointsTeplohod); + + + + g.FillRectangle(bodybrush, _startPosX.Value + 100, _startPosY.Value, 30, 20); + g.FillPolygon(bodybrush2, pointsTeplohod); + + + if (EntityTeplohod.FirstDack) { - Brush brRed = new SolidBrush(Color.Red); - g.DrawRectangle(pen, new Rectangle(_startPosX.Value + 35, _startPosY.Value + 5, 80, 30)); - g.FillRectangle(brRed, _startPosX.Value + 35, _startPosY.Value + 5, 80, 30); + Brush bodybrush3 = new SolidBrush(Color.Yellow); + g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 5, 48, 15); + g.FillRectangle(bodybrush3, _startPosX.Value + 51, _startPosY.Value + 5, 47, 15); + } + + // топливный бак + if (EntityTeplohod.Tank) + { + Brush bodybrush4 = new SolidBrush(Color.Red); + g.DrawRectangle(pen, _startPosX.Value + 131, _startPosY.Value + 5, 15, 15); + g.FillRectangle(bodybrush4, _startPosX.Value + 131, _startPosY.Value + 5, 15, 15); } - g.DrawLine(pen, _startPosX.Value + 35, _startPosY.Value + 35, _startPosX.Value + 30, _startPosY.Value + 40); - g.DrawLine(pen, _startPosX.Value + 115, _startPosY.Value + 35, _startPosX.Value + 120, _startPosY.Value + 40); - //якорь - g.DrawLine(pen, _startPosX.Value + 25, _startPosY.Value + 55, _startPosX.Value + 25, _startPosY.Value + 75); - g.DrawLine(pen, _startPosX.Value + 17, _startPosY.Value + 65, _startPosX.Value + 33, _startPosY.Value + 65); - g.DrawLine(pen, _startPosX.Value + 23, _startPosY.Value + 75, _startPosX.Value + 27, _startPosY.Value + 75); } -} +} \ No newline at end of file diff --git a/lab0/lab0/EntityTeplohod.cs b/lab0/lab0/EntityTeplohod.cs index cddd6b7..6485127 100644 --- a/lab0/lab0/EntityTeplohod.cs +++ b/lab0/lab0/EntityTeplohod.cs @@ -2,28 +2,65 @@ public class EntityTeplohod { - public int Speed { get; private set; } - public double Weight { get; private set; } + /// + /// Скорость + /// + 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 Pipes { get; private set; } + /// + /// Признак (опция) наличия труб + /// + public bool Pipes { get; private set; } - public bool FuelTank { get; private set; } + /// + /// Признак (опция) наличия топливного бака + /// + public bool Tank { get; private set; } + /// + /// Признак (опция) наличия гоночной полосы + /// + public bool FirstDack { get; private set; } + /// + /// Шаг перемещения автомобиля + /// public double Step => Speed * 100 / Weight; - public void Init(int speed, double weight, Color bodycolor, Color additionalcolor, bool pipes, bool fueltank) + /// + /// Инициализация полей объекта-класса спортивного автомобиля + /// + /// Скорость + /// Вес автомобиля + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия обвеса + /// Признак наличия антикрыла + /// Признак наличия гоночной полосы + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool pipes, bool tank, bool firstDack) { - Speed = speed; - Weight = weight; - BodyColor = bodycolor; - AdditionalColor = additionalcolor; + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; Pipes = pipes; - FuelTank = fueltank; + Tank = tank; + FirstDack = firstDack; } } diff --git a/lab0/lab0/FormTeplohod.Designer.cs b/lab0/lab0/FormTeplohod.Designer.cs index aedc24a..d6f8f98 100644 --- a/lab0/lab0/FormTeplohod.Designer.cs +++ b/lab0/lab0/FormTeplohod.Designer.cs @@ -55,7 +55,6 @@ buttonCreate.TabIndex = 1; buttonCreate.Text = "создать"; buttonCreate.UseVisualStyleBackColor = true; - buttonCreate.Click += buttonCreate_Click; // // buttonLeft // diff --git a/lab0/lab0/FormTeplohod.cs b/lab0/lab0/FormTeplohod.cs index dc1a307..567b103 100644 --- a/lab0/lab0/FormTeplohod.cs +++ b/lab0/lab0/FormTeplohod.cs @@ -1,102 +1,91 @@ -using lab0; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace Teplohod; - -public partial class FormTeplohod : Form +namespace Teplohod { - /// - /// Поле-объект для прорисовки объекта - /// - private DrawingTeplohod? _drawingTeplohod; - - - public FormTeplohod() + public partial class FormTeplohod : Form { - InitializeComponent(); - } - - - /// - /// Метод прорисовки теплохода - /// - - private void Draw() - { - if (_drawingTeplohod == null) + public FormTeplohod() { - return; + InitializeComponent(); } - Bitmap bmp = new(pictureBoxTeplohod.Width, pictureBoxTeplohod.Height); - Graphics gr = Graphics.FromImage(bmp); - _drawingTeplohod.DrawTransport(gr); - pictureBoxTeplohod.Image = bmp; - } + /// + /// Поле-объект для прорисовки объекта + /// + private DrawningTeplohod? _drawningTeplohod; - /// - /// Обработка нажатия кнопки "Создать" - /// - /// - /// - private void buttonCreate_Click(object sender, EventArgs e) - { - Random random = new(); - _drawingTeplohod = new DrawingTeplohod(); - _drawingTeplohod.Init(random.Next(100, 300), random.Next(1000, 3000), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Convert.ToBoolean(random.Next(0, 2)), - Convert.ToBoolean(random.Next(0, 2))); - _drawingTeplohod.SetPictureSize(pictureBoxTeplohod.Width, pictureBoxTeplohod.Height); - _drawingTeplohod.SetPosition(random.Next(10, 100), random.Next(10, 100)); - Draw(); - } + /// + /// Конструктор формы + /// - /// - /// Перемещение объекта по форме (нажатие кнопок навигации) - /// - /// - /// - private void ButtonMove_Click(object sender, EventArgs e) - { - if (_drawingTeplohod == null) + + /// + /// Метод прорисовки машины + /// + private void Draw() { - return; + if (_drawningTeplohod == null) + { + return; + } + + Bitmap bmp = new(pictureBoxTeplohod.Width, pictureBoxTeplohod.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningTeplohod.DrawTransport(gr); + pictureBoxTeplohod.Image = bmp; } - string name = ((Button)sender)?.Name ?? string.Empty; - bool result = false; - switch (name) - { - case "buttonUp": - result = - _drawingTeplohod.MoveTransport(DirectionType.Up); - break; - case "buttonDown": - result = - _drawingTeplohod.MoveTransport(DirectionType.Down); - break; - case "buttonLeft": - result = - _drawingTeplohod.MoveTransport(DirectionType.Left); - break; - case "buttonRight": - result = - _drawingTeplohod.MoveTransport(DirectionType.Right); - break; - } - if (result) + + /// + /// Обработка нажатия кнопки "Создать" + /// + /// + /// + private void ButtonCreateSportCar_Click(object sender, EventArgs e) { + Random random = new(); + _drawningTeplohod = new DrawningTeplohod(); + _drawningTeplohod.Init(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + _drawningTeplohod.SetPictureSize(pictureBoxTeplohod.Width, pictureBoxTeplohod.Height); + _drawningTeplohod.SetPosition(random.Next(10, 100), random.Next(10, 100)); Draw(); } + + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningTeplohod == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningTeplohod.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningTeplohod.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningTeplohod.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningTeplohod.MoveTransport(DirectionType.Right); + break; + } + + if (result) + { + Draw(); + } + } } -} +} \ No newline at end of file