From 86c2222509da2d8f24911c7e10042836a7cbcdca Mon Sep 17 00:00:00 2001 From: Anastasia-Sin Date: Thu, 29 Feb 2024 13:53:31 +0400 Subject: [PATCH] done lab1 --- ProjectCruiser/DrawningCruiser.cs | 135 +++++++++++++----------------- ProjectCruiser/EntityCruiser.cs | 9 +- ProjectCruiser/FormCruiser.cs | 19 ++--- 3 files changed, 69 insertions(+), 94 deletions(-) diff --git a/ProjectCruiser/DrawningCruiser.cs b/ProjectCruiser/DrawningCruiser.cs index fb62ed1..5f6a85a 100644 --- a/ProjectCruiser/DrawningCruiser.cs +++ b/ProjectCruiser/DrawningCruiser.cs @@ -1,51 +1,51 @@ -using ProjectCruiser; using System.Drawing.Drawing2D; namespace ProjectCruiser; /// -/// , - +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности /// public class DrawningCruiser { /// - /// - + /// Класс-сущность /// public EntityCruiser? EntityCruiser { get; private set; } /// - /// + /// Ширина окна /// private int? _pictureWidth; /// - /// + /// Высота окна /// private int? _pictureHeight; /// - /// + /// Левая координата прорисовки автомобиля /// private int? _startPosX; /// - /// + /// Верхняя кооридната прорисовки автомобиля /// private int? _startPosY; /// - /// + /// Ширина прорисовки крейсера /// - private readonly int _drawningCruiserWidth = 110; + private readonly int _drawningCruiserWidth = 150; /// - /// + /// Высота прорисовки крейсера /// - private readonly int _drawningCruiserHeight = 60; + private readonly int _drawningCruiserHeight = 50; + private readonly int _drawningEnginesWidth = 3; /// - /// + /// Инициализация свойств /// - /// - /// - /// - /// - /// - /// - /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия вертолетной площадки + /// Признак наличия шлюпок + /// Признак наличия пушки public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool helicopterArea, bool boat, bool wepon) { @@ -58,34 +58,37 @@ public class DrawningCruiser _startPosY = null; } /// - /// + /// Установка границ поля /// - /// - /// - /// true - , false - , + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - // TODO , "" - // , , + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта,если она была уже установлена - if (_startPosX + 150 > width) + if (_drawningCruiserHeight > height || _drawningCruiserWidth > width) { - _startPosX -= (_startPosX + 150) - width; - } - if (_startPosY + 80 > height) - { - _startPosY -= (_startPosY + 80) - height; + return false; + } _pictureWidth = width; _pictureHeight = height; + + if (_startPosX.HasValue && _startPosY.HasValue) + { + SetPosition(_startPosX.Value, _startPosY.Value); + } + return true; } /// - /// + /// Установка позиции /// - /// X - /// Y + /// Координата X + /// Координата Y public void SetPosition(int x, int y) { if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) @@ -93,29 +96,23 @@ public class DrawningCruiser return; } - if(x + 150 > _pictureWidth) + if (x < 0 || x + _drawningCruiserWidth > _pictureWidth || y < 0 || y + _drawningCruiserHeight > _pictureHeight) { - x -= (x+150) - _pictureWidth.Value; + _startPosX = _pictureWidth - _drawningCruiserWidth; + _startPosY = _pictureHeight - _drawningCruiserHeight; } - - if (y + 50 > _pictureHeight) + else { - y -= (y+50) - _pictureHeight.Value; + _startPosX = x; + _startPosY = y; } - // TODO , "" - // , - - _startPosX = x; - _startPosY = y; - - } /// - /// + /// Изменение направления перемещения /// - /// - /// true - , false - + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно public bool MoveTransport(DirectionType direction) { if (EntityCruiser == null || !_startPosX.HasValue || !_startPosY.HasValue) @@ -124,41 +121,31 @@ public class DrawningCruiser } switch (direction) { - // + //влево case DirectionType.Left: - if (_startPosX.Value - EntityCruiser.Step > 0) + if (_startPosX.Value - EntityCruiser.Step - _drawningEnginesWidth > 0) { _startPosX -= (int)EntityCruiser.Step; } - return true; - // + //вверх case DirectionType.Up: if (_startPosY.Value - EntityCruiser.Step > 0) { _startPosY -= (int)EntityCruiser.Step; } return true; - // + // вправо case DirectionType.Right: - if (_startPosX.Value >= 640) - { - return true; - } - //TODO - if (_startPosX.Value + EntityCruiser.Step > 0) + //TODO прописать логику сдвига в право + if (_startPosX.Value + EntityCruiser.Step + _drawningCruiserWidth < _pictureWidth) { _startPosX += (int)EntityCruiser.Step; } return true; - // + //вниз case DirectionType.Down: - //TODO - if(_startPosY.Value >= 390) - { - return true; - } - if (_startPosY.Value + EntityCruiser.Step > 0) + if (_startPosY.Value + EntityCruiser.Step + _drawningCruiserHeight < _pictureHeight) { _startPosY += (int)EntityCruiser.Step; } @@ -168,7 +155,7 @@ public class DrawningCruiser } } /// - /// + /// Прорисовка объекта /// /// public void DrawTransport(Graphics g) @@ -178,15 +165,14 @@ public class DrawningCruiser { return; } - Pen pen = new(Color.Black, 2); + Pen pen = new(EntityCruiser.BodyColor, 2); Brush additionalBrush = new SolidBrush(Color.Black); Brush weaponBrush = new SolidBrush(Color.Black); Brush weaponBrush2 = new SolidBrush(EntityCruiser.AdditionalColor); Brush helicopterAreaBrush = new HatchBrush(HatchStyle.ZigZag, EntityCruiser.AdditionalColor, Color.FromArgb(163, 163, 163)); Brush boatBrush = new SolidBrush(EntityCruiser.AdditionalColor); - // - + //границы круисера g.DrawLine(pen, _startPosX.Value, _startPosY.Value, _startPosX.Value + 105, _startPosY.Value); g.DrawLine(pen, _startPosX.Value + 105, _startPosY.Value, _startPosX.Value + 147, _startPosY.Value + 24); @@ -195,13 +181,13 @@ public class DrawningCruiser g.DrawLine(pen, _startPosX.Value, _startPosY.Value, _startPosX.Value, _startPosY.Value + 49); - // + //внутренности круисера g.DrawEllipse(pen, _startPosX.Value + 94, _startPosY.Value + 14, 19, 19); g.DrawRectangle(pen, _startPosX.Value + 63, _startPosY.Value + 11, 21, 28); g.DrawRectangle(pen, _startPosX.Value + 35, _startPosY.Value + 17, 28, 14); - // + //зад g.FillRectangle(additionalBrush, _startPosX.Value - 3, _startPosY.Value + 7, 3, 14); g.FillRectangle(additionalBrush, _startPosX.Value - 3, _startPosY.Value + 26, 3, 14); @@ -225,10 +211,7 @@ public class DrawningCruiser g.DrawEllipse(pen, _startPosX.Value + 97, _startPosY.Value + 36, 10, 10); g.FillEllipse(weaponBrush2, _startPosX.Value + 97, _startPosY.Value + 36, 10, 10); - g.FillRectangle(weaponBrush, _startPosX.Value + 107, _startPosY.Value + 40, 15, 5); - - } } diff --git a/ProjectCruiser/EntityCruiser.cs b/ProjectCruiser/EntityCruiser.cs index 4e3bd50..aaabd12 100644 --- a/ProjectCruiser/EntityCruiser.cs +++ b/ProjectCruiser/EntityCruiser.cs @@ -4,6 +4,7 @@ /// public class EntityCruiser { + //свойства /// /// Скорость /// @@ -27,18 +28,18 @@ public class EntityCruiser /// /// Признак (опция) наличие шлюпок /// - public bool Boat { get; private set; } /// - /// Признак (опция) наличие тц + /// Признак (опция) наличие пушки /// public bool Weapon { get; private set; } + //поле класса /// /// Шаг перемещения автомобиля /// public double Step => Speed * 100 / Weight; /// - /// Инициализация полей объекта-класса спортивного автомобиля + /// Инициализация полей объекта-класса крейсера /// /// скорость /// вес @@ -46,7 +47,7 @@ public class EntityCruiser /// дополнительный цвет /// вертолетная площадка /// шлюпки - /// наличие тц + /// наличие пушки public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool helicopterArea, bool boat, bool wepon) { diff --git a/ProjectCruiser/FormCruiser.cs b/ProjectCruiser/FormCruiser.cs index cf05929..b14b170 100644 --- a/ProjectCruiser/FormCruiser.cs +++ b/ProjectCruiser/FormCruiser.cs @@ -1,14 +1,4 @@ -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 ProjectCruiser +namespace ProjectCruiser { public partial class FormCruiser : Form { @@ -23,7 +13,7 @@ namespace ProjectCruiser } /// - /// Метод прорисовки машины + /// Метод прорисовки круисера /// private void Draw() { @@ -55,8 +45,9 @@ namespace ProjectCruiser Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); _drawningCruiser.SetPictureSize(pictureBox1.Width, pictureBox1.Height); - _drawningCruiser.SetPosition(random.Next(10, 100), random.Next(10, - 100)); + + //начальное положение круисера + _drawningCruiser.SetPosition(random.Next(10, 100), random.Next(10, 100)); Draw(); } ///