diff --git a/ProjectCatamaran/ProjectCatamaran/DirectionType.cs b/ProjectCatamaran/ProjectCatamaran/Drawnings/DirectionType.cs similarity index 91% rename from ProjectCatamaran/ProjectCatamaran/DirectionType.cs rename to ProjectCatamaran/ProjectCatamaran/Drawnings/DirectionType.cs index 18ae55c..6d2f75e 100644 --- a/ProjectCatamaran/ProjectCatamaran/DirectionType.cs +++ b/ProjectCatamaran/ProjectCatamaran/Drawnings/DirectionType.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ProjectCatamaran; +namespace ProjectCatamaran.Drawnings; public enum DirectionType { diff --git a/ProjectCatamaran/ProjectCatamaran/Drawnings/DrawningCatamaran.cs b/ProjectCatamaran/ProjectCatamaran/Drawnings/DrawningCatamaran.cs new file mode 100644 index 0000000..4eb33a4 --- /dev/null +++ b/ProjectCatamaran/ProjectCatamaran/Drawnings/DrawningCatamaran.cs @@ -0,0 +1,60 @@ +using ProjectCatamaran.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCatamaran.Drawnings; +/// +/// класс отвечающиай за перемещение и отрисовку +/// +public class DrawningCatamaran : DrawningCatamaranBase +{ + /// + /// Конструктор + /// + /// Скорость + /// Вес катера + /// Основной цвет + /// Дополнительный цвет(для опциональных элементов) + /// Признак (опция) наличие плавников + /// Признак (опция) наличие парус + public DrawningCatamaran(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool sail) : + base(65,40) + { + EntityCatamaranBase = new EntityCatamaran(speed, weight, bodyColor, additionalColor, floats, sail); + } + + public override void DrawTransport(Graphics g) + { + if (EntityCatamaranBase == null || EntityCatamaranBase is not EntityCatamaran catamaran || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + _startPosX += 5; + _startPosY += 15; + base.DrawTransport(g); + _startPosX -= 5; + _startPosY -= 15; + Brush brFloatsAndSail = new SolidBrush(catamaran.AdditionalColor); + //плавники + if (catamaran.Floats) + { + g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 10, 45, 5); + g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 35, 45, 5); + } + // парус + if (catamaran.Sail) + { + Point[] sailFigure = + { + new Point(_startPosX.Value + 25,_startPosY.Value + 25), + new Point(_startPosX.Value + 35 ,_startPosY.Value + 25), + new Point(_startPosX.Value + 25,_startPosY.Value), + }; + g.FillPolygon(brFloatsAndSail, sailFigure); + } + } +} \ No newline at end of file diff --git a/ProjectCatamaran/ProjectCatamaran/DrawningCatamaran.cs b/ProjectCatamaran/ProjectCatamaran/Drawnings/DrawningCatamaranBase.cs similarity index 54% rename from ProjectCatamaran/ProjectCatamaran/DrawningCatamaran.cs rename to ProjectCatamaran/ProjectCatamaran/Drawnings/DrawningCatamaranBase.cs index 6266ca6..77c1556 100644 --- a/ProjectCatamaran/ProjectCatamaran/DrawningCatamaran.cs +++ b/ProjectCatamaran/ProjectCatamaran/Drawnings/DrawningCatamaranBase.cs @@ -1,20 +1,18 @@ -using ProjectCatamaran; +using ProjectCatamaran.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ProjectCatamaran; -/// -/// класс отвечающиай за перемещение и отрисовку -/// -public class DrawningCatamaran +namespace ProjectCatamaran.Drawnings; +public class DrawningCatamaranBase { + /// /// класс-сущность /// - public EntityCatamaran? EntityCatamaran { get; private set; } + public EntityCatamaranBase? EntityCatamaranBase { get; protected set; } /// /// ширина окна /// @@ -26,39 +24,52 @@ public class DrawningCatamaran /// /// Левая координата прорисовки автопоезда /// - private int? _startPosX; + protected int? _startPosX; /// /// Верхняя координата прорисовки автопоезда /// - private int? _startPosY; + protected int? _startPosY; /// /// Ширина прорисовки катамарана /// - private readonly int _drawningCatamaranWidth = 65; + private readonly int _drawningCatamaranWidth = 60; /// /// Высота прорисовки катамарана /// - private readonly int _drawningCatamaranHeight = 40; + private readonly int _drawningCatamaranHeight = 25; /// - /// Инициализация полей обьекта-класса спортивного автомобиля + /// пустой конструктор /// - /// Скорость - /// Вес катера - /// Основной цвет - /// Дополнительный цвет(для опциональных элементов) - /// Признак (опция) наличие плавников - /// Признак (опция) наличие парус - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool brush) + private DrawningCatamaranBase() { - EntityCatamaran = new EntityCatamaran(); - EntityCatamaran.Init(speed, weight, bodyColor, additionalColor, floats, brush); - _pictureWidth = null; _pictureHeight = null; _startPosX = null; _startPosY = null; } /// + /// Конструктор + /// + /// Скорость + /// Вес катера + /// Основной цвет + public DrawningCatamaranBase(int speed, double weight, Color bodyColor) : this() + { + EntityCatamaranBase = new EntityCatamaranBase(speed, weight, bodyColor); + + } + /// + /// Конструктор + /// + /// Ширина катера + /// высота катера + public DrawningCatamaranBase(int drawningCatamaranWidth, int drawningCatamaranHeight) : this() + { + _drawningCatamaranWidth = drawningCatamaranWidth; + _drawningCatamaranHeight = drawningCatamaranHeight; + + } + /// /// установка границ поля /// /// ширина @@ -101,34 +112,34 @@ public class DrawningCatamaran /// true - перемещение выполнено , false - перемещение невозможно public bool MoveTransport(DirectionType direction) { - if (EntityCatamaran == null || !_startPosX.HasValue || !_startPosY.HasValue) + if (EntityCatamaranBase == null || !_startPosX.HasValue || !_startPosY.HasValue) { return false; } switch (direction) { case DirectionType.Left: - if (_startPosX.Value - EntityCatamaran.Step > 0) + if (_startPosX.Value - EntityCatamaranBase.Step > 0) { - _startPosX -= (int)EntityCatamaran.Step; + _startPosX -= (int)EntityCatamaranBase.Step; } return true; case DirectionType.Up: - if (_startPosY.Value - EntityCatamaran.Step > 0) + if (_startPosY.Value - EntityCatamaranBase.Step > 0) { - _startPosY -= (int)EntityCatamaran.Step; + _startPosY -= (int)EntityCatamaranBase.Step; } return true; case DirectionType.Right: - if (_startPosX.Value + (int)EntityCatamaran.Step + _drawningCatamaranWidth <= _pictureWidth) + if (_startPosX.Value + (int)EntityCatamaranBase.Step + _drawningCatamaranWidth <= _pictureWidth) { - _startPosX += (int)EntityCatamaran.Step; + _startPosX += (int)EntityCatamaranBase.Step; } return true; case DirectionType.Down: - if (_startPosY.Value + (int)EntityCatamaran.Step + _drawningCatamaranHeight <= _pictureHeight) + if (_startPosY.Value + (int)EntityCatamaranBase.Step + _drawningCatamaranHeight <= _pictureHeight) { - _startPosY += (int)EntityCatamaran.Step; + _startPosY += (int)EntityCatamaranBase.Step; } return true; default: @@ -139,42 +150,26 @@ public class DrawningCatamaran /// отрисовка /// /// - public void DrawTransport(Graphics g) + public virtual void DrawTransport(Graphics g) { - if (EntityCatamaran == null || !_startPosX.HasValue || !_startPosY.HasValue) + if (EntityCatamaranBase == null || !_startPosX.HasValue || !_startPosY.HasValue) { return; } - Brush brBody = new SolidBrush(EntityCatamaran.BodyColor); - Brush brFloatsAndSail = new SolidBrush(EntityCatamaran.AdditionalColor); - g.FillRectangle(brBody, _startPosX.Value + 5, _startPosY.Value + 15, 40, 20); + Brush brBody = new SolidBrush(EntityCatamaranBase.BodyColor); + + g.FillRectangle(brBody, _startPosX.Value, _startPosY.Value, 40, 20); Point[] triangle = { - new Point(_startPosX.Value + 45,_startPosY.Value + 15), - new Point(_startPosX.Value + 65,_startPosY.Value + 25), - new Point(_startPosX.Value + 45,_startPosY.Value + 35), + new Point(_startPosX.Value + 40,_startPosY.Value), + new Point(_startPosX.Value + 60,_startPosY.Value + 10), + new Point(_startPosX.Value + 40,_startPosY.Value + 20), }; g.FillPolygon(brBody, triangle); - g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 12, _startPosY.Value + 19, 23, 10); - //плавники - if (EntityCatamaran.Floats) - { - g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 10, 45, 5); - g.FillRectangle(brFloatsAndSail, _startPosX.Value, _startPosY.Value + 35, 45, 5); - } - // парус - if (EntityCatamaran.Sail) - { - Point[] sailFigure = - { - new Point(_startPosX.Value + 25,_startPosY.Value + 25), - new Point(_startPosX.Value + 35 ,_startPosY.Value + 25), - new Point(_startPosX.Value + 25,_startPosY.Value), - }; - g.FillPolygon(brFloatsAndSail, sailFigure); - } + g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 7, _startPosY.Value + 4, 23, 10); + } +} -} \ No newline at end of file diff --git a/ProjectCatamaran/ProjectCatamaran/EntityCatamaran.cs b/ProjectCatamaran/ProjectCatamaran/Entities/EntityCatamaran.cs similarity index 63% rename from ProjectCatamaran/ProjectCatamaran/EntityCatamaran.cs rename to ProjectCatamaran/ProjectCatamaran/Entities/EntityCatamaran.cs index afceb4b..022216d 100644 --- a/ProjectCatamaran/ProjectCatamaran/EntityCatamaran.cs +++ b/ProjectCatamaran/ProjectCatamaran/Entities/EntityCatamaran.cs @@ -1,21 +1,9 @@ -namespace ProjectCatamaran; +namespace ProjectCatamaran.Entities; /// -/// Класс-сущность "Авто поезд" +/// Класс-сущность "Катамарана" /// -public class EntityCatamaran +public class EntityCatamaran : EntityCatamaranBase { - /// - /// Скорость - /// - public int Speed { get; set; } - /// - /// Вес авто - /// - public double Weight { get; set; } - /// - /// Основной цвет - /// - public Color BodyColor { get; private set; } /// /// Дополнительный цвет(для опциональных элементов) /// @@ -29,10 +17,6 @@ public class EntityCatamaran /// public bool Sail { get; private set; } /// - /// Шаг перемещения - /// - public double Step => Speed * 100 / Weight; - /// /// Инициализация полей обьекта-класса спортивного автомобиля /// /// Скорость @@ -41,11 +25,9 @@ public class EntityCatamaran /// Дополнительный цвет(для опциональных элементов) /// Признак (опция) наличие плавников /// Признак (опция) наличие паруса - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool sail) + public EntityCatamaran(int speed, double weight, Color bodyColor, Color additionalColor, bool floats, bool sail) + : base(speed,weight,bodyColor) { - Speed = speed; - Weight = weight; - BodyColor = bodyColor; AdditionalColor = additionalColor; Floats = floats; Sail = sail; diff --git a/ProjectCatamaran/ProjectCatamaran/Entities/EntityCatamaranBase.cs b/ProjectCatamaran/ProjectCatamaran/Entities/EntityCatamaranBase.cs new file mode 100644 index 0000000..22064b0 --- /dev/null +++ b/ProjectCatamaran/ProjectCatamaran/Entities/EntityCatamaranBase.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectCatamaran.Entities; +/// +/// класс-сущность "обычный катамаран" +/// +public class EntityCatamaranBase +{ + /// + /// Скорость + /// + public int Speed { get; set; } + /// + /// Вес авто + /// + public double Weight { get; set; } + /// + /// Основной цвет + /// + public Color BodyColor { get; private set; } + /// + /// Шаг перемещения + /// + public double Step => Speed * 100 / Weight; + + /// + /// конструктор сущности + /// + /// Скорость + /// Вес авто + /// Основной цвет + public EntityCatamaranBase(int speed, double weight, Color bodyColor) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + + } +} diff --git a/ProjectCatamaran/ProjectCatamaran/FormCatamaran.Designer.cs b/ProjectCatamaran/ProjectCatamaran/FormCatamaran.Designer.cs index 12e51bf..4107701 100644 --- a/ProjectCatamaran/ProjectCatamaran/FormCatamaran.Designer.cs +++ b/ProjectCatamaran/ProjectCatamaran/FormCatamaran.Designer.cs @@ -34,6 +34,7 @@ buttonRight = new Button(); buttonLeft = new Button(); buttonDown = new Button(); + buttonCreateCatamaranBase = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxCatamaran).BeginInit(); SuspendLayout(); // @@ -49,11 +50,11 @@ // buttonCreateCatamaran // buttonCreateCatamaran.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonCreateCatamaran.Location = new Point(12, 406); + buttonCreateCatamaran.Location = new Point(12, 402); buttonCreateCatamaran.Name = "buttonCreateCatamaran"; - buttonCreateCatamaran.Size = new Size(75, 23); + buttonCreateCatamaran.Size = new Size(166, 40); buttonCreateCatamaran.TabIndex = 1; - buttonCreateCatamaran.Text = "Создать"; + buttonCreateCatamaran.Text = "Создать катамаран"; buttonCreateCatamaran.UseVisualStyleBackColor = true; buttonCreateCatamaran.Click += ButtonCreateCatamaran_Click; // @@ -105,11 +106,23 @@ buttonDown.UseVisualStyleBackColor = true; buttonDown.Click += ButtonMove_Click; // + // buttonCreateCatamaranBase + // + buttonCreateCatamaranBase.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCreateCatamaranBase.Location = new Point(184, 402); + buttonCreateCatamaranBase.Name = "buttonCreateCatamaranBase"; + buttonCreateCatamaranBase.Size = new Size(166, 40); + buttonCreateCatamaranBase.TabIndex = 6; + buttonCreateCatamaranBase.Text = "Создать базовый катамаран"; + buttonCreateCatamaranBase.UseVisualStyleBackColor = true; + buttonCreateCatamaranBase.Click += ButtonCreateCatamaranBase_Click; + // // FormCatamaran // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); + Controls.Add(buttonCreateCatamaranBase); Controls.Add(buttonDown); Controls.Add(buttonLeft); Controls.Add(buttonRight); @@ -130,5 +143,6 @@ private Button buttonRight; private Button buttonLeft; private Button buttonDown; + private Button buttonCreateCatamaranBase; } } \ No newline at end of file diff --git a/ProjectCatamaran/ProjectCatamaran/FormCatamaran.cs b/ProjectCatamaran/ProjectCatamaran/FormCatamaran.cs index 1560145..ba6fb78 100644 --- a/ProjectCatamaran/ProjectCatamaran/FormCatamaran.cs +++ b/ProjectCatamaran/ProjectCatamaran/FormCatamaran.cs @@ -1,8 +1,9 @@ -using ProjectCatamaran; +using ProjectCatamaran.Drawnings; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; +using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; @@ -13,7 +14,7 @@ namespace ProjectCatamaran { public partial class FormCatamaran : Form { - private DrawningCatamaran? _drawningCatamaran; + private DrawningCatamaranBase? _drawningCatamaranBase; public FormCatamaran() { InitializeComponent(); @@ -21,19 +22,19 @@ namespace ProjectCatamaran private void Draw() { - if (_drawningCatamaran == null) + if (_drawningCatamaranBase == null) { return; } Bitmap bmp = new(pictureBoxCatamaran.Width, pictureBoxCatamaran.Height); Graphics gr = Graphics.FromImage(bmp); - _drawningCatamaran.DrawTransport(gr); + _drawningCatamaranBase.DrawTransport(gr); pictureBoxCatamaran.Image = bmp; } - + private void ButtonMove_Click(object sender, EventArgs e) { - if (_drawningCatamaran == null) + if (_drawningCatamaranBase == null) { return; } @@ -42,16 +43,16 @@ namespace ProjectCatamaran switch (name) { case "buttonUp": - result = _drawningCatamaran.MoveTransport(DirectionType.Up); + result = _drawningCatamaranBase.MoveTransport(DirectionType.Up); break; case "buttonDown": - result = _drawningCatamaran.MoveTransport(DirectionType.Down); + result = _drawningCatamaranBase.MoveTransport(DirectionType.Down); break; case "buttonLeft": - result = _drawningCatamaran.MoveTransport(DirectionType.Left); + result = _drawningCatamaranBase.MoveTransport(DirectionType.Left); break; case "buttonRight": - result = _drawningCatamaran.MoveTransport(DirectionType.Right); + result = _drawningCatamaranBase.MoveTransport(DirectionType.Right); break; } if (result) @@ -60,18 +61,37 @@ namespace ProjectCatamaran } } + private void CreateObject(string type) + { + Random random = new(); + switch (type) + { + case nameof(DrawningCatamaranBase): + _drawningCatamaranBase = new DrawningCatamaranBase(random.Next(100, 300), random.Next(1000, 3000), + Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256))); + break; + case nameof(DrawningCatamaran): + _drawningCatamaranBase = new DrawningCatamaran(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))); + break; + default: + return; + } + _drawningCatamaranBase.SetPictureSize(pictureBoxCatamaran.Width, pictureBoxCatamaran.Height); + _drawningCatamaranBase.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + + } private void ButtonCreateCatamaran_Click(object sender, EventArgs e) { - Random random = new Random(); - _drawningCatamaran = new DrawningCatamaran(); - _drawningCatamaran.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))); + CreateObject(nameof(DrawningCatamaran)); + } - _drawningCatamaran.SetPictureSize(pictureBoxCatamaran.Width, pictureBoxCatamaran.Height); - _drawningCatamaran.SetPosition(random.Next(10, 100), random.Next(10, 100)); - Draw(); + private void ButtonCreateCatamaranBase_Click(object sender, EventArgs e) + { + CreateObject(nameof(DrawningCatamaranBase)); } } } \ No newline at end of file