From 020699ff0db9d63d33c23ca8eca46c2e98823072 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 21 Feb 2024 22:35:22 +0400 Subject: [PATCH 01/10] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectAircraftCarrier1.csproj | 26 ++ .../ProjectAircraftCarrier1.sln | 25 ++ .../ProjectAircraftCarrier_.sln | 25 ++ .../ProjectAircraftCarrier_/DirectionType.cs | 27 ++ .../DrawningAircraftCarrier.cs | 248 ++++++++++++++++++ .../EntityAircraftCarrier.cs | 68 +++++ .../FormAircraftCarrier.Designer.cs | 134 ++++++++++ .../FormAircraftCarrier.cs | 97 +++++++ .../FormAircraftCarrier.resx | 120 +++++++++ .../ProjectAircraftCarrier_/Program.cs | 17 ++ .../ProjectAircraftCarrier_.csproj | 26 ++ .../Properties/Resources.Designer.cs | 103 ++++++++ .../Properties/Resources.resx | 133 ++++++++++ .../Resources/arrowDown.png | Bin 0 -> 6300 bytes .../Resources/arrowLeft.png | Bin 0 -> 6070 bytes .../Resources/arrowRight.png | Bin 0 -> 5859 bytes .../Resources/arrowUp.png | Bin 0 -> 6562 bytes 17 files changed, 1049 insertions(+) create mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj create mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier1.sln create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_.sln create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/DirectionType.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/EntityAircraftCarrier.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.resx create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.Designer.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.resx create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowDown.png create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowLeft.png create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowRight.png create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowUp.png diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj new file mode 100644 index 0000000..af03d74 --- /dev/null +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj @@ -0,0 +1,26 @@ + + + + WinExe + net8.0-windows + enable + true + enable + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier1.sln b/ProjectAircraftCarrier/ProjectAircraftCarrier1.sln new file mode 100644 index 0000000..0eb21b9 --- /dev/null +++ b/ProjectAircraftCarrier/ProjectAircraftCarrier1.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34525.116 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectAircraftCarrier1", "ProjectAircraftCarrier\ProjectAircraftCarrier1.csproj", "{A871246D-86F2-4370-B644-24A99BFF6783}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A871246D-86F2-4370-B644-24A99BFF6783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A871246D-86F2-4370-B644-24A99BFF6783}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A871246D-86F2-4370-B644-24A99BFF6783}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A871246D-86F2-4370-B644-24A99BFF6783}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {7F4937DC-FEE0-4D3B-8062-6479A5B07CE4} + EndGlobalSection +EndGlobal diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_.sln b/ProjectAircraftCarrier_/ProjectAircraftCarrier_.sln new file mode 100644 index 0000000..6a256d3 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34601.278 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectAircraftCarrier_", "ProjectAircraftCarrier_\ProjectAircraftCarrier_.csproj", "{9D47B714-02FD-4D16-8FD1-7CC43F92533E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9D47B714-02FD-4D16-8FD1-7CC43F92533E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D47B714-02FD-4D16-8FD1-7CC43F92533E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D47B714-02FD-4D16-8FD1-7CC43F92533E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D47B714-02FD-4D16-8FD1-7CC43F92533E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {0384B21C-1A79-4855-A419-87A2504E0670} + EndGlobalSection +EndGlobal diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DirectionType.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DirectionType.cs new file mode 100644 index 0000000..387517b --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DirectionType.cs @@ -0,0 +1,27 @@ +namespace ProjectAircraftCarrier; + +/// +/// Направление перемещения +/// +public enum DirectionType +{ + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4 +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs new file mode 100644 index 0000000..064b101 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs @@ -0,0 +1,248 @@ +namespace ProjectAircraftCarrier; + +internal class DrawningAircraftCarrier +{ + /// + /// Класс-сущность + /// + public EntityAircraftCarrier? EntityAircraftCarrier { get; private set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки авианосца + /// + private int? _startPosX; + + /// + /// Верхняя координата прорисовки авианосца + /// + private int? _startPosY; + + /// + /// Ширина прорисовки авианосца + /// + private readonly int _drawningAircraftCarrierWidth = 140; + + /// + /// Высота прорисовки авианосца + /// + private readonly int _drawningAircraftCarrierHeight = 50; + + /// + /// Инициализация полей объекта-класса авианосца + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Палуба для взлета самолетов + /// Рубка управления + /// Истребитель + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) + { + EntityAircraftCarrier = new EntityAircraftCarrier(); + EntityAircraftCarrier.Init(speed, weight, bodyColor, additionalColor, deckForAircraftTakeOff, controlCabin, fighterJet); + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + // TODO проверка, что объект "влезает" в размеры поля + // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена + if (_drawningAircraftCarrierWidth <= width && _drawningAircraftCarrierHeight <= height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX.HasValue && _startPosY.HasValue) + { + if (_startPosX + _drawningAircraftCarrierWidth > width) + { + _startPosX = width - _drawningAircraftCarrierWidth; + } + + if (_startPosY + _drawningAircraftCarrierHeight > height) + { + _startPosY = height - _drawningAircraftCarrierHeight; + } + } + return true; + } + return false; + } + + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы + // то надо изменить координаты, чтобы он оставался в этих границах + _startPosX = x; + _startPosY = y; + if (x < 0) + { + _startPosX = 0; + } + + if (y < 0) + { + _startPosY = 0; + } + + if (x + _drawningAircraftCarrierWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _drawningAircraftCarrierWidth; + } + + if (y + _drawningAircraftCarrierHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _drawningAircraftCarrierHeight; + } + } + + public bool MoveTransport(DirectionType direction) + { + if (EntityAircraftCarrier == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + // Влево + case DirectionType.Left: + if (_startPosX.Value - EntityAircraftCarrier.Step > 0) + { + _startPosX -= (int)EntityAircraftCarrier.Step; + } + return true; + // Вверх + case DirectionType.Up: + if (_startPosY.Value - EntityAircraftCarrier.Step > 0) + { + _startPosY -= (int)EntityAircraftCarrier.Step; + } + return true; + // Вправо + case DirectionType.Right: + //TODO прописать логику сдвига в право + if (_startPosX.Value + _drawningAircraftCarrierWidth + EntityAircraftCarrier.Step < _pictureWidth.Value) + { + _startPosX += (int)EntityAircraftCarrier.Step; + } + return true; + // Вниз + case DirectionType.Down: + //TODO прописать логику сдвига в вниз + if (_startPosY.Value + _drawningAircraftCarrierHeight + EntityAircraftCarrier.Step < _pictureHeight.Value) + { + _startPosY += (int)EntityAircraftCarrier.Step; + } + return true; + default: + return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public void DrawTransport(Graphics g) + { + if (EntityAircraftCarrier == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(EntityAircraftCarrier.AdditionalColor); + Pen additionalPen = new(EntityAircraftCarrier.AdditionalColor, 2); + + // Границы авианосца + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 100, 50); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 5, 15); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 30, 5, 15); + + Point[] points = + { + new Point(_startPosX.Value + 105, _startPosY.Value), + new Point(_startPosX.Value + 120, _startPosY.Value + 15), + new Point(_startPosX.Value + 140, _startPosY.Value + 20), + new Point(_startPosX.Value + 140, _startPosY.Value + 30), + new Point(_startPosX.Value + 120, _startPosY.Value + 35), + new Point(_startPosX.Value + 105, _startPosY.Value + 50), + + }; + g.DrawPolygon(pen, points); + + // Палуба + Brush br = new SolidBrush(EntityAircraftCarrier.BodyColor); + Brush brBlack = new SolidBrush(Color.Black); + g.FillRectangle(br, _startPosX.Value + 6, _startPosY.Value + 1, 100, 49); + g.FillPolygon(br, points); + g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 5, 5, 15); + g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 30, 5, 15); + + // Палуба для взлёта самолётов + if (EntityAircraftCarrier.DeckForAircraftTakeOff) + { + Pen penYellow = new(Color.Yellow); + + Point[] addPoints = + { + new Point(_startPosX.Value + 5, _startPosY.Value + 10), + new Point(_startPosX.Value + 105, _startPosY.Value), + new Point(_startPosX.Value + 120, _startPosY.Value + 15), + new Point(_startPosX.Value + 5, _startPosY.Value + 30), + + }; + g.DrawPolygon(pen, addPoints); + g.FillPolygon(additionalBrush, addPoints); + // Разметка + g.DrawLine(penYellow, _startPosX.Value + 10, _startPosY.Value + 20, _startPosX.Value + 105, _startPosY.Value + 8); + } + + // Рубка + if (EntityAircraftCarrier.ControlCabin) + { + g.DrawEllipse(pen, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10); + g.FillEllipse(additionalBrush, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10); + } + + // Истребитель + if (EntityAircraftCarrier.FighterJet) + { + g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 27, _startPosX.Value + 95, _startPosY.Value + 47); + g.DrawLine(additionalPen, _startPosX.Value + 85, _startPosY.Value + 42, _startPosX.Value + 95, _startPosY.Value + 32); + g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 32, _startPosX.Value + 105, _startPosY.Value + 42); + g.DrawLine(additionalPen, _startPosX.Value + 90, _startPosY.Value + 46, _startPosX.Value + 95, _startPosY.Value + 41); + g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 41, _startPosX.Value + 100, _startPosY.Value + 46); + } + } +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/EntityAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/EntityAircraftCarrier.cs new file mode 100644 index 0000000..d4e84bf --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/EntityAircraftCarrier.cs @@ -0,0 +1,68 @@ +namespace ProjectAircraftCarrier; + +/// +/// Класс-сущность "Авианосец" +/// +public class EntityAircraftCarrier +{ + /// + /// Скорость + /// + 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 DeckForAircraftTakeOff { get; private set; } + + /// + /// Признак (опция) наличия рубки управления + /// + public bool ControlCabin { get; private set; } + + /// + /// Признак (опция) наличия истребителя + /// + public bool FighterJet { get; private set; } + + /// + /// Шаг перемещения авианосца + /// + public double Step => Speed * 100 / Weight; + + /// + /// Инициализация полей объекта-класса авианосца + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Признак наличия рубки управления + /// Признак наличия рубки управления + /// Признак наличия истребителя + public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + AdditionalColor = additionalColor; + DeckForAircraftTakeOff = deckForAircraftTakeOff; + ControlCabin = controlCabin; + FighterJet = fighterJet; + } +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs new file mode 100644 index 0000000..910ee0a --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs @@ -0,0 +1,134 @@ +namespace ProjectAircraftCarrier_ +{ + partial class FormAircraftCarrier + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + pictureBoxAircraftCarrier = new PictureBox(); + buttonCreateAircraftCarrier = new Button(); + buttonLeft = new Button(); + buttonDown = new Button(); + buttonRight = new Button(); + buttonUp = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxAircraftCarrier).BeginInit(); + SuspendLayout(); + // + // pictureBoxAircraftCarrier + // + pictureBoxAircraftCarrier.Dock = DockStyle.Fill; + pictureBoxAircraftCarrier.Location = new Point(0, 0); + pictureBoxAircraftCarrier.Name = "pictureBoxAircraftCarrier"; + pictureBoxAircraftCarrier.Size = new Size(1167, 653); + pictureBoxAircraftCarrier.TabIndex = 0; + pictureBoxAircraftCarrier.TabStop = false; + // + // buttonCreateAircraftCarrier + // + buttonCreateAircraftCarrier.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateAircraftCarrier.Location = new Point(12, 601); + buttonCreateAircraftCarrier.Name = "buttonCreateAircraftCarrier"; + buttonCreateAircraftCarrier.Size = new Size(131, 40); + buttonCreateAircraftCarrier.TabIndex = 1; + buttonCreateAircraftCarrier.Text = "Создать"; + buttonCreateAircraftCarrier.UseVisualStyleBackColor = true; + buttonCreateAircraftCarrier.Click += ButtonCreateAircraftCarrier_Click; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; + buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; + buttonLeft.Location = new Point(1030, 606); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(35, 35); + buttonLeft.TabIndex = 2; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = Properties.Resources.arrowDown; + buttonDown.BackgroundImageLayout = ImageLayout.Stretch; + buttonDown.Location = new Point(1071, 606); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(35, 35); + buttonDown.TabIndex = 3; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = Properties.Resources.arrowRight; + buttonRight.BackgroundImageLayout = ImageLayout.Stretch; + buttonRight.Location = new Point(1112, 606); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(35, 35); + buttonRight.TabIndex = 4; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = Properties.Resources.arrowUp; + buttonUp.BackgroundImageLayout = ImageLayout.Stretch; + buttonUp.Location = new Point(1071, 565); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(35, 35); + buttonUp.TabIndex = 5; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // FormAircraftCarrier + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1167, 653); + Controls.Add(buttonUp); + Controls.Add(buttonRight); + Controls.Add(buttonDown); + Controls.Add(buttonLeft); + Controls.Add(buttonCreateAircraftCarrier); + Controls.Add(pictureBoxAircraftCarrier); + Name = "FormAircraftCarrier"; + Text = "Авианосец"; + ((System.ComponentModel.ISupportInitialize)pictureBoxAircraftCarrier).EndInit(); + ResumeLayout(false); + } + + #endregion + + private PictureBox pictureBoxAircraftCarrier; + private Button buttonCreateAircraftCarrier; + private Button buttonLeft; + private Button buttonDown; + private Button buttonRight; + private Button buttonUp; + } +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs new file mode 100644 index 0000000..df50c97 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs @@ -0,0 +1,97 @@ +using ProjectAircraftCarrier; +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 ProjectAircraftCarrier_ +{ + public partial class FormAircraftCarrier : Form + { + /// + /// Поле-объект для прорисовки объекта + /// + private DrawningAircraftCarrier? _drawningAircraftCarrier; + public FormAircraftCarrier() + { + InitializeComponent(); + } + + /// + /// Метод прорисовки машины + /// + private void Draw() + { + if (_drawningAircraftCarrier == null) + { + return; + } + + Bitmap bmp = new(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningAircraftCarrier.DrawTransport(gr); + pictureBoxAircraftCarrier.Image = bmp; + + } + + /// + /// Обработка нажатия кнопки создать + /// + /// + /// + private void ButtonCreateAircraftCarrier_Click(object sender, EventArgs e) + { + Random random = new(); + _drawningAircraftCarrier = new DrawningAircraftCarrier(); + _drawningAircraftCarrier.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))); + _drawningAircraftCarrier.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); + _drawningAircraftCarrier.SetPosition(random.Next(10, 100), random.Next(10, 100)); + + Draw(); + } + + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningAircraftCarrier == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningAircraftCarrier.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningAircraftCarrier.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningAircraftCarrier.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningAircraftCarrier.MoveTransport(DirectionType.Right); + break; + } + + if (result) + { + Draw(); + } + } + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.resx b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs new file mode 100644 index 0000000..a84e56d --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs @@ -0,0 +1,17 @@ +namespace ProjectAircraftCarrier_ +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new FormAircraftCarrier()); + } + } +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj new file mode 100644 index 0000000..af03d74 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj @@ -0,0 +1,26 @@ + + + + WinExe + net8.0-windows + enable + true + enable + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.Designer.cs new file mode 100644 index 0000000..7d74f48 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectAircraftCarrier_.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProjectAircraftCarrier_.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowDown { + get { + object obj = ResourceManager.GetObject("arrowDown", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowLeft { + get { + object obj = ResourceManager.GetObject("arrowLeft", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowRight { + get { + object obj = ResourceManager.GetObject("arrowRight", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrowUp { + get { + object obj = ResourceManager.GetObject("arrowUp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.resx b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.resx new file mode 100644 index 0000000..dc6b4c5 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\arrowDown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowLeft.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowRight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\arrowUp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowDown.png b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..08436f421d014af3452c83267e9839d4aab3429d GIT binary patch literal 6300 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 literal 0 HcmV?d00001 diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowLeft.png b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..c8a7f4c7dec8cb216bfa2d3010869248feb52704 GIT binary patch literal 6070 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 O9kx7vsF>(+{l5T^PnrDy literal 0 HcmV?d00001 diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowRight.png b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Resources/arrowRight.png new file mode 100644 index 0000000000000000000000000000000000000000..bd0fe69bc1bb7c82dd500bc6e85dc0e22b42ef8f GIT binary patch literal 5859 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 cPw2-id^O%!wR&k2K(zPVln{z}w80q~RBmjD0& literal 0 HcmV?d00001 -- 2.25.1 From fa749643ec4dba31118816f52d2b542f26d95b83 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Tue, 5 Mar 2024 21:15:28 +0400 Subject: [PATCH 02/10] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=BE=D0=B4=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D0=B8=20=D0=B2=D0=B2=D0=BE=D0=B4=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DrawningAircraftCarrier.cs | 248 ------------------ .../{ => Drawnings}/DirectionType.cs | 2 +- .../Drawnings/DrawningAircraftCarrier.cs | 71 +++++ .../Drawnings/DrawningWarship.cs | 220 ++++++++++++++++ .../{ => Entities}/EntityAircraftCarrier.cs | 31 +-- .../Entities/EntityWarship.cs | 41 +++ .../FormAircraftCarrier.Designer.cs | 18 +- .../FormAircraftCarrier.cs | 186 +++++++------ 8 files changed, 457 insertions(+), 360 deletions(-) delete mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs rename ProjectAircraftCarrier_/ProjectAircraftCarrier_/{ => Drawnings}/DirectionType.cs (88%) create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs rename ProjectAircraftCarrier_/ProjectAircraftCarrier_/{ => Entities}/EntityAircraftCarrier.cs (63%) create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs deleted file mode 100644 index 064b101..0000000 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DrawningAircraftCarrier.cs +++ /dev/null @@ -1,248 +0,0 @@ -namespace ProjectAircraftCarrier; - -internal class DrawningAircraftCarrier -{ - /// - /// Класс-сущность - /// - public EntityAircraftCarrier? EntityAircraftCarrier { get; private set; } - - /// - /// Ширина окна - /// - private int? _pictureWidth; - - /// - /// Высота окна - /// - private int? _pictureHeight; - - /// - /// Левая координата прорисовки авианосца - /// - private int? _startPosX; - - /// - /// Верхняя координата прорисовки авианосца - /// - private int? _startPosY; - - /// - /// Ширина прорисовки авианосца - /// - private readonly int _drawningAircraftCarrierWidth = 140; - - /// - /// Высота прорисовки авианосца - /// - private readonly int _drawningAircraftCarrierHeight = 50; - - /// - /// Инициализация полей объекта-класса авианосца - /// - /// Скорость - /// Вес - /// Основной цвет - /// Дополнительный цвет - /// Палуба для взлета самолетов - /// Рубка управления - /// Истребитель - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) - { - EntityAircraftCarrier = new EntityAircraftCarrier(); - EntityAircraftCarrier.Init(speed, weight, bodyColor, additionalColor, deckForAircraftTakeOff, controlCabin, fighterJet); - _pictureWidth = null; - _pictureHeight = null; - _startPosX = null; - _startPosY = null; - } - - /// - /// Установка границ поля - /// - /// Ширина поля - /// Высота поля - /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах - public bool SetPictureSize(int width, int height) - { - // TODO проверка, что объект "влезает" в размеры поля - // если влезает, сохраняем границы и корректируем позицию объекта, если она была уже установлена - if (_drawningAircraftCarrierWidth <= width && _drawningAircraftCarrierHeight <= height) - { - _pictureWidth = width; - _pictureHeight = height; - if (_startPosX.HasValue && _startPosY.HasValue) - { - if (_startPosX + _drawningAircraftCarrierWidth > width) - { - _startPosX = width - _drawningAircraftCarrierWidth; - } - - if (_startPosY + _drawningAircraftCarrierHeight > height) - { - _startPosY = height - _drawningAircraftCarrierHeight; - } - } - return true; - } - return false; - } - - /// - /// Установка позиции - /// - /// Координата X - /// Координата Y - public void SetPosition(int x, int y) - { - if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) - { - return; - } - - // TODO если при установке объекта в эти координаты, он будет "выходить" за границы формы - // то надо изменить координаты, чтобы он оставался в этих границах - _startPosX = x; - _startPosY = y; - if (x < 0) - { - _startPosX = 0; - } - - if (y < 0) - { - _startPosY = 0; - } - - if (x + _drawningAircraftCarrierWidth > _pictureWidth) - { - _startPosX = _pictureWidth - _drawningAircraftCarrierWidth; - } - - if (y + _drawningAircraftCarrierHeight > _pictureHeight) - { - _startPosY = _pictureHeight - _drawningAircraftCarrierHeight; - } - } - - public bool MoveTransport(DirectionType direction) - { - if (EntityAircraftCarrier == null || !_startPosX.HasValue || !_startPosY.HasValue) - { - return false; - } - - switch (direction) - { - // Влево - case DirectionType.Left: - if (_startPosX.Value - EntityAircraftCarrier.Step > 0) - { - _startPosX -= (int)EntityAircraftCarrier.Step; - } - return true; - // Вверх - case DirectionType.Up: - if (_startPosY.Value - EntityAircraftCarrier.Step > 0) - { - _startPosY -= (int)EntityAircraftCarrier.Step; - } - return true; - // Вправо - case DirectionType.Right: - //TODO прописать логику сдвига в право - if (_startPosX.Value + _drawningAircraftCarrierWidth + EntityAircraftCarrier.Step < _pictureWidth.Value) - { - _startPosX += (int)EntityAircraftCarrier.Step; - } - return true; - // Вниз - case DirectionType.Down: - //TODO прописать логику сдвига в вниз - if (_startPosY.Value + _drawningAircraftCarrierHeight + EntityAircraftCarrier.Step < _pictureHeight.Value) - { - _startPosY += (int)EntityAircraftCarrier.Step; - } - return true; - default: - return false; - } - } - - /// - /// Прорисовка объекта - /// - /// - public void DrawTransport(Graphics g) - { - if (EntityAircraftCarrier == null || !_startPosX.HasValue || !_startPosY.HasValue) - { - return; - } - - Pen pen = new(Color.Black); - Brush additionalBrush = new SolidBrush(EntityAircraftCarrier.AdditionalColor); - Pen additionalPen = new(EntityAircraftCarrier.AdditionalColor, 2); - - // Границы авианосца - g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 100, 50); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 5, 15); - g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 30, 5, 15); - - Point[] points = - { - new Point(_startPosX.Value + 105, _startPosY.Value), - new Point(_startPosX.Value + 120, _startPosY.Value + 15), - new Point(_startPosX.Value + 140, _startPosY.Value + 20), - new Point(_startPosX.Value + 140, _startPosY.Value + 30), - new Point(_startPosX.Value + 120, _startPosY.Value + 35), - new Point(_startPosX.Value + 105, _startPosY.Value + 50), - - }; - g.DrawPolygon(pen, points); - - // Палуба - Brush br = new SolidBrush(EntityAircraftCarrier.BodyColor); - Brush brBlack = new SolidBrush(Color.Black); - g.FillRectangle(br, _startPosX.Value + 6, _startPosY.Value + 1, 100, 49); - g.FillPolygon(br, points); - g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 5, 5, 15); - g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 30, 5, 15); - - // Палуба для взлёта самолётов - if (EntityAircraftCarrier.DeckForAircraftTakeOff) - { - Pen penYellow = new(Color.Yellow); - - Point[] addPoints = - { - new Point(_startPosX.Value + 5, _startPosY.Value + 10), - new Point(_startPosX.Value + 105, _startPosY.Value), - new Point(_startPosX.Value + 120, _startPosY.Value + 15), - new Point(_startPosX.Value + 5, _startPosY.Value + 30), - - }; - g.DrawPolygon(pen, addPoints); - g.FillPolygon(additionalBrush, addPoints); - // Разметка - g.DrawLine(penYellow, _startPosX.Value + 10, _startPosY.Value + 20, _startPosX.Value + 105, _startPosY.Value + 8); - } - - // Рубка - if (EntityAircraftCarrier.ControlCabin) - { - g.DrawEllipse(pen, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10); - g.FillEllipse(additionalBrush, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10); - } - - // Истребитель - if (EntityAircraftCarrier.FighterJet) - { - g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 27, _startPosX.Value + 95, _startPosY.Value + 47); - g.DrawLine(additionalPen, _startPosX.Value + 85, _startPosY.Value + 42, _startPosX.Value + 95, _startPosY.Value + 32); - g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 32, _startPosX.Value + 105, _startPosY.Value + 42); - g.DrawLine(additionalPen, _startPosX.Value + 90, _startPosY.Value + 46, _startPosX.Value + 95, _startPosY.Value + 41); - g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 41, _startPosX.Value + 100, _startPosY.Value + 46); - } - } -} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DirectionType.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DirectionType.cs similarity index 88% rename from ProjectAircraftCarrier_/ProjectAircraftCarrier_/DirectionType.cs rename to ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DirectionType.cs index 387517b..3e099c8 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/DirectionType.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DirectionType.cs @@ -1,4 +1,4 @@ -namespace ProjectAircraftCarrier; +namespace ProjectAircraftCarrier_.Drawnings; /// /// Направление перемещения diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs new file mode 100644 index 0000000..7125bbf --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs @@ -0,0 +1,71 @@ +using ProjectAircraftCarrier_.Entities; + +namespace ProjectAircraftCarrier_.Drawnings; + +public class DrawningAircraftCarrier : DrawningWarship +{ + /// + /// Конструктор + /// + /// Скорость + /// Вес + /// Основной цвет + /// Дополнительный цвет + /// Палуба для взлета самолетов + /// Рубка управления + /// Истребитель + public DrawningAircraftCarrier(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) : base(140, 50) + { + EntityWarship = new EntityAircraftCarrier(speed, weight, bodyColor, additionalColor, deckForAircraftTakeOff, controlCabin, fighterJet); + } + + public override void DrawTransport(Graphics g) + { + if (EntityWarship == null || EntityWarship is not EntityAircraftCarrier aircraftCarrier || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + Brush additionalBrush = new SolidBrush(aircraftCarrier.AdditionalColor); + Pen additionalPen = new(aircraftCarrier.AdditionalColor, 2); + + // Палуба для взлёта самолётов + if (aircraftCarrier.DeckForAircraftTakeOff) + { + Pen penYellow = new(Color.Yellow); + + Point[] addPoints = + { + new Point(_startPosX.Value + 5, _startPosY.Value + 10), + new Point(_startPosX.Value + 105, _startPosY.Value), + new Point(_startPosX.Value + 120, _startPosY.Value + 15), + new Point(_startPosX.Value + 5, _startPosY.Value + 30), + + }; + g.DrawPolygon(pen, addPoints); + g.FillPolygon(additionalBrush, addPoints); + // Разметка + g.DrawLine(penYellow, _startPosX.Value + 10, _startPosY.Value + 20, _startPosX.Value + 105, _startPosY.Value + 8); + } + + // Рубка + if (aircraftCarrier.ControlCabin) + { + g.DrawEllipse(pen, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10); + g.FillEllipse(additionalBrush, _startPosX.Value + 40, _startPosY.Value + 35, 30, 10); + } + + // Истребитель + if (aircraftCarrier.FighterJet) + { + g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 27, _startPosX.Value + 95, _startPosY.Value + 47); + g.DrawLine(additionalPen, _startPosX.Value + 85, _startPosY.Value + 42, _startPosX.Value + 95, _startPosY.Value + 32); + g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 32, _startPosX.Value + 105, _startPosY.Value + 42); + g.DrawLine(additionalPen, _startPosX.Value + 90, _startPosY.Value + 46, _startPosX.Value + 95, _startPosY.Value + 41); + g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 41, _startPosX.Value + 100, _startPosY.Value + 46); + } + + base.DrawTransport(g); + } +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs new file mode 100644 index 0000000..975b80b --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs @@ -0,0 +1,220 @@ +using ProjectAircraftCarrier_.Entities; + +namespace ProjectAircraftCarrier_.Drawnings; + +public class DrawningWarship +{ + /// + /// Класс-сущность + /// + public EntityWarship? EntityWarship { get; protected set; } + + /// + /// Ширина окна + /// + private int? _pictureWidth; + + /// + /// Высота окна + /// + private int? _pictureHeight; + + /// + /// Левая координата прорисовки военного корабля + /// + protected int? _startPosX; + + /// + /// Верхняя координата прорисовки военного корабля + /// + protected int? _startPosY; + + /// + /// Ширина прорисовки военного корабля + /// + private readonly int _drawningWarshipWidth = 140; + + /// + /// Высота прорисовки военного корабля + /// + private readonly int _drawningWarshipHeight = 50; + + /// + /// Пустой конструктор + /// + private DrawningWarship() + { + _pictureWidth = null; + _pictureHeight = null; + _startPosX = null; + _startPosY = null; + } + + /// + /// Конструктор + /// + /// Скорость + /// Вес + /// Основной цвет + public DrawningWarship(int speed, double weight, Color bodyColor) : this() + { + EntityWarship = new EntityWarship(speed, weight, bodyColor); + } + + /// + /// Конструктор для наследников + /// + /// Ширина прорисовки военного корабля + /// Высота прорисовки военного корабля + protected DrawningWarship(int drawningCarrierWidth, int drawningCarrierHeight) : this() + { + _drawningWarshipWidth = drawningCarrierWidth; + _drawningWarshipHeight = drawningCarrierHeight; + } + + /// + /// Установка границ поля + /// + /// Ширина поля + /// Высота поля + /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах + public bool SetPictureSize(int width, int height) + { + if (_drawningWarshipWidth <= width && _drawningWarshipHeight <= height) + { + _pictureWidth = width; + _pictureHeight = height; + if (_startPosX.HasValue && _startPosY.HasValue) + { + if (_startPosX + _drawningWarshipWidth > width) + { + _startPosX = width - _drawningWarshipWidth; + } + + if (_startPosY + _drawningWarshipHeight > height) + { + _startPosY = height - _drawningWarshipHeight; + } + } + return true; + } + return false; + } + + /// + /// Установка позиции + /// + /// Координата X + /// Координата Y + public void SetPosition(int x, int y) + { + if (!_pictureHeight.HasValue || !_pictureWidth.HasValue) + { + return; + } + + _startPosX = x; + _startPosY = y; + if (x < 0) + { + _startPosX = 0; + } + + if (y < 0) + { + _startPosY = 0; + } + + if (x + _drawningWarshipWidth > _pictureWidth) + { + _startPosX = _pictureWidth - _drawningWarshipWidth; + } + + if (y + _drawningWarshipHeight > _pictureHeight) + { + _startPosY = _pictureHeight - _drawningWarshipHeight; + } + } + + public bool MoveTransport(DirectionType direction) + { + if (EntityWarship == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return false; + } + + switch (direction) + { + // Влево + case DirectionType.Left: + if (_startPosX.Value - EntityWarship.Step > 0) + { + _startPosX -= (int)EntityWarship.Step; + } + return true; + // Вверх + case DirectionType.Up: + if (_startPosY.Value - EntityWarship.Step > 0) + { + _startPosY -= (int)EntityWarship.Step; + } + return true; + // Вправо + case DirectionType.Right: + if (_startPosX.Value + _drawningWarshipWidth + EntityWarship.Step < _pictureWidth.Value) + { + _startPosX += (int)EntityWarship.Step; + } + return true; + // Вниз + case DirectionType.Down: + if (_startPosY.Value + _drawningWarshipHeight + EntityWarship.Step < _pictureHeight.Value) + { + _startPosY += (int)EntityWarship.Step; + } + return true; + default: + return false; + } + } + + /// + /// Прорисовка объекта + /// + /// + public virtual void DrawTransport(Graphics g) + { + if (EntityWarship == null || !_startPosX.HasValue || !_startPosY.HasValue) + { + return; + } + + Pen pen = new(Color.Black); + + // Границы перевозчика + g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value, 100, 50); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 5, 5, 15); + g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 30, 5, 15); + + Point[] points = + { + new Point(_startPosX.Value + 105, _startPosY.Value), + new Point(_startPosX.Value + 120, _startPosY.Value + 15), + new Point(_startPosX.Value + 140, _startPosY.Value + 20), + new Point(_startPosX.Value + 140, _startPosY.Value + 30), + new Point(_startPosX.Value + 120, _startPosY.Value + 35), + new Point(_startPosX.Value + 105, _startPosY.Value + 50), + + }; + g.DrawPolygon(pen, points); + + // Палуба + Brush br = new SolidBrush(EntityWarship.BodyColor); + Brush brBlack = new SolidBrush(Color.Black); + g.FillRectangle(br, _startPosX.Value + 6, _startPosY.Value + 1, 100, 49); + g.FillPolygon(br, points); + g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 5, 5, 15); + g.FillRectangle(brBlack, _startPosX.Value, _startPosY.Value + 30, 5, 15); + } + +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/EntityAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityAircraftCarrier.cs similarity index 63% rename from ProjectAircraftCarrier_/ProjectAircraftCarrier_/EntityAircraftCarrier.cs rename to ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityAircraftCarrier.cs index d4e84bf..77ed170 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/EntityAircraftCarrier.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityAircraftCarrier.cs @@ -1,25 +1,10 @@ -namespace ProjectAircraftCarrier; +namespace ProjectAircraftCarrier_.Entities; /// /// Класс-сущность "Авианосец" /// -public class EntityAircraftCarrier +public class EntityAircraftCarrier : EntityWarship { - /// - /// Скорость - /// - public int Speed { get; private set; } - - /// - /// Вес - /// - public double Weight { get; private set; } - - /// - /// Основной цвет - /// - public Color BodyColor { get; private set; } - /// /// Дополнительный цвет (для опциональных элементов) /// @@ -40,11 +25,6 @@ public class EntityAircraftCarrier /// public bool FighterJet { get; private set; } - /// - /// Шаг перемещения авианосца - /// - public double Step => Speed * 100 / Weight; - /// /// Инициализация полей объекта-класса авианосца /// @@ -52,14 +32,11 @@ public class EntityAircraftCarrier /// Вес /// Основной цвет /// Дополнительный цвет - /// Признак наличия рубки управления + /// Палуба для взлета самолетов /// Признак наличия рубки управления /// Признак наличия истребителя - public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) + public EntityAircraftCarrier(int speed, double weight, Color bodyColor, Color additionalColor, bool deckForAircraftTakeOff, bool controlCabin, bool fighterJet) : base(speed, weight, bodyColor) { - Speed = speed; - Weight = weight; - BodyColor = bodyColor; AdditionalColor = additionalColor; DeckForAircraftTakeOff = deckForAircraftTakeOff; ControlCabin = controlCabin; diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs new file mode 100644 index 0000000..461a100 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Entities/EntityWarship.cs @@ -0,0 +1,41 @@ +namespace ProjectAircraftCarrier_.Entities; + +/// +/// Класс-сущность "Военный корабль" +/// +public class EntityWarship +{ + /// + /// Скорость + /// + public int Speed { get; private set; } + + /// + /// Вес + /// + public double Weight { get; private set; } + + /// + /// Основной цвет + /// + public Color BodyColor { get; private set; } + + /// + /// Шаг перемещения военного корабля + /// + public double Step => Speed * 100 / Weight; + + /// + /// Конструктор сущности + /// + /// Скорость + /// Вес + /// Основной цвет + public EntityWarship(int speed, double weight, Color bodyColor) + { + Speed = speed; + Weight = weight; + BodyColor = bodyColor; + } + +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs index 910ee0a..ca10315 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs @@ -34,6 +34,7 @@ buttonDown = new Button(); buttonRight = new Button(); buttonUp = new Button(); + buttonCreateWarship = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxAircraftCarrier).BeginInit(); SuspendLayout(); // @@ -51,9 +52,9 @@ buttonCreateAircraftCarrier.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonCreateAircraftCarrier.Location = new Point(12, 601); buttonCreateAircraftCarrier.Name = "buttonCreateAircraftCarrier"; - buttonCreateAircraftCarrier.Size = new Size(131, 40); + buttonCreateAircraftCarrier.Size = new Size(207, 40); buttonCreateAircraftCarrier.TabIndex = 1; - buttonCreateAircraftCarrier.Text = "Создать"; + buttonCreateAircraftCarrier.Text = "Создать авианосец"; buttonCreateAircraftCarrier.UseVisualStyleBackColor = true; buttonCreateAircraftCarrier.Click += ButtonCreateAircraftCarrier_Click; // @@ -105,11 +106,23 @@ buttonUp.UseVisualStyleBackColor = true; buttonUp.Click += ButtonMove_Click; // + // buttonCreateWarship + // + buttonCreateWarship.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonCreateWarship.Location = new Point(244, 601); + buttonCreateWarship.Name = "buttonCreateWarship"; + buttonCreateWarship.Size = new Size(273, 40); + buttonCreateWarship.TabIndex = 7; + buttonCreateWarship.Text = "Создать военный корабль"; + buttonCreateWarship.UseVisualStyleBackColor = true; + buttonCreateWarship.Click += ButtonCreateWarship_Click; + // // FormAircraftCarrier // AutoScaleDimensions = new SizeF(12F, 30F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1167, 653); + Controls.Add(buttonCreateWarship); Controls.Add(buttonUp); Controls.Add(buttonRight); Controls.Add(buttonDown); @@ -130,5 +143,6 @@ private Button buttonDown; private Button buttonRight; private Button buttonUp; + private Button buttonCreateWarship; } } \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs index df50c97..4ca2d44 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs @@ -1,97 +1,119 @@ -using ProjectAircraftCarrier; -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; +using ProjectAircraftCarrier_.Drawnings; -namespace ProjectAircraftCarrier_ +namespace ProjectAircraftCarrier_; + +/// +/// Форма работы с объектом "Авианосец" +/// +public partial class FormAircraftCarrier : Form { - public partial class FormAircraftCarrier : Form + /// + /// Поле-объект для прорисовки объекта + /// + private DrawningWarship? _drawningWarship; + + /// + /// Конструктор формы + /// + public FormAircraftCarrier() { - /// - /// Поле-объект для прорисовки объекта - /// - private DrawningAircraftCarrier? _drawningAircraftCarrier; - public FormAircraftCarrier() + InitializeComponent(); + } + + /// + /// Метод прорисовки машины + /// + private void Draw() + { + if (_drawningWarship == null) { - InitializeComponent(); + return; } - /// - /// Метод прорисовки машины - /// - private void Draw() + Bitmap bmp = new(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawningWarship.DrawTransport(gr); + pictureBoxAircraftCarrier.Image = bmp; + } + + /// + /// Создание объекта класса-перемещения + /// + /// Тип создаваемого объекта + private void CreateObject(string type) + { + Random random = new(); + switch (type) { - if (_drawningAircraftCarrier == null) - { + case nameof(DrawningWarship): + _drawningWarship = new DrawningWarship(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(DrawningAircraftCarrier): + _drawningWarship = new DrawningAircraftCarrier(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))); + break; + default: return; - } - - Bitmap bmp = new(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); - Graphics gr = Graphics.FromImage(bmp); - _drawningAircraftCarrier.DrawTransport(gr); - pictureBoxAircraftCarrier.Image = bmp; - } - /// - /// Обработка нажатия кнопки создать - /// - /// - /// - private void ButtonCreateAircraftCarrier_Click(object sender, EventArgs e) - { - Random random = new(); - _drawningAircraftCarrier = new DrawningAircraftCarrier(); - _drawningAircraftCarrier.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))); - _drawningAircraftCarrier.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); - _drawningAircraftCarrier.SetPosition(random.Next(10, 100), random.Next(10, 100)); + _drawningWarship.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); + _drawningWarship.SetPosition(random.Next(10, 100), random.Next(10, 100)); + Draw(); + } + /// + /// Обработка нажатия кнопки "Создать авианосец" + /// + /// + /// + private void ButtonCreateAircraftCarrier_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAircraftCarrier)); + + /// + /// Обработка нажатия кнопки "Создать военный корабль" + /// + /// + /// + private void ButtonCreateWarship_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningWarship)); + + + /// + /// Перемещение объекта по форме (нажатие кнопок навигации) + /// + /// + /// + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawningWarship == null) + { + return; + } + + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = _drawningWarship.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = _drawningWarship.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = _drawningWarship.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = _drawningWarship.MoveTransport(DirectionType.Right); + break; + } + + if (result) + { Draw(); } - - /// - /// Перемещение объекта по форме (нажатие кнопок навигации) - /// - /// - /// - private void ButtonMove_Click(object sender, EventArgs e) - { - if (_drawningAircraftCarrier == null) - { - return; - } - - string name = ((Button)sender)?.Name ?? string.Empty; - bool result = false; - switch (name) - { - case "buttonUp": - result = _drawningAircraftCarrier.MoveTransport(DirectionType.Up); - break; - case "buttonDown": - result = _drawningAircraftCarrier.MoveTransport(DirectionType.Down); - break; - case "buttonLeft": - result = _drawningAircraftCarrier.MoveTransport(DirectionType.Left); - break; - case "buttonRight": - result = _drawningAircraftCarrier.MoveTransport(DirectionType.Right); - break; - } - - if (result) - { - Draw(); - } - } } + + } -- 2.25.1 From c7ac978d7f25e9c81101e96aa79909ac31760d13 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 6 Mar 2024 17:17:50 +0400 Subject: [PATCH 03/10] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=82=D1=80=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Drawnings/DirectionType.cs | 5 + .../Drawnings/DrawningAircraftCarrier.cs | 7 +- .../Drawnings/DrawningWarship.cs | 28 ++++ .../FormAircraftCarrier.Designer.cs | 26 ++++ .../FormAircraftCarrier.cs | 50 +++++++ .../MovementStrategy/AbstractStrategy.cs | 135 ++++++++++++++++++ .../MovementStrategy/IMoveableObject.cs | 24 ++++ .../MovementStrategy/MoveToBorder.cs | 55 +++++++ .../MovementStrategy/MoveToCenter.cs | 53 +++++++ .../MovementStrategy/MoveableWarship.cs | 61 ++++++++ .../MovementStrategy/MovementDirection.cs | 28 ++++ .../MovementStrategy/ObjectParameters.cs | 72 ++++++++++ .../MovementStrategy/StrategyStatus.cs | 22 +++ 13 files changed, 564 insertions(+), 2 deletions(-) create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/AbstractStrategy.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/IMoveableObject.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToBorder.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToCenter.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveableWarship.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MovementDirection.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/ObjectParameters.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/StrategyStatus.cs diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DirectionType.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DirectionType.cs index 3e099c8..8378f93 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DirectionType.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DirectionType.cs @@ -5,6 +5,11 @@ /// public enum DirectionType { + /// + /// Неизвестное направление + /// + Unknow = -1, + /// /// Вверх /// diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs index 7125bbf..35de8bf 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningAircraftCarrier.cs @@ -2,6 +2,9 @@ namespace ProjectAircraftCarrier_.Drawnings; +/// +/// Класс, отвечающий за прорисовку и перемещение объекта-сущности +/// public class DrawningAircraftCarrier : DrawningWarship { /// @@ -30,6 +33,8 @@ public class DrawningAircraftCarrier : DrawningWarship Brush additionalBrush = new SolidBrush(aircraftCarrier.AdditionalColor); Pen additionalPen = new(aircraftCarrier.AdditionalColor, 2); + base.DrawTransport(g); + // Палуба для взлёта самолётов if (aircraftCarrier.DeckForAircraftTakeOff) { @@ -65,7 +70,5 @@ public class DrawningAircraftCarrier : DrawningWarship g.DrawLine(additionalPen, _startPosX.Value + 90, _startPosY.Value + 46, _startPosX.Value + 95, _startPosY.Value + 41); g.DrawLine(additionalPen, _startPosX.Value + 95, _startPosY.Value + 41, _startPosX.Value + 100, _startPosY.Value + 46); } - - base.DrawTransport(g); } } \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs index 975b80b..aa2209c 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs @@ -2,6 +2,9 @@ namespace ProjectAircraftCarrier_.Drawnings; +/// +/// Класс, отвечающий за прорисовку и перемещение базового объекта-сущности +/// public class DrawningWarship { /// @@ -39,6 +42,26 @@ public class DrawningWarship /// private readonly int _drawningWarshipHeight = 50; + /// + /// Координата X объекта + /// + public int? GetPosX => _startPosX; + + /// + /// Координата Y объекта + /// + public int? GetPosY => _startPosY; + + /// + /// Ширина объекта + /// + public int GetWidth => _drawningWarshipWidth; + + /// + /// Высота объекта + /// + public int GetHeight => _drawningWarshipHeight; + /// /// Пустой конструктор /// @@ -136,6 +159,11 @@ public class DrawningWarship } } + /// + /// Изменение направления перемещения + /// + /// Направление + /// true - перемещене выполнено, false - перемещение невозможно public bool MoveTransport(DirectionType direction) { if (EntityWarship == null || !_startPosX.HasValue || !_startPosY.HasValue) diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs index ca10315..33746be 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs @@ -35,6 +35,8 @@ buttonRight = new Button(); buttonUp = new Button(); buttonCreateWarship = new Button(); + comboBoxStrategy = new ComboBox(); + buttonStrategyStep = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxAircraftCarrier).BeginInit(); SuspendLayout(); // @@ -117,11 +119,33 @@ buttonCreateWarship.UseVisualStyleBackColor = true; buttonCreateWarship.Click += ButtonCreateWarship_Click; // + // comboBoxStrategy + // + comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStrategy.FormattingEnabled = true; + comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBoxStrategy.Location = new Point(943, 12); + comboBoxStrategy.Name = "comboBoxStrategy"; + comboBoxStrategy.Size = new Size(212, 38); + comboBoxStrategy.TabIndex = 8; + // + // buttonStrategyStep + // + buttonStrategyStep.Location = new Point(1024, 56); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(131, 40); + buttonStrategyStep.TabIndex = 9; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += ButtonStrategyStep_Click; + // // FormAircraftCarrier // AutoScaleDimensions = new SizeF(12F, 30F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1167, 653); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBoxStrategy); Controls.Add(buttonCreateWarship); Controls.Add(buttonUp); Controls.Add(buttonRight); @@ -144,5 +168,7 @@ private Button buttonRight; private Button buttonUp; private Button buttonCreateWarship; + private ComboBox comboBoxStrategy; + private Button buttonStrategyStep; } } \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs index 4ca2d44..6b92af0 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs @@ -1,4 +1,5 @@ using ProjectAircraftCarrier_.Drawnings; +using ProjectAircraftCarrier_.MovementStrategy; namespace ProjectAircraftCarrier_; @@ -12,12 +13,18 @@ public partial class FormAircraftCarrier : Form /// private DrawningWarship? _drawningWarship; + /// + /// Стратегия перемещения + /// + private AbstractStrategy? _strategy; + /// /// Конструктор формы /// public FormAircraftCarrier() { InitializeComponent(); + _strategy = null; } /// @@ -61,6 +68,8 @@ public partial class FormAircraftCarrier : Form _drawningWarship.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); _drawningWarship.SetPosition(random.Next(10, 100), random.Next(10, 100)); + _strategy = null; + comboBoxStrategy.Enabled = true; Draw(); } @@ -115,5 +124,46 @@ public partial class FormAircraftCarrier : Form } } + /// + /// + /// + /// + /// + private void ButtonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawningWarship == null) + { + return; + } + if (comboBoxStrategy.Enabled) + { + _strategy = comboBoxStrategy.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToBorder(), + _ => null, + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveableWarship(_drawningWarship), pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); + } + + if (_strategy == null) + { + return; + } + + comboBoxStrategy.Enabled = false; + _strategy.MakeStep(); + Draw(); + + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBoxStrategy.Enabled = true; + _strategy = null; + } + } } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/AbstractStrategy.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/AbstractStrategy.cs new file mode 100644 index 0000000..fb95395 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/AbstractStrategy.cs @@ -0,0 +1,135 @@ +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Класс-стратегия перемещения объекта +/// +public abstract class AbstractStrategy +{ + /// + /// Перемещаемый объект + /// + private IMoveableObject? _moveableObject; + + /// + /// Статус перемещения + /// + private StrategyStatus _state = StrategyStatus.NotInit; + + /// + /// Ширина поля + /// + protected int FieldWidth { get; private set; } + + /// + /// Высота поля + /// + protected int FieldHeight { get; private set; } + + /// + /// Статус перемещения + /// + public StrategyStatus GetStatus() { return _state; } + + /// + /// Установка данных + /// + /// Перемещаемый объект + /// Ширина поля + /// Высота поля + public void SetData(IMoveableObject moveableObject, int width, int height) + { + if (moveableObject == null) + { + _state = StrategyStatus.NotInit; + return; + } + _state = StrategyStatus.InProgress; + _moveableObject = moveableObject; + FieldWidth = width; + FieldHeight = height; + } + + /// + /// Шаг перемещения + /// + public void MakeStep() + { + if (_state != StrategyStatus.InProgress) + { + return; + } + if (IsTargetDestinaion()) + { + _state = StrategyStatus.Finish; + return; + } + MoveToTarget(); + } + + /// + /// Перемещение влево + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveLeft() => MoveTo(MovementDirection.Left); + + /// + /// Перемещение вправо + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveRight() => MoveTo(MovementDirection.Right); + + /// + /// Перемещение вверх + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveUp() => MoveTo(MovementDirection.Up); + + /// + /// Перемещение вниз + /// + /// Результат перемещения (true - удалось переместиться, false - неудача) + protected bool MoveDown() => MoveTo(MovementDirection.Down); + + /// + /// Параметры объекта + /// + protected ObjectParameters? GetObjectParameters => _moveableObject?.GetObjectPosition; + + /// + /// Шаг объекта + /// + /// + protected int? GetStep() + { + if (_state != StrategyStatus.InProgress) + { + return null; + } + return _moveableObject?.GetStep; + } + + /// + /// Перемещение к цели + /// + protected abstract void MoveToTarget(); + + /// + /// Достигнута ли цель + /// + /// + protected abstract bool IsTargetDestinaion(); + + /// + /// Попытка перемещения в требуемом направлении + /// + /// Направление + /// Результат попытки (true - удалось переместиться, false - неудача) + private bool MoveTo(MovementDirection movementDirection) + { + if (_state != StrategyStatus.InProgress) + { + return false; + } + return _moveableObject?.TryMoveObject(movementDirection) ?? false; + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/IMoveableObject.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/IMoveableObject.cs new file mode 100644 index 0000000..f4abc81 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/IMoveableObject.cs @@ -0,0 +1,24 @@ +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Интерфейс для работы с перемещаемым объектом +/// +public interface IMoveableObject +{ + /// + /// Получение координаты объекта + /// + ObjectParameters? GetObjectPosition { get; } + + /// + /// Шаг объекта + /// + int GetStep { get; } + + /// + /// Попытка переместить объект в указанном направлении + /// + /// Направление + /// true - объект перемещен, false - перемещение невозможно + bool TryMoveObject(MovementDirection direction); +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToBorder.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToBorder.cs new file mode 100644 index 0000000..74c4a6a --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToBorder.cs @@ -0,0 +1,55 @@ +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Стратегия перемещения объекта к краю +/// +public class MoveToBorder : AbstractStrategy +{ + protected override bool IsTargetDestinaion() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return false; + } + return objParams.RightBoarder - GetStep() <= FieldWidth + && objParams.RightBoarder + GetStep() >= FieldWidth && + objParams.DownBoarder - GetStep() <= FieldHeight + && objParams.DownBoarder + GetStep() >= FieldHeight; + } + + protected override void MoveToTarget() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return; + } + + int diffX = objParams.RightBoarder - FieldWidth; + if (Math.Abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + + int diffY = objParams.DownBoarder - FieldHeight; + if (Math.Abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } + else + { + MoveDown(); + } + } + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToCenter.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToCenter.cs new file mode 100644 index 0000000..9e00036 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveToCenter.cs @@ -0,0 +1,53 @@ +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Стратегия перемещения объекта в центр экрана +/// +public class MoveToCenter : AbstractStrategy +{ + protected override bool IsTargetDestinaion() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return false; + } + return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2 + && objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 && + objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2 + && objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2; + } + + protected override void MoveToTarget() + { + ObjectParameters? objParams = GetObjectParameters; + if (objParams == null) + { + return; + } + int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2; + if (Math.Abs(diffX) > GetStep()) + { + if (diffX > 0) + { + MoveLeft(); + } + else + { + MoveRight(); + } + } + int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2; + if (Math.Abs(diffY) > GetStep()) + { + if (diffY > 0) + { + MoveUp(); + } + else + { + MoveDown(); + } + } + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveableWarship.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveableWarship.cs new file mode 100644 index 0000000..079790f --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MoveableWarship.cs @@ -0,0 +1,61 @@ +using ProjectAircraftCarrier_.Drawnings; + +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Класс-реализация IMoveableObject с использованием DrawningWarship +/// +public class MoveableWarship : IMoveableObject +{ + private readonly DrawningWarship? _warship = null; + + /// + /// Конструктор + /// + /// Объект класса DrawningWarship + public MoveableWarship(DrawningWarship warship) + { + _warship = warship; + } + + public ObjectParameters? GetObjectPosition + { + get + { + if (_warship == null || _warship.EntityWarship == null || !_warship.GetPosX.HasValue || !_warship.GetPosY.HasValue) + { + return null; + } + return new ObjectParameters(_warship.GetPosX.Value, _warship.GetPosY.Value, _warship.GetWidth, _warship.GetHeight); + } + } + + public int GetStep => (int)(_warship?.EntityWarship?.Step ?? 0); + + public bool TryMoveObject(MovementDirection direction) + { + if (_warship == null || _warship.EntityWarship == null) + { + return false; + } + return _warship.MoveTransport(GetDirectionType(direction)); + } + + /// + /// Конвертация из MovementDirection в DirectionType + /// + /// MovementDirection + /// DirectionType + private static DirectionType GetDirectionType(MovementDirection direction) + { + return direction switch + { + MovementDirection.Left => DirectionType.Left, + MovementDirection.Right => DirectionType.Right, + MovementDirection.Up => DirectionType.Up, + MovementDirection.Down => DirectionType.Down, + _ => DirectionType.Unknow, + }; + } + +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MovementDirection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MovementDirection.cs new file mode 100644 index 0000000..cefd0b0 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/MovementDirection.cs @@ -0,0 +1,28 @@ +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Направление перемещения +/// +public enum MovementDirection +{ + /// + /// Вверх + /// + Up = 1, + + /// + /// Вниз + /// + Down = 2, + + /// + /// Влево + /// + Left = 3, + + /// + /// Вправо + /// + Right = 4 + +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/ObjectParameters.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/ObjectParameters.cs new file mode 100644 index 0000000..02e0fb2 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/ObjectParameters.cs @@ -0,0 +1,72 @@ +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Параметры координаты объекта +/// +public class ObjectParameters +{ + /// + /// Координата X + /// + private readonly int _x; + + /// + /// Координата Y + /// + private readonly int _y; + + /// + /// Ширина объекта + /// + private readonly int _width; + + /// + /// Высота объекта + /// + private readonly int _height; + + /// + /// Левая граница + /// + public int LeftBoarder => _x; + + /// + /// Верхняя граница + /// + public int TopBoarder => _y; + + /// + /// Правая граница + /// + public int RightBoarder => _x + _width; + + /// + /// Нижняя граница + /// + public int DownBoarder => _y + _height; + + /// + /// Середина объекта + /// + public int ObjectMiddleHorizontal => _x + _width / 2; + + /// + /// Середина объекта + /// + public int ObjectMiddleVertical => _y + _height / 2; + + /// + /// Конструктор + /// + /// Координата X + /// Координата Y + /// Ширина объекта + /// Высота объекта + public ObjectParameters(int x, int y, int width, int height) + { + _x = x; + _y = y; + _width = width; + _height = height; + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/StrategyStatus.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/StrategyStatus.cs new file mode 100644 index 0000000..13cccf8 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/MovementStrategy/StrategyStatus.cs @@ -0,0 +1,22 @@ +namespace ProjectAircraftCarrier_.MovementStrategy; + +/// +/// Статус выполнения операции перемещения +/// +public enum StrategyStatus +{ + /// + /// Всё готово к началу + /// + NotInit, + + /// + /// Выполняется + /// + InProgress, + + /// + /// Завершено + /// + Finish +} -- 2.25.1 From abad442947e31c0aeff5e3ff9912e23a06ed29a3 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 6 Mar 2024 17:24:46 +0400 Subject: [PATCH 04/10] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BD=D0=B5=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectAircraftCarrier.sln | 25 ------------ .../ProjectAircraftCarrier/Form1.Designer.cs | 39 ------------------- .../ProjectAircraftCarrier/Form1.cs | 10 ----- .../ProjectAircraftCarrier/Program.cs | 17 -------- .../ProjectAircraftCarrier.csproj | 11 ------ .../ProjectAircraftCarrier1.csproj | 26 ------------- .../ProjectAircraftCarrier1.sln | 25 ------------ 7 files changed, 153 deletions(-) delete mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier.sln delete mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.Designer.cs delete mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.cs delete mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs delete mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj delete mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj delete mode 100644 ProjectAircraftCarrier/ProjectAircraftCarrier1.sln diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier.sln b/ProjectAircraftCarrier/ProjectAircraftCarrier.sln deleted file mode 100644 index eaafb37..0000000 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34525.116 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectAircraftCarrier", "ProjectAircraftCarrier\ProjectAircraftCarrier.csproj", "{A871246D-86F2-4370-B644-24A99BFF6783}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A871246D-86F2-4370-B644-24A99BFF6783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A871246D-86F2-4370-B644-24A99BFF6783}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A871246D-86F2-4370-B644-24A99BFF6783}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A871246D-86F2-4370-B644-24A99BFF6783}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {7F4937DC-FEE0-4D3B-8062-6479A5B07CE4} - EndGlobalSection -EndGlobal diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.Designer.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.Designer.cs deleted file mode 100644 index 1e97595..0000000 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectAircraftCarrier -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.cs deleted file mode 100644 index f1a07ae..0000000 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectAircraftCarrier -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs b/ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs deleted file mode 100644 index 1ba11b2..0000000 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/Program.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace ProjectAircraftCarrier -{ - internal static class Program - { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() - { - // To customize application configuration such as set high DPI settings or default font, - // see https://aka.ms/applicationconfiguration. - ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); - } - } -} \ No newline at end of file diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj deleted file mode 100644 index 663fdb8..0000000 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier.csproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - WinExe - net8.0-windows - enable - true - enable - - - \ No newline at end of file diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj b/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj deleted file mode 100644 index af03d74..0000000 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier/ProjectAircraftCarrier1.csproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - WinExe - net8.0-windows - enable - true - enable - - - - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - \ No newline at end of file diff --git a/ProjectAircraftCarrier/ProjectAircraftCarrier1.sln b/ProjectAircraftCarrier/ProjectAircraftCarrier1.sln deleted file mode 100644 index 0eb21b9..0000000 --- a/ProjectAircraftCarrier/ProjectAircraftCarrier1.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34525.116 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectAircraftCarrier1", "ProjectAircraftCarrier\ProjectAircraftCarrier1.csproj", "{A871246D-86F2-4370-B644-24A99BFF6783}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A871246D-86F2-4370-B644-24A99BFF6783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A871246D-86F2-4370-B644-24A99BFF6783}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A871246D-86F2-4370-B644-24A99BFF6783}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A871246D-86F2-4370-B644-24A99BFF6783}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {7F4937DC-FEE0-4D3B-8062-6479A5B07CE4} - EndGlobalSection -EndGlobal -- 2.25.1 From 3cca6729a09803bfe86b0d4f9280e459ed3881c6 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Fri, 15 Mar 2024 18:42:46 +0400 Subject: [PATCH 05/10] =?UTF-8?q?=D0=9A=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ICollectionGenericObjects.cs | 49 ++++++++++++++++ .../MassiveGenericObjects.cs | 56 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs new file mode 100644 index 0000000..2956b5b --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -0,0 +1,49 @@ +namespace ProjectAircraftCarrier_.CollectionGenericObjects; + +/// +/// Интерфейс описания действий для набора хранимых объектов +/// +/// Параметр: ограничение - ссылочный тип +public interface ICollectionGenericObjects + where T : class +{ + /// + /// Количество объектов в коллекции + /// + int Count { get; } + + /// + /// Установка максимального количества элементов + /// + int SetMaxCount { set; } + + /// + /// Добавление объекта в коллекцию + /// + /// Добавляемый объект + /// true - вставка прошла удачно, false - вставка не удалась + bool Insert(T obj); + + /// + /// Добавление объекта в коллекцию на конкретную позицию + /// + /// Добавляемый объект + /// Позиция + /// true - вставка прошла удачно, false - вставка не удалась + bool Insert(T obj, int position); + + /// + /// Удаление объекта из коллекции с конкретной позиции + /// + /// Позиция + /// true - удаление прошло удачно, false - удаление не удалось + bool Remove(int position); + + /// + /// Получение объекта по позиции + /// + /// Позиция + /// Объект + T? Get(int position); +} + diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs new file mode 100644 index 0000000..01df7a2 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs @@ -0,0 +1,56 @@ +namespace ProjectAircraftCarrier_.CollectionGenericObjects; + +/// +/// Параметризованный набор объектов +/// +/// Параметр: ограничение - ссылочный тип +public class MassiveGenericObjects : ICollectionGenericObjects + where T : class +{ + /// + /// Массив объектов, которые храним + /// + private T?[] _collection; + + public int Count => _collection.Length; + + public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } + + /// + /// Конструктор + /// + public MassiveGenericObjects() + { + _collection = Array.Empty(); + } + + public T? Get(int position) + { + // TODO проверка позиции + return _collection[position]; + } + + public bool Insert(T obj) + { + // TODO вставка в свободное место набора + return false; + } + + public bool Insert(T obj, int position) + { + // TODO проверка позиции + // TODO проверка, что элемент массива по этой позиции пустой, если нет, то + // ищется свободное место после этой позиции и идет вставка туда + // если нет после, ищем до + // TODO вставка + return false; + } + + public bool Remove(int position) + { + // TODO проверка позиции + // TODO удаление объекта из массива, присвоив элементу массива значение null + return true; + } +} + -- 2.25.1 From e1c1cd865e3780fb7e97ffbe7a62c1981ec5bf3d Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 20 Mar 2024 13:08:13 +0400 Subject: [PATCH 06/10] =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 116 +++++++++++ .../MassiveGenericObjects.cs | 47 +++++ .../WarshipSharingService.cs | 61 ++++++ .../Drawnings/DrawningWarship.cs | 10 +- .../FormAircraftCarrier.Designer.cs | 46 +---- .../FormAircraftCarrier.cs | 61 ++---- .../FormWarshipCollection.Designer.cs | 173 ++++++++++++++++ .../FormWarshipCollection.cs | 187 ++++++++++++++++++ .../FormWarshipCollection.resx | 120 +++++++++++ .../ProjectAircraftCarrier_/Program.cs | 2 +- 10 files changed, 736 insertions(+), 87 deletions(-) create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/WarshipSharingService.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.resx diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs new file mode 100644 index 0000000..192350a --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs @@ -0,0 +1,116 @@ +using ProjectAircraftCarrier_.Drawnings; + +namespace ProjectAircraftCarrier_.CollectionGenericObjects; + +/// +/// Абстракция компании, хранящий коллекцию автомобилей +/// +public abstract class AbstractCompany +{ + /// + /// Размер места (ширина) + /// + protected readonly int _placeSizeWidth = 300; + + /// + /// Размер места (высота) + /// + protected readonly int _placeSizeHeight = 80; + + /// + /// Ширина окна + /// + protected readonly int _pictureWidth; + + /// + /// Высота окна + /// + protected readonly int _pictureHeight; + + /// + /// Коллекция автомобилей + /// + protected ICollectionGenericObjects? _collection = null; + + /// + /// Вычисление максимального количества элементов, который можно разместить в окне + /// + private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); + + /// + /// Конструктор + /// + /// Ширина окна + /// Высота окна + /// Коллекция автомобилей + public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects collection) + { + _pictureWidth = picWidth; + _pictureHeight = picHeight; + _collection = collection; + _collection.SetMaxCount = GetMaxCount; + } + + /// + /// Перегрузка оператора сложения для класса + /// + /// Компания + /// Добавляемый объект + /// + public static bool operator +(AbstractCompany company, DrawningWarship warship) + { + return company._collection?.Insert(warship) ?? false; + } + + /// + /// Перегрузка оператора удаления для класса + /// + /// Компания + /// Номер удаляемого объекта + /// + public static bool operator -(AbstractCompany company, int position) + { + return company._collection?.Remove(position) ?? false; + } + + /// + /// Получение случайного объекта из коллекции + /// + /// + public DrawningWarship? GetRandomObject() + { + Random rnd = new(); + return _collection?.Get(rnd.Next(GetMaxCount)); + } + + /// + /// Вывод всей коллекции + /// + /// + public Bitmap? Show() + { + Bitmap bitmap = new(_pictureWidth, _pictureHeight); + Graphics graphics = Graphics.FromImage(bitmap); + DrawBackground(graphics); + + SetObjectsPosition(); + for (int i = 0; i < (_collection?.Count ?? 0); ++i) + { + DrawningWarship? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + + return bitmap; + } + + /// + /// Вывод заднего фона + /// + /// + protected abstract void DrawBackground(Graphics g); + + /// + /// Расстановка объектов + /// + protected abstract void SetObjectsPosition(); +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs index 01df7a2..edd7ca5 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs @@ -27,12 +27,24 @@ public class MassiveGenericObjects : ICollectionGenericObjects public T? Get(int position) { // TODO проверка позиции + if (position < 0 || position > Count) + { + return null; + } return _collection[position]; } public bool Insert(T obj) { // TODO вставка в свободное место набора + for (int i = 0; i < Count; i++) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return true; + } + } return false; } @@ -43,6 +55,35 @@ public class MassiveGenericObjects : ICollectionGenericObjects // ищется свободное место после этой позиции и идет вставка туда // если нет после, ищем до // TODO вставка + if (position < 0 || position > Count) + { + return false; + } + + if (_collection[position] == null) + { + _collection[position] = obj; + return true; + } + + for (int i = position + 1; i < Count; i++) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return true; + } + } + + for (int i = position - 1; i >= 0; i--) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return true; + } + } + return false; } @@ -50,6 +91,12 @@ public class MassiveGenericObjects : ICollectionGenericObjects { // TODO проверка позиции // TODO удаление объекта из массива, присвоив элементу массива значение null + if (position < 0 || position > Count || _collection[position] == null) + { + return false; + } + + _collection[position] = null; return true; } } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/WarshipSharingService.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/WarshipSharingService.cs new file mode 100644 index 0000000..d0dd03c --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/WarshipSharingService.cs @@ -0,0 +1,61 @@ + +using ProjectAircraftCarrier_.Drawnings; + +namespace ProjectAircraftCarrier_.CollectionGenericObjects; + +public class WarshipSharingService : AbstractCompany +{ + public WarshipSharingService(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection) + { + } + + protected override void DrawBackground(Graphics g) + { + Pen pen = new(Color.Black, 2); + Pen widerPen = new(Color.Black, 5); + + for (int i = 0; i < _pictureHeight / _placeSizeHeight; i++) + { + int y = _placeSizeHeight; + y *= i; + + for (int j = 0; j <= _pictureWidth / _placeSizeWidth; j++) + { + int x = _placeSizeWidth; + x *= j; + + g.DrawLine(widerPen, x, y, x + _placeSizeWidth / 2, y); + g.DrawLine(widerPen, x, y + _placeSizeHeight - 10, x + _placeSizeWidth / 2, y + _placeSizeHeight - 10); + g.DrawLine(pen, x, y, x, y + _placeSizeHeight - 10); + g.DrawLine(pen, x + _placeSizeWidth / 2, y, x + _placeSizeWidth / 2, y + _placeSizeHeight - 10); + } + + } + } + + protected override void SetObjectsPosition() + { + int n = 0; + int m = 0; + + for (int i = 0; i < (_collection?.Count ?? 0); i++) + { + if (_collection?.Get(i) != null) + { + int x = 5 + _placeSizeWidth * n; + int y = (10 + _placeSizeHeight * (_pictureHeight / _placeSizeHeight - 1)) - _placeSizeHeight * m; + + _collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i)?.SetPosition(x, y); + } + + if (n < _pictureWidth / _placeSizeWidth) + n++; + else + { + n = 0; + m++; + } + } + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs index aa2209c..c1c8114 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Drawnings/DrawningWarship.cs @@ -87,12 +87,12 @@ public class DrawningWarship /// /// Конструктор для наследников /// - /// Ширина прорисовки военного корабля - /// Высота прорисовки военного корабля - protected DrawningWarship(int drawningCarrierWidth, int drawningCarrierHeight) : this() + /// Ширина прорисовки военного корабля + /// Высота прорисовки военного корабля + protected DrawningWarship(int DrawningWarshiprierWidth, int DrawningWarshiprierHeight) : this() { - _drawningWarshipWidth = drawningCarrierWidth; - _drawningWarshipHeight = drawningCarrierHeight; + _drawningWarshipWidth = DrawningWarshiprierWidth; + _drawningWarshipHeight = DrawningWarshiprierHeight; } /// diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs index 33746be..127533f 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.Designer.cs @@ -29,12 +29,10 @@ private void InitializeComponent() { pictureBoxAircraftCarrier = new PictureBox(); - buttonCreateAircraftCarrier = new Button(); buttonLeft = new Button(); buttonDown = new Button(); buttonRight = new Button(); buttonUp = new Button(); - buttonCreateWarship = new Button(); comboBoxStrategy = new ComboBox(); buttonStrategyStep = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxAircraftCarrier).BeginInit(); @@ -45,27 +43,16 @@ pictureBoxAircraftCarrier.Dock = DockStyle.Fill; pictureBoxAircraftCarrier.Location = new Point(0, 0); pictureBoxAircraftCarrier.Name = "pictureBoxAircraftCarrier"; - pictureBoxAircraftCarrier.Size = new Size(1167, 653); + pictureBoxAircraftCarrier.Size = new Size(1392, 778); pictureBoxAircraftCarrier.TabIndex = 0; pictureBoxAircraftCarrier.TabStop = false; // - // buttonCreateAircraftCarrier - // - buttonCreateAircraftCarrier.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateAircraftCarrier.Location = new Point(12, 601); - buttonCreateAircraftCarrier.Name = "buttonCreateAircraftCarrier"; - buttonCreateAircraftCarrier.Size = new Size(207, 40); - buttonCreateAircraftCarrier.TabIndex = 1; - buttonCreateAircraftCarrier.Text = "Создать авианосец"; - buttonCreateAircraftCarrier.UseVisualStyleBackColor = true; - buttonCreateAircraftCarrier.Click += ButtonCreateAircraftCarrier_Click; - // // buttonLeft // buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonLeft.BackgroundImage = Properties.Resources.arrowLeft; buttonLeft.BackgroundImageLayout = ImageLayout.Stretch; - buttonLeft.Location = new Point(1030, 606); + buttonLeft.Location = new Point(1255, 731); buttonLeft.Name = "buttonLeft"; buttonLeft.Size = new Size(35, 35); buttonLeft.TabIndex = 2; @@ -77,7 +64,7 @@ buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonDown.BackgroundImage = Properties.Resources.arrowDown; buttonDown.BackgroundImageLayout = ImageLayout.Stretch; - buttonDown.Location = new Point(1071, 606); + buttonDown.Location = new Point(1296, 731); buttonDown.Name = "buttonDown"; buttonDown.Size = new Size(35, 35); buttonDown.TabIndex = 3; @@ -89,7 +76,7 @@ buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonRight.BackgroundImage = Properties.Resources.arrowRight; buttonRight.BackgroundImageLayout = ImageLayout.Stretch; - buttonRight.Location = new Point(1112, 606); + buttonRight.Location = new Point(1337, 731); buttonRight.Name = "buttonRight"; buttonRight.Size = new Size(35, 35); buttonRight.TabIndex = 4; @@ -101,37 +88,28 @@ buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonUp.BackgroundImage = Properties.Resources.arrowUp; buttonUp.BackgroundImageLayout = ImageLayout.Stretch; - buttonUp.Location = new Point(1071, 565); + buttonUp.Location = new Point(1296, 690); buttonUp.Name = "buttonUp"; buttonUp.Size = new Size(35, 35); buttonUp.TabIndex = 5; buttonUp.UseVisualStyleBackColor = true; buttonUp.Click += ButtonMove_Click; // - // buttonCreateWarship - // - buttonCreateWarship.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateWarship.Location = new Point(244, 601); - buttonCreateWarship.Name = "buttonCreateWarship"; - buttonCreateWarship.Size = new Size(273, 40); - buttonCreateWarship.TabIndex = 7; - buttonCreateWarship.Text = "Создать военный корабль"; - buttonCreateWarship.UseVisualStyleBackColor = true; - buttonCreateWarship.Click += ButtonCreateWarship_Click; - // // comboBoxStrategy // + comboBoxStrategy.Anchor = AnchorStyles.Top | AnchorStyles.Right; comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxStrategy.FormattingEnabled = true; comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); - comboBoxStrategy.Location = new Point(943, 12); + comboBoxStrategy.Location = new Point(1168, 12); comboBoxStrategy.Name = "comboBoxStrategy"; comboBoxStrategy.Size = new Size(212, 38); comboBoxStrategy.TabIndex = 8; // // buttonStrategyStep // - buttonStrategyStep.Location = new Point(1024, 56); + buttonStrategyStep.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonStrategyStep.Location = new Point(1249, 56); buttonStrategyStep.Name = "buttonStrategyStep"; buttonStrategyStep.Size = new Size(131, 40); buttonStrategyStep.TabIndex = 9; @@ -143,15 +121,13 @@ // AutoScaleDimensions = new SizeF(12F, 30F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1167, 653); + ClientSize = new Size(1392, 778); Controls.Add(buttonStrategyStep); Controls.Add(comboBoxStrategy); - Controls.Add(buttonCreateWarship); Controls.Add(buttonUp); Controls.Add(buttonRight); Controls.Add(buttonDown); Controls.Add(buttonLeft); - Controls.Add(buttonCreateAircraftCarrier); Controls.Add(pictureBoxAircraftCarrier); Name = "FormAircraftCarrier"; Text = "Авианосец"; @@ -162,12 +138,10 @@ #endregion private PictureBox pictureBoxAircraftCarrier; - private Button buttonCreateAircraftCarrier; private Button buttonLeft; private Button buttonDown; private Button buttonRight; private Button buttonUp; - private Button buttonCreateWarship; private ComboBox comboBoxStrategy; private Button buttonStrategyStep; } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs index 6b92af0..fb2c2ac 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormAircraftCarrier.cs @@ -18,6 +18,22 @@ public partial class FormAircraftCarrier : Form /// private AbstractStrategy? _strategy; + /// + /// Получение объекта + /// + public DrawningWarship SetWarship + { + set + { + _drawningWarship = value; + _drawningWarship.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); + comboBoxStrategy.Enabled = true; + _strategy = null; + Draw(); + } + } + + /// /// Конструктор формы /// @@ -43,51 +59,6 @@ public partial class FormAircraftCarrier : Form pictureBoxAircraftCarrier.Image = bmp; } - /// - /// Создание объекта класса-перемещения - /// - /// Тип создаваемого объекта - private void CreateObject(string type) - { - Random random = new(); - switch (type) - { - case nameof(DrawningWarship): - _drawningWarship = new DrawningWarship(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(DrawningAircraftCarrier): - _drawningWarship = new DrawningAircraftCarrier(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))); - break; - default: - return; - } - - _drawningWarship.SetPictureSize(pictureBoxAircraftCarrier.Width, pictureBoxAircraftCarrier.Height); - _drawningWarship.SetPosition(random.Next(10, 100), random.Next(10, 100)); - _strategy = null; - comboBoxStrategy.Enabled = true; - Draw(); - } - - /// - /// Обработка нажатия кнопки "Создать авианосец" - /// - /// - /// - private void ButtonCreateAircraftCarrier_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAircraftCarrier)); - - /// - /// Обработка нажатия кнопки "Создать военный корабль" - /// - /// - /// - private void ButtonCreateWarship_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningWarship)); - - /// /// Перемещение объекта по форме (нажатие кнопок навигации) /// diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs new file mode 100644 index 0000000..f3ba626 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs @@ -0,0 +1,173 @@ +namespace ProjectAircraftCarrier_ +{ + partial class FormWarshipCollection + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + groupBoxTools = new GroupBox(); + buttonRefresh = new Button(); + buttonGoToCheck = new Button(); + buttonRemoveWarship = new Button(); + maskedTextBoxPosition = new MaskedTextBox(); + buttonAddAircraftCarrier = new Button(); + buttonAddWarship = new Button(); + comboBoxSelectorCompany = new ComboBox(); + pictureBox = new PictureBox(); + groupBoxTools.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); + SuspendLayout(); + // + // groupBoxTools + // + groupBoxTools.Controls.Add(buttonRefresh); + groupBoxTools.Controls.Add(buttonGoToCheck); + groupBoxTools.Controls.Add(buttonRemoveWarship); + groupBoxTools.Controls.Add(maskedTextBoxPosition); + groupBoxTools.Controls.Add(buttonAddAircraftCarrier); + groupBoxTools.Controls.Add(buttonAddWarship); + groupBoxTools.Controls.Add(comboBoxSelectorCompany); + groupBoxTools.Dock = DockStyle.Right; + groupBoxTools.Location = new Point(1126, 0); + groupBoxTools.Name = "groupBoxTools"; + groupBoxTools.Size = new Size(326, 912); + groupBoxTools.TabIndex = 0; + groupBoxTools.TabStop = false; + groupBoxTools.Text = "Инструменты"; + // + // buttonRefresh + // + buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonRefresh.Location = new Point(6, 767); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(314, 72); + buttonRefresh.TabIndex = 6; + buttonRefresh.Text = "Обновить"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += ButtonRefresh_Click; + // + // buttonGoToCheck + // + buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonGoToCheck.Location = new Point(6, 595); + buttonGoToCheck.Name = "buttonGoToCheck"; + buttonGoToCheck.Size = new Size(314, 72); + buttonGoToCheck.TabIndex = 5; + buttonGoToCheck.Text = "Передать на тесты"; + buttonGoToCheck.UseVisualStyleBackColor = true; + buttonGoToCheck.Click += ButtonGoToCheck_Click; + // + // buttonRemoveWarship + // + buttonRemoveWarship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonRemoveWarship.Location = new Point(6, 432); + buttonRemoveWarship.Name = "buttonRemoveWarship"; + buttonRemoveWarship.Size = new Size(314, 72); + buttonRemoveWarship.TabIndex = 4; + buttonRemoveWarship.Text = "Удаление военного корабля"; + buttonRemoveWarship.UseVisualStyleBackColor = true; + buttonRemoveWarship.Click += ButtonRemoveWarship_Click; + // + // maskedTextBoxPosition + // + maskedTextBoxPosition.Location = new Point(6, 391); + maskedTextBoxPosition.Mask = "00"; + maskedTextBoxPosition.Name = "maskedTextBoxPosition"; + maskedTextBoxPosition.Size = new Size(314, 35); + maskedTextBoxPosition.TabIndex = 3; + maskedTextBoxPosition.ValidatingType = typeof(int); + // + // buttonAddAircraftCarrier + // + buttonAddAircraftCarrier.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddAircraftCarrier.Location = new Point(6, 232); + buttonAddAircraftCarrier.Name = "buttonAddAircraftCarrier"; + buttonAddAircraftCarrier.Size = new Size(314, 72); + buttonAddAircraftCarrier.TabIndex = 2; + buttonAddAircraftCarrier.Text = "Добавление авианосца"; + buttonAddAircraftCarrier.UseVisualStyleBackColor = true; + buttonAddAircraftCarrier.Click += ButtonAddAircraftCarrier_Click; + // + // buttonAddWarship + // + buttonAddWarship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddWarship.Location = new Point(6, 154); + buttonAddWarship.Name = "buttonAddWarship"; + buttonAddWarship.Size = new Size(314, 72); + buttonAddWarship.TabIndex = 1; + buttonAddWarship.Text = "Добавление военного корабля"; + buttonAddWarship.UseVisualStyleBackColor = true; + buttonAddWarship.Click += ButtonAddWarship_Click; + // + // comboBoxSelectorCompany + // + comboBoxSelectorCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxSelectorCompany.FormattingEnabled = true; + comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" }); + comboBoxSelectorCompany.Location = new Point(6, 34); + comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; + comboBoxSelectorCompany.Size = new Size(314, 38); + comboBoxSelectorCompany.TabIndex = 0; + comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged; + // + // pictureBox + // + pictureBox.Dock = DockStyle.Fill; + pictureBox.Location = new Point(0, 0); + pictureBox.Name = "pictureBox"; + pictureBox.Size = new Size(1126, 912); + pictureBox.TabIndex = 1; + pictureBox.TabStop = false; + // + // FormWarshipCollection + // + AutoScaleDimensions = new SizeF(12F, 30F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1452, 912); + Controls.Add(pictureBox); + Controls.Add(groupBoxTools); + Name = "FormWarshipCollection"; + Text = "Коллекция военных кораблей"; + groupBoxTools.ResumeLayout(false); + groupBoxTools.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); + ResumeLayout(false); + } + + #endregion + + private GroupBox groupBoxTools; + private Button buttonAddWarship; + private ComboBox comboBoxSelectorCompany; + private Button buttonAddAircraftCarrier; + private PictureBox pictureBox; + private Button buttonRefresh; + private Button buttonGoToCheck; + private Button buttonRemoveWarship; + private MaskedTextBox maskedTextBoxPosition; + } +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs new file mode 100644 index 0000000..69a7069 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs @@ -0,0 +1,187 @@ +using ProjectAircraftCarrier_.CollectionGenericObjects; +using ProjectAircraftCarrier_.Drawnings; + +namespace ProjectAircraftCarrier_; + +/// +/// Форма работы с компанией и ее коллекцией +/// +public partial class FormWarshipCollection : Form +{ + /// + /// Компания + /// + private AbstractCompany? _company = null; + + /// + /// Конструктор + /// + public FormWarshipCollection() + { + InitializeComponent(); + } + + /// + /// Выбор компании + /// + /// + /// + private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSelectorCompany.Text) + { + case "Хранилище": + _company = new WarshipSharingService(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); + break; + } + } + + /// + /// Создание объекта класса-перемещения + /// + /// Тип создаваемого объекта + private void CreateObject(string type) + { + if (_company == null) + { + return; + } + + Random random = new(); + DrawningWarship drawningWarship; + switch (type) + { + case nameof(DrawningWarship): + drawningWarship = new DrawningWarship(random.Next(100, 300), random.Next(1000, 3000), GetColor(random)); + break; + case nameof(DrawningAircraftCarrier): + // TODO вызов диалогового окна для выбора цвета + drawningWarship = new DrawningAircraftCarrier(random.Next(100, 300), random.Next(1000, 3000), GetColor(random), GetColor(random), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + break; + default: + return; + } + + if (_company + drawningWarship) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } + } + + /// + /// Получение цвета + /// + /// Генератор случайных чисел + /// + private static Color GetColor(Random random) + { + Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); + ColorDialog dialog = new(); + if (dialog.ShowDialog() == DialogResult.OK) + { + color = dialog.Color; + } + + return color; + } + + /// + /// Добавление военного корабля + /// + /// + /// + private void ButtonAddWarship_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningWarship)); + + /// + /// Добавление авианосца + /// + /// + /// + private void ButtonAddAircraftCarrier_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningAircraftCarrier)); + + /// + /// Удаление объекта + /// + /// + /// + private void ButtonRemoveWarship_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(maskedTextBoxPosition.Text) || _company == null) + { + return; + } + + if (MessageBox.Show("Удалить объект", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) + { + return; + } + + int pos = Convert.ToInt32(maskedTextBoxPosition.Text); + if (_company - pos) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } + } + + /// + /// Передача объекта в другую форму + /// + /// + /// + private void ButtonGoToCheck_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + + DrawningWarship? warship = null; + int counter = 100; + while (warship == null) + { + warship = _company.GetRandomObject(); + counter--; + if (counter <= 0) + { + break; + } + } + + if (warship == null) + { + return; + } + + FormAircraftCarrier form = new() + { + SetWarship = warship + }; + form.ShowDialog(); + } + + /// + /// Перерисовка коллекции + /// + /// + /// + private void ButtonRefresh_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + + pictureBox.Image = _company.Show(); + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.resx b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs index a84e56d..332bbfa 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs @@ -11,7 +11,7 @@ namespace ProjectAircraftCarrier_ // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormAircraftCarrier()); + Application.Run(new FormWarshipCollection()); } } } \ No newline at end of file -- 2.25.1 From c42289f922585fe19277bbb09837181946f339b0 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 20 Mar 2024 16:27:23 +0400 Subject: [PATCH 07/10] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20+,=20-?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 8 +++--- .../{WarshipSharingService.cs => Docks.cs} | 4 +-- .../ICollectionGenericObjects.cs | 6 ++--- .../MassiveGenericObjects.cs | 25 ++++++++++--------- .../FormWarshipCollection.cs | 2 +- 5 files changed, 23 insertions(+), 22 deletions(-) rename ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/{WarshipSharingService.cs => Docks.cs} (88%) diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs index 192350a..4bedf0b 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs @@ -57,9 +57,9 @@ public abstract class AbstractCompany /// Компания /// Добавляемый объект /// - public static bool operator +(AbstractCompany company, DrawningWarship warship) + public static int operator +(AbstractCompany company, DrawningWarship warship) { - return company._collection?.Insert(warship) ?? false; + return company._collection.Insert(warship); } /// @@ -68,9 +68,9 @@ public abstract class AbstractCompany /// Компания /// Номер удаляемого объекта /// - public static bool operator -(AbstractCompany company, int position) + public static DrawningWarship? operator -(AbstractCompany company, int position) { - return company._collection?.Remove(position) ?? false; + return company._collection?.Remove(position); } /// diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/WarshipSharingService.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/Docks.cs similarity index 88% rename from ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/WarshipSharingService.cs rename to ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/Docks.cs index d0dd03c..44ab95c 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/WarshipSharingService.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/Docks.cs @@ -3,9 +3,9 @@ using ProjectAircraftCarrier_.Drawnings; namespace ProjectAircraftCarrier_.CollectionGenericObjects; -public class WarshipSharingService : AbstractCompany +public class Docks : AbstractCompany { - public WarshipSharingService(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection) + public Docks(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection) { } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs index 2956b5b..c242008 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -22,7 +22,7 @@ public interface ICollectionGenericObjects /// /// Добавляемый объект /// true - вставка прошла удачно, false - вставка не удалась - bool Insert(T obj); + int Insert(T obj); /// /// Добавление объекта в коллекцию на конкретную позицию @@ -30,14 +30,14 @@ public interface ICollectionGenericObjects /// Добавляемый объект /// Позиция /// true - вставка прошла удачно, false - вставка не удалась - bool Insert(T obj, int position); + int Insert(T obj, int position); /// /// Удаление объекта из коллекции с конкретной позиции /// /// Позиция /// true - удаление прошло удачно, false - удаление не удалось - bool Remove(int position); + T? Remove(int position); /// /// Получение объекта по позиции diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs index edd7ca5..a3c5478 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs @@ -34,7 +34,7 @@ public class MassiveGenericObjects : ICollectionGenericObjects return _collection[position]; } - public bool Insert(T obj) + public int Insert(T obj) { // TODO вставка в свободное место набора for (int i = 0; i < Count; i++) @@ -42,13 +42,13 @@ public class MassiveGenericObjects : ICollectionGenericObjects if (_collection[i] == null) { _collection[i] = obj; - return true; + return i; } } - return false; + return -1; } - public bool Insert(T obj, int position) + public int Insert(T obj, int position) { // TODO проверка позиции // TODO проверка, что элемент массива по этой позиции пустой, если нет, то @@ -57,13 +57,13 @@ public class MassiveGenericObjects : ICollectionGenericObjects // TODO вставка if (position < 0 || position > Count) { - return false; + return -1; } if (_collection[position] == null) { _collection[position] = obj; - return true; + return position; } for (int i = position + 1; i < Count; i++) @@ -71,7 +71,7 @@ public class MassiveGenericObjects : ICollectionGenericObjects if (_collection[i] == null) { _collection[i] = obj; - return true; + return position; } } @@ -80,24 +80,25 @@ public class MassiveGenericObjects : ICollectionGenericObjects if (_collection[i] == null) { _collection[i] = obj; - return true; + return position; } } - return false; + return -1; } - public bool Remove(int position) + public T? Remove(int position) { // TODO проверка позиции // TODO удаление объекта из массива, присвоив элементу массива значение null if (position < 0 || position > Count || _collection[position] == null) { - return false; + return null; } + T? obj = _collection[position]; _collection[position] = null; - return true; + return obj; } } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs index 69a7069..0b2af67 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs @@ -31,7 +31,7 @@ public partial class FormWarshipCollection : Form switch (comboBoxSelectorCompany.Text) { case "Хранилище": - _company = new WarshipSharingService(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); + _company = new Docks(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); break; } } -- 2.25.1 From e10acc347558a49a30e3bc7a99d752c9199763c1 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 20 Mar 2024 16:49:47 +0400 Subject: [PATCH 08/10] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC=D0=B5=20FormWarshipC?= =?UTF-8?q?ollection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectAircraftCarrier_/FormWarshipCollection.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs index 0b2af67..577429a 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs @@ -63,7 +63,7 @@ public partial class FormWarshipCollection : Form return; } - if (_company + drawningWarship) + if (_company + drawningWarship != -1) { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); @@ -123,7 +123,7 @@ public partial class FormWarshipCollection : Form } int pos = Convert.ToInt32(maskedTextBoxPosition.Text); - if (_company - pos) + if (_company - pos != null) { MessageBox.Show("Объект удален"); pictureBox.Image = _company.Show(); -- 2.25.1 From 24c583a1df9a9d3e771bcf5b469f42048b138622 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Tue, 2 Apr 2024 21:12:19 +0400 Subject: [PATCH 09/10] =?UTF-8?q?=D0=9A=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BD=D0=B0=20=D0=BC=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D0=B2=D0=B5=20=D0=BD=D0=B5=20=D1=85=D0=BE=D1=87=D0=B5?= =?UTF-8?q?=D1=82=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D1=8F=D1=82=D1=8C?= =?UTF-8?q?=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractCompany.cs | 2 +- .../CollectionType.cs | 22 ++ .../ICollectionGenericObjects.cs | 6 +- .../ListGenericObject.cs | 86 ++++++ .../MassiveGenericObjects.cs | 19 +- .../StorageCollection.cs | 90 +++++++ .../FormWarshipCollection.Designer.cs | 245 +++++++++++++----- .../FormWarshipCollection.cs | 117 ++++++++- 8 files changed, 502 insertions(+), 85 deletions(-) create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/CollectionType.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs create mode 100644 ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs index 4bedf0b..377357a 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs @@ -59,7 +59,7 @@ public abstract class AbstractCompany /// public static int operator +(AbstractCompany company, DrawningWarship warship) { - return company._collection.Insert(warship); + return company._collection.Insert(warship, 0); } /// diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/CollectionType.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/CollectionType.cs new file mode 100644 index 0000000..2110f55 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/CollectionType.cs @@ -0,0 +1,22 @@ +namespace ProjectAircraftCarrier_.CollectionGenericObjects; + +/// +/// Тип коллекции +/// +public enum CollectionType +{ + /// + /// Неопределено + /// + None = 0, + + /// + /// Массив + /// + Massive = 1, + + /// + /// Список + /// + List = 2 +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs index c242008..d193837 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -21,7 +21,7 @@ public interface ICollectionGenericObjects /// Добавление объекта в коллекцию /// /// Добавляемый объект - /// true - вставка прошла удачно, false - вставка не удалась + /// индекс добавленного элемента - вставка прошла удачно, -1 - вставка не удалась int Insert(T obj); /// @@ -29,14 +29,14 @@ public interface ICollectionGenericObjects /// /// Добавляемый объект /// Позиция - /// true - вставка прошла удачно, false - вставка не удалась + /// индекс добавленного элемента - вставка прошла удачно, -1 - вставка не удалась int Insert(T obj, int position); /// /// Удаление объекта из коллекции с конкретной позиции /// /// Позиция - /// true - удаление прошло удачно, false - удаление не удалось + /// удаленный объект - удаление прошло удачно, null - удаление не удалось T? Remove(int position); /// diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs new file mode 100644 index 0000000..295a33b --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs @@ -0,0 +1,86 @@ +using System.CodeDom.Compiler; + +namespace ProjectAircraftCarrier_.CollectionGenericObjects; + +/// +/// Параметризованный набор объектов +/// +/// Параметр: ограничение - ссылочный тип +public class ListGenericObject : ICollectionGenericObjects + where T : class +{ + /// + /// Список объектов, которые храним + /// + private readonly List _collection; + + /// + /// Максимально допустимое число объектов в списке + /// + private int _maxCount; + + public int Count => _collection.Count; + + public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } } + + /// + /// Конструктор + /// + public ListGenericObject() + { + _collection = new(); + } + + public T? Get(int position) + { + // TODO проверка позиции + if (position < 0 || position >= Count) + { + return null; + } + + return _collection[position]; + } + + public int Insert(T obj) + { + // TODO проверка, что не превышено максимальное количество элементов + // TODO вставка в конец набора + if (Count == _maxCount) + { + return -1; + } + + _collection.Add(obj); + return _collection.Count; + } + + public int Insert(T obj, int position) + { + // TODO проверка, что не превышено максимальное количество элементов + // TODO проверка позиции + // TODO вставка по позиции + if (Count == _maxCount || position < 0 || position > Count) + { + return -1; + } + + _collection.Insert(position, obj); + return position; + } + + public T? Remove(int position) + { + // TODO проверка позиции + // TODO удаление объекта из списка + if (position < 0 || position > Count) + { + return null; + } + + T? obj = _collection[position]; + _collection.RemoveAt(position); + + return obj; + } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs index a3c5478..5d8b3b3 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs @@ -26,8 +26,7 @@ public class MassiveGenericObjects : ICollectionGenericObjects public T? Get(int position) { - // TODO проверка позиции - if (position < 0 || position > Count) + if (position < 0 || position >= Count) { return null; } @@ -36,7 +35,6 @@ public class MassiveGenericObjects : ICollectionGenericObjects public int Insert(T obj) { - // TODO вставка в свободное место набора for (int i = 0; i < Count; i++) { if (_collection[i] == null) @@ -50,12 +48,7 @@ public class MassiveGenericObjects : ICollectionGenericObjects public int Insert(T obj, int position) { - // TODO проверка позиции - // TODO проверка, что элемент массива по этой позиции пустой, если нет, то - // ищется свободное место после этой позиции и идет вставка туда - // если нет после, ищем до - // TODO вставка - if (position < 0 || position > Count) + if (position < 0 || position >= Count) { return -1; } @@ -71,7 +64,7 @@ public class MassiveGenericObjects : ICollectionGenericObjects if (_collection[i] == null) { _collection[i] = obj; - return position; + return i; } } @@ -80,7 +73,7 @@ public class MassiveGenericObjects : ICollectionGenericObjects if (_collection[i] == null) { _collection[i] = obj; - return position; + return i; } } @@ -89,9 +82,7 @@ public class MassiveGenericObjects : ICollectionGenericObjects public T? Remove(int position) { - // TODO проверка позиции - // TODO удаление объекта из массива, присвоив элементу массива значение null - if (position < 0 || position > Count || _collection[position] == null) + if (position < 0 || position >= Count || _collection[position] == null) { return null; } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs new file mode 100644 index 0000000..83d4730 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs @@ -0,0 +1,90 @@ +using ProjectAircraftCarrier_.Drawnings; +using ProjectAircraftCarrier_.CollectionGenericObjects; + +namespace ProjectAircraftCarrier_.CollectionGenericObjects; + +/// +/// Класс-хранилище коллекций +/// +/// +public class StorageCollection + where T : class +{ + /// + /// Словарь (хранилище) с коллекциями + /// + readonly Dictionary> _storages; + + /// + /// Возвращение списка названий коллекций + /// + public List Keys => _storages.Keys.ToList(); + + /// + /// Конструктор + /// + public StorageCollection() + { + _storages = new Dictionary>(); + } + + /// + /// Добавление коллекции в хранилище + /// + /// Название коллекции + /// Тип коллекции + public void AddCollection(string name, CollectionType collectionType) + { + // TODO проверка, что name не пустой и нет в словаре записи с таким ключом + // TODO Прописать логику для добавления + if (name == null || _storages.ContainsKey(name)) + { + return; + } + + if (collectionType == CollectionType.Massive) + { + _storages.Add(name, new MassiveGenericObjects()); + } + + if (collectionType == CollectionType.List) + { + _storages.Add(name, new ListGenericObject()); + } + } + + /// + /// Удаление коллекции + /// + /// Название коллекции + public void DelCollection(string name) + { + // TODO Прописать логику для удаления коллекции + if (name == null || !_storages.ContainsKey(name)) + { + return; + } + + _storages.Remove(name); + } + + /// + /// Доступ к коллекции + /// + /// Название коллекции + /// + public ICollectionGenericObjects? this[string name] + { + get + { + // TODO Продумать логику получения объекта + if (_storages.ContainsKey(name)) + { + return _storages[name]; + } + + return null; + } + } +} + diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs index f3ba626..c977f39 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs @@ -29,81 +29,63 @@ private void InitializeComponent() { groupBoxTools = new GroupBox(); - buttonRefresh = new Button(); - buttonGoToCheck = new Button(); - buttonRemoveWarship = new Button(); - maskedTextBoxPosition = new MaskedTextBox(); + panelCompanyTools = new Panel(); buttonAddAircraftCarrier = new Button(); buttonAddWarship = new Button(); + maskedTextBoxPosition = new MaskedTextBox(); + buttonRefresh = new Button(); + buttonRemoveWarship = new Button(); + buttonGoToCheck = new Button(); + buttonCreateCompany = new Button(); + panelStorage = new Panel(); + buttonCollectionDel = new Button(); + listBoxCollection = new ListBox(); + buttonCollectionAdd = new Button(); + radioButtonList = new RadioButton(); + radioButtonMassive = new RadioButton(); + textBoxCollectionName = new TextBox(); + labelCollectionName = new Label(); comboBoxSelectorCompany = new ComboBox(); pictureBox = new PictureBox(); groupBoxTools.SuspendLayout(); + panelCompanyTools.SuspendLayout(); + panelStorage.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); SuspendLayout(); // // groupBoxTools // - groupBoxTools.Controls.Add(buttonRefresh); - groupBoxTools.Controls.Add(buttonGoToCheck); - groupBoxTools.Controls.Add(buttonRemoveWarship); - groupBoxTools.Controls.Add(maskedTextBoxPosition); - groupBoxTools.Controls.Add(buttonAddAircraftCarrier); - groupBoxTools.Controls.Add(buttonAddWarship); + groupBoxTools.Controls.Add(panelCompanyTools); + groupBoxTools.Controls.Add(buttonCreateCompany); + groupBoxTools.Controls.Add(panelStorage); groupBoxTools.Controls.Add(comboBoxSelectorCompany); groupBoxTools.Dock = DockStyle.Right; - groupBoxTools.Location = new Point(1126, 0); + groupBoxTools.Location = new Point(1176, 0); groupBoxTools.Name = "groupBoxTools"; - groupBoxTools.Size = new Size(326, 912); + groupBoxTools.Size = new Size(326, 961); groupBoxTools.TabIndex = 0; groupBoxTools.TabStop = false; groupBoxTools.Text = "Инструменты"; // - // buttonRefresh + // panelCompanyTools // - buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonRefresh.Location = new Point(6, 767); - buttonRefresh.Name = "buttonRefresh"; - buttonRefresh.Size = new Size(314, 72); - buttonRefresh.TabIndex = 6; - buttonRefresh.Text = "Обновить"; - buttonRefresh.UseVisualStyleBackColor = true; - buttonRefresh.Click += ButtonRefresh_Click; - // - // buttonGoToCheck - // - buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonGoToCheck.Location = new Point(6, 595); - buttonGoToCheck.Name = "buttonGoToCheck"; - buttonGoToCheck.Size = new Size(314, 72); - buttonGoToCheck.TabIndex = 5; - buttonGoToCheck.Text = "Передать на тесты"; - buttonGoToCheck.UseVisualStyleBackColor = true; - buttonGoToCheck.Click += ButtonGoToCheck_Click; - // - // buttonRemoveWarship - // - buttonRemoveWarship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonRemoveWarship.Location = new Point(6, 432); - buttonRemoveWarship.Name = "buttonRemoveWarship"; - buttonRemoveWarship.Size = new Size(314, 72); - buttonRemoveWarship.TabIndex = 4; - buttonRemoveWarship.Text = "Удаление военного корабля"; - buttonRemoveWarship.UseVisualStyleBackColor = true; - buttonRemoveWarship.Click += ButtonRemoveWarship_Click; - // - // maskedTextBoxPosition - // - maskedTextBoxPosition.Location = new Point(6, 391); - maskedTextBoxPosition.Mask = "00"; - maskedTextBoxPosition.Name = "maskedTextBoxPosition"; - maskedTextBoxPosition.Size = new Size(314, 35); - maskedTextBoxPosition.TabIndex = 3; - maskedTextBoxPosition.ValidatingType = typeof(int); + panelCompanyTools.Controls.Add(buttonAddAircraftCarrier); + panelCompanyTools.Controls.Add(buttonAddWarship); + panelCompanyTools.Controls.Add(maskedTextBoxPosition); + panelCompanyTools.Controls.Add(buttonRefresh); + panelCompanyTools.Controls.Add(buttonRemoveWarship); + panelCompanyTools.Controls.Add(buttonGoToCheck); + panelCompanyTools.Dock = DockStyle.Bottom; + panelCompanyTools.Enabled = false; + panelCompanyTools.Location = new Point(3, 529); + panelCompanyTools.Name = "panelCompanyTools"; + panelCompanyTools.Size = new Size(320, 429); + panelCompanyTools.TabIndex = 9; // // buttonAddAircraftCarrier // buttonAddAircraftCarrier.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddAircraftCarrier.Location = new Point(6, 232); + buttonAddAircraftCarrier.Location = new Point(3, 81); buttonAddAircraftCarrier.Name = "buttonAddAircraftCarrier"; buttonAddAircraftCarrier.Size = new Size(314, 72); buttonAddAircraftCarrier.TabIndex = 2; @@ -114,7 +96,7 @@ // buttonAddWarship // buttonAddWarship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddWarship.Location = new Point(6, 154); + buttonAddWarship.Location = new Point(3, 3); buttonAddWarship.Name = "buttonAddWarship"; buttonAddWarship.Size = new Size(314, 72); buttonAddWarship.TabIndex = 1; @@ -122,13 +104,147 @@ buttonAddWarship.UseVisualStyleBackColor = true; buttonAddWarship.Click += ButtonAddWarship_Click; // + // maskedTextBoxPosition + // + maskedTextBoxPosition.Location = new Point(3, 159); + maskedTextBoxPosition.Mask = "00"; + maskedTextBoxPosition.Name = "maskedTextBoxPosition"; + maskedTextBoxPosition.Size = new Size(314, 35); + maskedTextBoxPosition.TabIndex = 3; + maskedTextBoxPosition.ValidatingType = typeof(int); + // + // buttonRefresh + // + buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonRefresh.Location = new Point(3, 356); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(314, 72); + buttonRefresh.TabIndex = 6; + buttonRefresh.Text = "Обновить"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += ButtonRefresh_Click; + // + // buttonRemoveWarship + // + buttonRemoveWarship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonRemoveWarship.Location = new Point(3, 200); + buttonRemoveWarship.Name = "buttonRemoveWarship"; + buttonRemoveWarship.Size = new Size(314, 72); + buttonRemoveWarship.TabIndex = 4; + buttonRemoveWarship.Text = "Удаление военного корабля"; + buttonRemoveWarship.UseVisualStyleBackColor = true; + buttonRemoveWarship.Click += ButtonRemoveWarship_Click; + // + // buttonGoToCheck + // + buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonGoToCheck.Location = new Point(3, 278); + buttonGoToCheck.Name = "buttonGoToCheck"; + buttonGoToCheck.Size = new Size(314, 72); + buttonGoToCheck.TabIndex = 5; + buttonGoToCheck.Text = "Передать на тесты"; + buttonGoToCheck.UseVisualStyleBackColor = true; + buttonGoToCheck.Click += ButtonGoToCheck_Click; + // + // buttonCreateCompany + // + buttonCreateCompany.Location = new Point(6, 472); + buttonCreateCompany.Name = "buttonCreateCompany"; + buttonCreateCompany.Size = new Size(314, 40); + buttonCreateCompany.TabIndex = 8; + buttonCreateCompany.Text = "Создать компанию"; + buttonCreateCompany.UseVisualStyleBackColor = true; + buttonCreateCompany.Click += ButtonCreateCompany_Click; + // + // panelStorage + // + panelStorage.Controls.Add(buttonCollectionDel); + panelStorage.Controls.Add(listBoxCollection); + panelStorage.Controls.Add(buttonCollectionAdd); + panelStorage.Controls.Add(radioButtonList); + panelStorage.Controls.Add(radioButtonMassive); + panelStorage.Controls.Add(textBoxCollectionName); + panelStorage.Controls.Add(labelCollectionName); + panelStorage.Dock = DockStyle.Top; + panelStorage.Location = new Point(3, 31); + panelStorage.Name = "panelStorage"; + panelStorage.Size = new Size(320, 382); + panelStorage.TabIndex = 7; + // + // buttonCollectionDel + // + buttonCollectionDel.Location = new Point(3, 331); + buttonCollectionDel.Name = "buttonCollectionDel"; + buttonCollectionDel.Size = new Size(314, 40); + buttonCollectionDel.TabIndex = 6; + buttonCollectionDel.Text = "Удалить коллекцию"; + buttonCollectionDel.UseVisualStyleBackColor = true; + buttonCollectionDel.Click += ButtonCollectionDel_Click; + // + // listBoxCollection + // + listBoxCollection.FormattingEnabled = true; + listBoxCollection.ItemHeight = 30; + listBoxCollection.Location = new Point(3, 171); + listBoxCollection.Name = "listBoxCollection"; + listBoxCollection.Size = new Size(314, 154); + listBoxCollection.TabIndex = 5; + // + // buttonCollectionAdd + // + buttonCollectionAdd.Location = new Point(3, 125); + buttonCollectionAdd.Name = "buttonCollectionAdd"; + buttonCollectionAdd.Size = new Size(314, 40); + buttonCollectionAdd.TabIndex = 4; + buttonCollectionAdd.Text = "Добавить коллекцию"; + buttonCollectionAdd.UseVisualStyleBackColor = true; + buttonCollectionAdd.Click += ButtonCollectionAdd_Click; + // + // radioButtonList + // + radioButtonList.AutoSize = true; + radioButtonList.Location = new Point(193, 85); + radioButtonList.Name = "radioButtonList"; + radioButtonList.Size = new Size(107, 34); + radioButtonList.TabIndex = 3; + radioButtonList.TabStop = true; + radioButtonList.Text = "Список"; + radioButtonList.UseVisualStyleBackColor = true; + // + // radioButtonMassive + // + radioButtonMassive.AutoSize = true; + radioButtonMassive.Location = new Point(23, 85); + radioButtonMassive.Name = "radioButtonMassive"; + radioButtonMassive.Size = new Size(111, 34); + radioButtonMassive.TabIndex = 2; + radioButtonMassive.TabStop = true; + radioButtonMassive.Text = "Массив"; + radioButtonMassive.UseVisualStyleBackColor = true; + // + // textBoxCollectionName + // + textBoxCollectionName.Location = new Point(3, 44); + textBoxCollectionName.Name = "textBoxCollectionName"; + textBoxCollectionName.Size = new Size(314, 35); + textBoxCollectionName.TabIndex = 1; + // + // labelCollectionName + // + labelCollectionName.AutoSize = true; + labelCollectionName.Location = new Point(58, 11); + labelCollectionName.Name = "labelCollectionName"; + labelCollectionName.Size = new Size(213, 30); + labelCollectionName.TabIndex = 0; + labelCollectionName.Text = "Название коллекции"; + // // comboBoxSelectorCompany // comboBoxSelectorCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxSelectorCompany.FormattingEnabled = true; comboBoxSelectorCompany.Items.AddRange(new object[] { "Хранилище" }); - comboBoxSelectorCompany.Location = new Point(6, 34); + comboBoxSelectorCompany.Location = new Point(6, 428); comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; comboBoxSelectorCompany.Size = new Size(314, 38); comboBoxSelectorCompany.TabIndex = 0; @@ -139,7 +255,7 @@ pictureBox.Dock = DockStyle.Fill; pictureBox.Location = new Point(0, 0); pictureBox.Name = "pictureBox"; - pictureBox.Size = new Size(1126, 912); + pictureBox.Size = new Size(1176, 961); pictureBox.TabIndex = 1; pictureBox.TabStop = false; // @@ -147,13 +263,16 @@ // AutoScaleDimensions = new SizeF(12F, 30F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1452, 912); + ClientSize = new Size(1502, 961); Controls.Add(pictureBox); Controls.Add(groupBoxTools); Name = "FormWarshipCollection"; Text = "Коллекция военных кораблей"; groupBoxTools.ResumeLayout(false); - groupBoxTools.PerformLayout(); + panelCompanyTools.ResumeLayout(false); + panelCompanyTools.PerformLayout(); + panelStorage.ResumeLayout(false); + panelStorage.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); ResumeLayout(false); } @@ -169,5 +288,15 @@ private Button buttonGoToCheck; private Button buttonRemoveWarship; private MaskedTextBox maskedTextBoxPosition; + private Panel panelStorage; + private RadioButton radioButtonList; + private RadioButton radioButtonMassive; + private TextBox textBoxCollectionName; + private Label labelCollectionName; + private Button buttonCollectionDel; + private ListBox listBoxCollection; + private Button buttonCollectionAdd; + private Button buttonCreateCompany; + private Panel panelCompanyTools; } } \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs index 577429a..6954e42 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs @@ -8,6 +8,11 @@ namespace ProjectAircraftCarrier_; /// public partial class FormWarshipCollection : Form { + /// + /// Хранилище коллекций + /// + private readonly StorageCollection _storageCollection; + /// /// Компания /// @@ -19,6 +24,7 @@ public partial class FormWarshipCollection : Form public FormWarshipCollection() { InitializeComponent(); + _storageCollection = new(); } /// @@ -28,12 +34,7 @@ public partial class FormWarshipCollection : Form /// private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) { - switch (comboBoxSelectorCompany.Text) - { - case "Хранилище": - _company = new Docks(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); - break; - } + panelCompanyTools.Enabled = false; } /// @@ -55,8 +56,7 @@ public partial class FormWarshipCollection : Form drawningWarship = new DrawningWarship(random.Next(100, 300), random.Next(1000, 3000), GetColor(random)); break; case nameof(DrawningAircraftCarrier): - // TODO вызов диалогового окна для выбора цвета - drawningWarship = new DrawningAircraftCarrier(random.Next(100, 300), random.Next(1000, 3000), GetColor(random), GetColor(random), + drawningWarship = new DrawningAircraftCarrier(random.Next(100, 300), random.Next(1000, 3000), GetColor(random), GetColor(random), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); break; default: @@ -117,7 +117,7 @@ public partial class FormWarshipCollection : Form return; } - if (MessageBox.Show("Удалить объект", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } @@ -184,4 +184,103 @@ public partial class FormWarshipCollection : Form pictureBox.Image = _company.Show(); } + + /// + /// Добавление коллекции + /// + /// + /// + private void ButtonCollectionAdd_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked)) + { + MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + CollectionType collectionType = CollectionType.None; + if (radioButtonMassive.Checked) + { + collectionType = CollectionType.Massive; + } + else if (radioButtonList.Checked) + { + collectionType = CollectionType.List; + } + + _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + RerfreshListBoxItems(); + } + + /// + /// Удаление коллекции + /// + /// + /// + private void ButtonCollectionDel_Click(object sender, EventArgs e) + { + // TODO прописать логику удаления элемента из коллекции + // нужно убедиться, что есть выбранная коллекция + // спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись + // удалить и обновить ListBox + if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) + { + MessageBox.Show("Коллекция не выбрана"); + return; + } + + if (MessageBox.Show("Вы уверены, что хотите удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) + { + return; + } + _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + RerfreshListBoxItems(); + } + + /// + /// Обновление списка в listBoxCollection + /// + private void RerfreshListBoxItems() + { + listBoxCollection.Items.Clear(); + for (int i = 0; i < _storageCollection.Keys?.Count; ++i) + { + string? colName = _storageCollection.Keys?[i]; + if (!string.IsNullOrEmpty(colName)) + { + listBoxCollection.Items.Add(colName); + } + } + } + + /// + /// Создание компании + /// + /// + /// + private void ButtonCreateCompany_Click(object sender, EventArgs e) + { + if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) + { + MessageBox.Show("Коллекция не выбрана"); + return; + } + + ICollectionGenericObjects? collection = _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty]; + if (collection == null) + { + MessageBox.Show("Коллекция не проинициализирована"); + return; + } + + switch (comboBoxSelectorCompany.Text) + { + case "Хранилище": + _company = new Docks(pictureBox.Width, pictureBox.Height, collection); + break; + } + panelCompanyTools.Enabled = true; + RerfreshListBoxItems(); + + } } -- 2.25.1 From 1356265089140a16690e1db99d9859abd4a1eaa7 Mon Sep 17 00:00:00 2001 From: sheymuh Date: Wed, 3 Apr 2024 17:14:44 +0400 Subject: [PATCH 10/10] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ListGenericObject.cs | 8 -------- .../MassiveGenericObjects.cs | 18 +++++++++++++++++- .../StorageCollection.cs | 8 ++------ .../FormWarshipCollection.cs | 5 ----- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs index 295a33b..565ec2d 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObject.cs @@ -33,7 +33,6 @@ public class ListGenericObject : ICollectionGenericObjects public T? Get(int position) { - // TODO проверка позиции if (position < 0 || position >= Count) { return null; @@ -44,8 +43,6 @@ public class ListGenericObject : ICollectionGenericObjects public int Insert(T obj) { - // TODO проверка, что не превышено максимальное количество элементов - // TODO вставка в конец набора if (Count == _maxCount) { return -1; @@ -57,9 +54,6 @@ public class ListGenericObject : ICollectionGenericObjects public int Insert(T obj, int position) { - // TODO проверка, что не превышено максимальное количество элементов - // TODO проверка позиции - // TODO вставка по позиции if (Count == _maxCount || position < 0 || position > Count) { return -1; @@ -71,8 +65,6 @@ public class ListGenericObject : ICollectionGenericObjects public T? Remove(int position) { - // TODO проверка позиции - // TODO удаление объекта из списка if (position < 0 || position > Count) { return null; diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs index 5d8b3b3..851a207 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs @@ -14,7 +14,23 @@ public class MassiveGenericObjects : ICollectionGenericObjects public int Count => _collection.Length; - public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } + public int SetMaxCount + { + set + { + if (value > 0) + { + if (_collection.Length > 0) + { + Array.Resize(ref _collection, value); + } + else + { + _collection = new T?[value]; + } + } + } + } /// /// Конструктор diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs index 83d4730..e49e591 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs @@ -1,5 +1,6 @@ using ProjectAircraftCarrier_.Drawnings; using ProjectAircraftCarrier_.CollectionGenericObjects; +using System.Xml.Linq; namespace ProjectAircraftCarrier_.CollectionGenericObjects; @@ -35,8 +36,6 @@ public class StorageCollection /// Тип коллекции public void AddCollection(string name, CollectionType collectionType) { - // TODO проверка, что name не пустой и нет в словаре записи с таким ключом - // TODO Прописать логику для добавления if (name == null || _storages.ContainsKey(name)) { return; @@ -59,7 +58,6 @@ public class StorageCollection /// Название коллекции public void DelCollection(string name) { - // TODO Прописать логику для удаления коллекции if (name == null || !_storages.ContainsKey(name)) { return; @@ -77,7 +75,6 @@ public class StorageCollection { get { - // TODO Продумать логику получения объекта if (_storages.ContainsKey(name)) { return _storages[name]; @@ -86,5 +83,4 @@ public class StorageCollection return null; } } -} - +} \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs index 6954e42..7d45fa5 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs @@ -219,10 +219,6 @@ public partial class FormWarshipCollection : Form /// private void ButtonCollectionDel_Click(object sender, EventArgs e) { - // TODO прописать логику удаления элемента из коллекции - // нужно убедиться, что есть выбранная коллекция - // спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись - // удалить и обновить ListBox if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) { MessageBox.Show("Коллекция не выбрана"); @@ -281,6 +277,5 @@ public partial class FormWarshipCollection : Form } panelCompanyTools.Enabled = true; RerfreshListBoxItems(); - } } -- 2.25.1