From dcc4f2c688c35e8cac2b65cc2ae29edc47e7fbe5 Mon Sep 17 00:00:00 2001 From: cleverman1337 <74911264+cleverman1337@users.noreply.github.com> Date: Thu, 4 Apr 2024 09:26:44 +0400 Subject: [PATCH] LabWork01 --- .../DrawningArtillery.cs | 68 +++++++++++-------- .../EntityArtillery.cs | 12 ++-- 2 files changed, 46 insertions(+), 34 deletions(-) diff --git a/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/DrawningArtillery.cs b/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/DrawningArtillery.cs index cbc26f2..7a1825d 100644 --- a/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/DrawningArtillery.cs +++ b/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/DrawningArtillery.cs @@ -39,9 +39,9 @@ public class DrawningArtillery /// Вес /// Основной цвет /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия антикрыла - /// Признак наличия гоночной полосы + /// Признак наличия пушки + /// Признак наличия залповой установки + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool cannon, bool rocket) { @@ -60,15 +60,20 @@ public class DrawningArtillery /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах public bool SetPictureSize(int width, int height) { - // TODO проверка, что объект "влезает" в размеры поля - // если влезает, сохраняем границы и корректируем позицию объекта,если она была уже установлена - if (width >= _drawningArtilleryWidth && height >= _drawningArtilleryHeight) + if (_drawningArtilleryHeight > height || _drawningArtilleryWidth > width) { - _pictureWidth = width; - _pictureHeight = height; - return true; + return false; } - return false; + + _pictureWidth = width; + _pictureHeight = height; + + if (_startPosX.HasValue && _startPosY.HasValue) + { + SetPosition(_startPosX.Value, _startPosY.Value); + } + + return true; } /// /// Установка позиции @@ -83,16 +88,23 @@ public class DrawningArtillery } // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы // то надо изменить координаты, чтобы он оставался в этих границах - if (x + 110 > _pictureWidth.Value) - { - x -= (x + 110) - _pictureWidth.Value; + if (x < 0 || x + _drawningArtilleryWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _drawningArtilleryWidth; } - if (y + 60 > _pictureHeight.Value) + else { - y -= (y + 60) - _pictureHeight.Value; + _startPosX = x; + } + + if (y < 0 || y + _drawningArtilleryHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _drawningArtilleryHeight; + } + else + { + _startPosY = y; } - _startPosX = x; - _startPosY = y; } /// /// Изменение направления перемещения @@ -160,53 +172,53 @@ public class DrawningArtillery Brush grayBrush = new SolidBrush(Color.Gray); Brush blackBrush = new SolidBrush(Color.Black); //тело - g.FillRectangle(additionalBrush, _startPosX.Value, _startPosY.Value + 40, 110, 20); + g.FillRectangle(brush, _startPosX.Value, _startPosY.Value + 40, 110, 20); g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 40, 110, 20); //башня - g.FillRectangle(additionalBrush, _startPosX.Value+30, _startPosY.Value+20,50,20); + g.FillRectangle(brush, _startPosX.Value+30, _startPosY.Value+20,50,20); g.DrawRectangle(pen, _startPosX.Value+30, _startPosY.Value + 20, 50, 20); //ходовая //основа g.DrawEllipse(pen, _startPosX.Value, _startPosY.Value + 50, 110, 20); g.FillEllipse(grayBrush, _startPosX.Value, _startPosY.Value + 50, 110, 20); - //1-e + //1-й g.DrawEllipse(pen, _startPosX.Value + 25, _startPosY.Value + 58, 11, 11); g.FillEllipse(blackBrush, _startPosX.Value + 25, _startPosY.Value + 58, 11, 11); - //2-ое + //2-й g.DrawEllipse(pen, _startPosX.Value + 40, _startPosY.Value + 58, 11, 11); g.FillEllipse(blackBrush, _startPosX.Value + 40, _startPosY.Value + 58, 11, 11); - //3-ее + //3-й g.DrawEllipse(pen, _startPosX.Value + 55, _startPosY.Value + 58, 11, 11); g.FillEllipse(blackBrush, _startPosX.Value + 55, _startPosY.Value + 58, 11, 11); - //4-ое + //4-й g.DrawEllipse(pen, _startPosX.Value + 70, _startPosY.Value + 58, 11, 11); g.FillEllipse(blackBrush, _startPosX.Value + 70, _startPosY.Value + 58, 11, 11); - //5-ое + //5-ЛевБол g.DrawEllipse(pen, _startPosX.Value + 90, _startPosY.Value + 52, 15, 15); g.FillEllipse(blackBrush, _startPosX.Value + 90, _startPosY.Value + 52, 15, 15); - //6-ое + //6-ПравБол g.DrawEllipse(pen, _startPosX.Value + 7, _startPosY.Value + 52, 15, 15); g.FillEllipse(blackBrush, _startPosX.Value + 7, _startPosY.Value + 52, 15, 15); //орудие if (EntityArtillery.Cannon) { - g.FillRectangle(brush, _startPosX.Value+80, _startPosY.Value + 25, 50, 5); + g.FillRectangle(additionalBrush, _startPosX.Value+80, _startPosY.Value + 25, 50, 5); g.DrawRectangle(pen, _startPosX.Value+80, _startPosY.Value + 25, 50, 5); } //установка if (EntityArtillery.Cannon) { //колонна - g.FillRectangle(brush, _startPosX.Value +5, _startPosY.Value + 10, 5, 30); + g.FillRectangle(additionalBrush, _startPosX.Value +5, _startPosY.Value + 10, 5, 30); g.DrawRectangle(pen, _startPosX.Value +5, _startPosY.Value + 10, 5, 30); //контейнер - g.FillRectangle(brush, _startPosX.Value + 3, _startPosY.Value + 5, 50, 13); + g.FillRectangle(additionalBrush, _startPosX.Value + 3, _startPosY.Value + 5, 50, 13); g.DrawRectangle(pen, _startPosX.Value + 3, _startPosY.Value + 5, 50, 13); //ракеты g.DrawRectangle(pen, _startPosX.Value + 52, _startPosY.Value + 5, 10, 3); diff --git a/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/EntityArtillery.cs b/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/EntityArtillery.cs index c0c3f0d..1aa0109 100644 --- a/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/EntityArtillery.cs +++ b/SelfPropelledArtilleryUnit/SelfPropelledArtilleryUnit/EntityArtillery.cs @@ -1,6 +1,6 @@ namespace SelfPropelledArtilleryUnit; /// -/// Класс-сущность "Спортивный автомобиль" +/// Класс-сущность "САУ" /// @@ -23,11 +23,11 @@ public class EntityArtillery /// public Color AdditionalColor { get; private set; } /// - /// Признак (опция) наличия обвеса + /// Признак (опция) наличия пушки /// public bool Cannon { get; private set; } /// - /// Признак (опция) наличия антикрыла + /// Признак (опция) наличия залповой установки /// public bool Rocket { get; private set; } @@ -42,9 +42,9 @@ public class EntityArtillery /// Вес автомобиля /// Основной цвет /// Дополнительный цвет - /// Признак наличия обвеса - /// Признак наличия антикрыла - /// Признак наличия гоночной полосы + /// Признак наличия пушки + /// Признак наличия залповой установки + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool cannon, bool rocket) {