From 3d28f936f935d5a42dccbd53b532f76670918d48 Mon Sep 17 00:00:00 2001 From: "leonteva.v" Date: Sat, 18 May 2024 16:14:16 +0400 Subject: [PATCH] 3 lab --- .../AbstractCompany.cs | 119 +++++++ .../ICollectionGenericObjects.cs | 50 +++ .../MassiveGenericObjects.cs | 109 ++++++ .../CollectionGenericObjects/ShipDocks.cs | 59 ++++ .../{ => Drawnings}/DirectionType.cs | 2 +- .../{ => Drawnings}/DrawingBattleship.cs | 2 +- .../{ => Drawnings}/DrawingShip.cs | 2 +- .../{ => Entities}/EntityBattleship.cs | 0 .../{ => Entities}/EntityShip.cs | 0 .../FormBattleship.Designer.cs | 312 ++++++++---------- .../ProjectBattleship/FormBattleship.cs | 212 ++++++------ .../ProjectBattleship/FormBattleship.resx | 8 +- .../FormShipCollection.Designer.cs | 174 ++++++++++ .../ProjectBattleship/FormShipCollection.cs | 167 ++++++++++ .../ProjectBattleship/FormShipCollection.resx | 120 +++++++ .../AbstractStrategy.cs | 4 +- .../{ => MovementStrategy}/IMoveableObject.cs | 0 .../{ => MovementStrategy}/MoveToBorder.cs | 0 .../{ => MovementStrategy}/MoveToCenter.cs | 0 .../{ => MovementStrategy}/MoveableShip.cs | 2 +- .../MovementDirection.cs | 0 .../ObjectParameters.cs | 0 .../{ => MovementStrategy}/StrategyStatus.cs | 2 +- .../ProjectBattleship/Program.cs | 4 +- 24 files changed, 1051 insertions(+), 297 deletions(-) create mode 100644 ProjectBattleship/ProjectBattleship/CollectionGenericObjects/AbstractCompany.cs create mode 100644 ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ICollectionGenericObjects.cs create mode 100644 ProjectBattleship/ProjectBattleship/CollectionGenericObjects/MassiveGenericObjects.cs create mode 100644 ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ShipDocks.cs rename ProjectBattleship/ProjectBattleship/{ => Drawnings}/DirectionType.cs (76%) rename ProjectBattleship/ProjectBattleship/{ => Drawnings}/DrawingBattleship.cs (98%) rename ProjectBattleship/ProjectBattleship/{ => Drawnings}/DrawingShip.cs (99%) rename ProjectBattleship/ProjectBattleship/{ => Entities}/EntityBattleship.cs (100%) rename ProjectBattleship/ProjectBattleship/{ => Entities}/EntityShip.cs (100%) create mode 100644 ProjectBattleship/ProjectBattleship/FormShipCollection.Designer.cs create mode 100644 ProjectBattleship/ProjectBattleship/FormShipCollection.cs create mode 100644 ProjectBattleship/ProjectBattleship/FormShipCollection.resx rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/AbstractStrategy.cs (95%) rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/IMoveableObject.cs (100%) rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/MoveToBorder.cs (100%) rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/MoveToCenter.cs (100%) rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/MoveableShip.cs (97%) rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/MovementDirection.cs (100%) rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/ObjectParameters.cs (100%) rename ProjectBattleship/ProjectBattleship/{ => MovementStrategy}/StrategyStatus.cs (66%) diff --git a/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/AbstractCompany.cs b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/AbstractCompany.cs new file mode 100644 index 0000000..ade4314 --- /dev/null +++ b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/AbstractCompany.cs @@ -0,0 +1,119 @@ +using ProjectBattleship.Drawnings; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectBattleship.CollectionGenericObjects; +/// +/// Абстракция компании, хранящий коллекцию кораблей +/// +public abstract class AbstractCompany +{ + /// + /// Размер места (ширина) + /// + protected readonly int _placeSizeWidth = 210; + + /// + /// Размер места (высота) + /// + protected readonly int _placeSizeHeight = 100; + + /// + /// Ширина окна + /// + 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 int operator +(AbstractCompany company, DrawingShip ship) + { + return company._collection.Insert(ship); + } + + /// + /// Перегрузка оператора удаления для класса + /// + /// Компания + /// Номер удаляемого объекта + /// + public static DrawingShip operator -(AbstractCompany company, int position) + { + return company._collection?.Remove(position); + } + + /// + /// Получение случайного объекта из коллекции + /// + /// + public DrawingShip? 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) + { + DrawingShip? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + + return bitmap; + } + + /// + /// Вывод заднего фона + /// + /// + protected abstract void DrawBackground(Graphics g); + + /// + /// Расстановка объектов + /// + protected abstract void SetObjectsPosition(); +} \ No newline at end of file diff --git a/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ICollectionGenericObjects.cs new file mode 100644 index 0000000..2f06573 --- /dev/null +++ b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ICollectionGenericObjects.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectBattleship.CollectionGenericObjects +{ + public interface ICollectionGenericObjects + where T : class + { + /// + /// Количество объектов в коллекции + /// + int Count { get; } + + /// + /// Установка максимального количества элементов + /// + int SetMaxCount { set; } + + /// + /// Добавление объекта в коллекцию + /// + /// Добавляемый объект + /// true - удачно, false - вставка не удалась + int Insert(T obj); + /// + /// Добавление объекта в коллекцию на конкретную позицию + /// + /// Добавляемый объект + /// Позиция + /// true - удачно, false - вставка не удалась + bool Insert(T obj, int position); + + /// + /// Удаление объекта из коллекции с конкретной позиции + /// + /// Позиция + /// true - удачно, false - удаление не удалось + T? Remove(int position); + + /// + /// Получение объекта по позиции + /// + /// Позиция + /// Объект + T? Get(int position); + } +} diff --git a/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/MassiveGenericObjects.cs new file mode 100644 index 0000000..1c997e0 --- /dev/null +++ b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/MassiveGenericObjects.cs @@ -0,0 +1,109 @@ +using ProjectBattleship.Drawnings; +using ProjectBattleship.CollectionGenericObjects; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +namespace ProjectBattleship.CollectionGenericObjects; +/// +/// Параметризованный набор объектов +/// +/// Параметр: ограничение - ссылочный тип +public class MassiveGenericObjects : ICollectionGenericObjects + where T : class +{ + /// + /// Массив объектов, которые храним + /// + private T?[] _collection; + public int Count => _collection.Length; + /// + /// Установка максимального кол-ва объектов + /// + public int SetMaxCount + { + set + { + if (value > 0) + { + if (_collection.Length > 0) + { + Array.Resize(ref _collection, value); + } + else + { + _collection = new T?[value]; + } + } + } + } + + /// + /// Конструктор + /// + public MassiveGenericObjects() + { + _collection = Array.Empty(); + } + /// + /// Получение объекта по позиции + /// + /// Позиция (индекс) + /// + public T? Get(int position) + { + if (position < 0 || position >= _collection.Length) + return null; + return _collection[position]; + } + public int Insert(T obj) + { + for (int i = 0; i < _collection.Length; i++) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return i; + } + } + return -1; + } + public bool Insert(T obj, int position) + { + if (position < 0 || position >= _collection.Length) // проверка позиции + return false; + if (_collection[position] == null) // Попытка вставить на указанную позицию + { + _collection[position] = obj; + return true; + } + for (int i = position; i < _collection.Length; i++) // попытка вставить объект на позицию после указанной + { + if (_collection[i] == null) + { + _collection[i] = obj; + return true; + } + } + for (int i = 0; i < position; i++) // попытка вставить объект на позицию до указанной + { + if (_collection[i] == null) + { + _collection[i] = obj; + return true; + } + } + return false; + } + public T? Remove(int position) + { + if (position < 0 || position >= _collection.Length || _collection[position] == null) // проверка позиции и наличия объекта + return null; + T? temp = _collection[position]; + _collection[position] = null; + + return temp; + } +} \ No newline at end of file diff --git a/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ShipDocks.cs b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ShipDocks.cs new file mode 100644 index 0000000..68f1030 --- /dev/null +++ b/ProjectBattleship/ProjectBattleship/CollectionGenericObjects/ShipDocks.cs @@ -0,0 +1,59 @@ +using ProjectBattleship.Drawnings; +using ProjectBattleship.CollectionGenericObjects; +using ProjectBattleship.Drawnings; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.AccessControl; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectBattleship.CollectionGenericObjects; + +/// +/// Реализация абстрактной компании - доки с кораблями +/// + public class ShipDocks : AbstractCompany + { + /// + /// Конструктор + /// + /// + /// + /// + public ShipDocks(int picWidth, int picHeight, ICollectionGenericObjects collection) : base(picWidth, picHeight, collection) + { + } + + protected override void DrawBackground(Graphics g) + { + Pen pen = new Pen(Color.Brown, 4); + int x = 0, y = 0; + while (y + _placeSizeHeight < _pictureHeight) + { + while (x + _placeSizeWidth < _pictureWidth) + { + g.DrawLine(pen, x, y, x + _placeSizeWidth, y); + g.DrawLine(pen, x, y, x, y + _placeSizeHeight); + g.DrawLine(pen, x, y + _placeSizeHeight, x + _placeSizeWidth, y + _placeSizeHeight); + x += _placeSizeWidth + 50; + } + y += _placeSizeHeight; + x = 0; + } + } + + protected override void SetObjectsPosition() + { + int count = 0; + for (int iy = _placeSizeHeight * 11 + 5; iy >= 0; iy -= _placeSizeHeight) + { + for (int ix = 5; ix + _placeSizeWidth + 50 < _pictureWidth; ix += _placeSizeWidth + 50) + { + _collection?.Get(count)?.SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(count)?.SetPosition(ix, iy); + count++; + } + } + } +} \ No newline at end of file diff --git a/ProjectBattleship/ProjectBattleship/DirectionType.cs b/ProjectBattleship/ProjectBattleship/Drawnings/DirectionType.cs similarity index 76% rename from ProjectBattleship/ProjectBattleship/DirectionType.cs rename to ProjectBattleship/ProjectBattleship/Drawnings/DirectionType.cs index e6fad8c..2538ef3 100644 --- a/ProjectBattleship/ProjectBattleship/DirectionType.cs +++ b/ProjectBattleship/ProjectBattleship/Drawnings/DirectionType.cs @@ -1,4 +1,4 @@ -namespace ProjectBattleship +namespace ProjectBattleship.Drawnings { public enum DirectionType { diff --git a/ProjectBattleship/ProjectBattleship/DrawingBattleship.cs b/ProjectBattleship/ProjectBattleship/Drawnings/DrawingBattleship.cs similarity index 98% rename from ProjectBattleship/ProjectBattleship/DrawingBattleship.cs rename to ProjectBattleship/ProjectBattleship/Drawnings/DrawingBattleship.cs index dae9010..2b8e5ad 100644 --- a/ProjectBattleship/ProjectBattleship/DrawingBattleship.cs +++ b/ProjectBattleship/ProjectBattleship/Drawnings/DrawingBattleship.cs @@ -1,6 +1,6 @@ using ProjectBattleship.Entities; -namespace ProjectBattleship.Drawning; +namespace ProjectBattleship.Drawnings; public class DrawingBattleship : DrawingShip { public DrawingBattleship(int speed, double weight, Color bodyColor, Color additionalColor, bool turret, bool rocketLauncher) : base(150, 50) diff --git a/ProjectBattleship/ProjectBattleship/DrawingShip.cs b/ProjectBattleship/ProjectBattleship/Drawnings/DrawingShip.cs similarity index 99% rename from ProjectBattleship/ProjectBattleship/DrawingShip.cs rename to ProjectBattleship/ProjectBattleship/Drawnings/DrawingShip.cs index 22f85e4..0394421 100644 --- a/ProjectBattleship/ProjectBattleship/DrawingShip.cs +++ b/ProjectBattleship/ProjectBattleship/Drawnings/DrawingShip.cs @@ -1,6 +1,6 @@ using ProjectBattleship.Entities; -namespace ProjectBattleship.Drawning; +namespace ProjectBattleship.Drawnings; public class DrawingShip { public EntityShip? EntityShip { get; protected set; } diff --git a/ProjectBattleship/ProjectBattleship/EntityBattleship.cs b/ProjectBattleship/ProjectBattleship/Entities/EntityBattleship.cs similarity index 100% rename from ProjectBattleship/ProjectBattleship/EntityBattleship.cs rename to ProjectBattleship/ProjectBattleship/Entities/EntityBattleship.cs diff --git a/ProjectBattleship/ProjectBattleship/EntityShip.cs b/ProjectBattleship/ProjectBattleship/Entities/EntityShip.cs similarity index 100% rename from ProjectBattleship/ProjectBattleship/EntityShip.cs rename to ProjectBattleship/ProjectBattleship/Entities/EntityShip.cs diff --git a/ProjectBattleship/ProjectBattleship/FormBattleship.Designer.cs b/ProjectBattleship/ProjectBattleship/FormBattleship.Designer.cs index a94a03e..2e348e7 100644 --- a/ProjectBattleship/ProjectBattleship/FormBattleship.Designer.cs +++ b/ProjectBattleship/ProjectBattleship/FormBattleship.Designer.cs @@ -1,178 +1,150 @@ namespace ProjectBattleship { - partial class FormBattleship - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; + partial class FormBattleship + { + /// + /// 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); - } + /// + /// 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 + #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() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBattleship)); - pictureBoxBattleship = new PictureBox(); - buttonCreate = new Button(); - buttonLeft = new Button(); - buttonUp = new Button(); - buttonDown = new Button(); - buttonRight = new Button(); - buttonCreateShip = new Button(); - comboBoxStrategy = new ComboBox(); - buttonStrategyStep = new Button(); - ((System.ComponentModel.ISupportInitialize)pictureBoxBattleship).BeginInit(); - SuspendLayout(); - // - // pictureBoxBattleship - // - pictureBoxBattleship.Dock = DockStyle.Fill; - pictureBoxBattleship.Location = new Point(0, 0); - pictureBoxBattleship.Margin = new Padding(3, 4, 3, 4); - pictureBoxBattleship.Name = "pictureBoxBattleship"; - pictureBoxBattleship.Size = new Size(922, 598); - pictureBoxBattleship.SizeMode = PictureBoxSizeMode.AutoSize; - pictureBoxBattleship.TabIndex = 0; - pictureBoxBattleship.TabStop = false; - // - // buttonCreate - // - buttonCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreate.Location = new Point(38, 500); - buttonCreate.Name = "buttonCreate"; - buttonCreate.Size = new Size(121, 62); - buttonCreate.TabIndex = 1; - buttonCreate.Text = "Создать линкор"; - buttonCreate.UseVisualStyleBackColor = true; - buttonCreate.Click += buttonCreate_Click; - // - // buttonLeft - // - buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage"); - buttonLeft.BackgroundImageLayout = ImageLayout.Zoom; - buttonLeft.Location = new Point(734, 525); - buttonLeft.Name = "buttonLeft"; - buttonLeft.Size = new Size(39, 37); - buttonLeft.TabIndex = 2; - buttonLeft.UseVisualStyleBackColor = true; - buttonLeft.Click += ButtonMove_Click; - // - // buttonUp - // - buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage"); - buttonUp.BackgroundImageLayout = ImageLayout.Zoom; - buttonUp.Location = new Point(794, 471); - buttonUp.Name = "buttonUp"; - buttonUp.Size = new Size(39, 37); - buttonUp.TabIndex = 3; - buttonUp.UseVisualStyleBackColor = true; - buttonUp.Click += ButtonMove_Click; - // - // buttonDown - // - buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage"); - buttonDown.BackgroundImageLayout = ImageLayout.Zoom; - buttonDown.Location = new Point(794, 525); - buttonDown.Name = "buttonDown"; - buttonDown.Size = new Size(39, 37); - buttonDown.TabIndex = 4; - buttonDown.UseVisualStyleBackColor = true; - buttonDown.Click += ButtonMove_Click; - // - // buttonRight - // - buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; - buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage"); - buttonRight.BackgroundImageLayout = ImageLayout.Zoom; - buttonRight.Location = new Point(854, 525); - buttonRight.Name = "buttonRight"; - buttonRight.Size = new Size(39, 37); - buttonRight.TabIndex = 5; - buttonRight.UseVisualStyleBackColor = true; - buttonRight.Click += ButtonMove_Click; - // - // buttonCreateShip - // - buttonCreateShip.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; - buttonCreateShip.Location = new Point(212, 500); - buttonCreateShip.Name = "buttonCreateShip"; - buttonCreateShip.Size = new Size(121, 62); - buttonCreateShip.TabIndex = 6; - buttonCreateShip.Text = "Создать корабль"; - buttonCreateShip.UseVisualStyleBackColor = true; - buttonCreateShip.Click += buttonCreateShip_Click; - // - // comboBoxStrategy - // - comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; - comboBoxStrategy.FormattingEnabled = true; - comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); - comboBoxStrategy.Location = new Point(742, 24); - comboBoxStrategy.Name = "comboBoxStrategy"; - comboBoxStrategy.Size = new Size(151, 28); - comboBoxStrategy.TabIndex = 8; - // - // buttonStrategyStep - // - buttonStrategyStep.Location = new Point(799, 74); - buttonStrategyStep.Name = "buttonStrategyStep"; - buttonStrategyStep.Size = new Size(94, 29); - buttonStrategyStep.TabIndex = 10; - buttonStrategyStep.Text = "Шаг"; - buttonStrategyStep.UseVisualStyleBackColor = true; - buttonStrategyStep.Click += buttonStrategyStep_Click; - // - // FormBattleship - // - AutoScaleDimensions = new SizeF(8F, 20F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(922, 598); - Controls.Add(buttonStrategyStep); - Controls.Add(comboBoxStrategy); - Controls.Add(buttonCreateShip); - Controls.Add(buttonRight); - Controls.Add(buttonDown); - Controls.Add(buttonUp); - Controls.Add(buttonLeft); - Controls.Add(buttonCreate); - Controls.Add(pictureBoxBattleship); - Name = "FormBattleship"; - Text = "Линкор"; - ((System.ComponentModel.ISupportInitialize)pictureBoxBattleship).EndInit(); - ResumeLayout(false); - PerformLayout(); - } + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormBattleship)); + pictureBoxBattleship = new PictureBox(); + buttonLeft = new Button(); + buttonUp = new Button(); + buttonDown = new Button(); + buttonRight = new Button(); + comboBoxStrategy = new ComboBox(); + buttonStrategyStep = new Button(); + ((System.ComponentModel.ISupportInitialize)pictureBoxBattleship).BeginInit(); + SuspendLayout(); + // + // pictureBoxBattleship + // + pictureBoxBattleship.Dock = DockStyle.Fill; + pictureBoxBattleship.Location = new Point(0, 0); + pictureBoxBattleship.Margin = new Padding(3, 4, 3, 4); + pictureBoxBattleship.Name = "pictureBoxBattleship"; + pictureBoxBattleship.Size = new Size(922, 598); + pictureBoxBattleship.SizeMode = PictureBoxSizeMode.AutoSize; + pictureBoxBattleship.TabIndex = 0; + pictureBoxBattleship.TabStop = false; + // + // buttonLeft + // + buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage"); + buttonLeft.BackgroundImageLayout = ImageLayout.Zoom; + buttonLeft.Location = new Point(734, 525); + buttonLeft.Name = "buttonLeft"; + buttonLeft.Size = new Size(39, 37); + buttonLeft.TabIndex = 2; + buttonLeft.UseVisualStyleBackColor = true; + buttonLeft.Click += ButtonMove_Click; + // + // buttonUp + // + buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage"); + buttonUp.BackgroundImageLayout = ImageLayout.Zoom; + buttonUp.Location = new Point(794, 471); + buttonUp.Name = "buttonUp"; + buttonUp.Size = new Size(39, 37); + buttonUp.TabIndex = 3; + buttonUp.UseVisualStyleBackColor = true; + buttonUp.Click += ButtonMove_Click; + // + // buttonDown + // + buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage"); + buttonDown.BackgroundImageLayout = ImageLayout.Zoom; + buttonDown.Location = new Point(794, 525); + buttonDown.Name = "buttonDown"; + buttonDown.Size = new Size(39, 37); + buttonDown.TabIndex = 4; + buttonDown.UseVisualStyleBackColor = true; + buttonDown.Click += ButtonMove_Click; + // + // buttonRight + // + buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage"); + buttonRight.BackgroundImageLayout = ImageLayout.Zoom; + buttonRight.Location = new Point(854, 525); + buttonRight.Name = "buttonRight"; + buttonRight.Size = new Size(39, 37); + buttonRight.TabIndex = 5; + buttonRight.UseVisualStyleBackColor = true; + buttonRight.Click += ButtonMove_Click; + // + // comboBoxStrategy + // + comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStrategy.FormattingEnabled = true; + comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" }); + comboBoxStrategy.Location = new Point(742, 24); + comboBoxStrategy.Name = "comboBoxStrategy"; + comboBoxStrategy.Size = new Size(151, 28); + comboBoxStrategy.TabIndex = 8; + // + // buttonStrategyStep + // + buttonStrategyStep.Location = new Point(799, 74); + buttonStrategyStep.Name = "buttonStrategyStep"; + buttonStrategyStep.Size = new Size(94, 29); + buttonStrategyStep.TabIndex = 10; + buttonStrategyStep.Text = "Шаг"; + buttonStrategyStep.UseVisualStyleBackColor = true; + buttonStrategyStep.Click += buttonStrategyStep_Click; + // + // FormBattleship + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(922, 598); + Controls.Add(buttonStrategyStep); + Controls.Add(comboBoxStrategy); + Controls.Add(buttonRight); + Controls.Add(buttonDown); + Controls.Add(buttonUp); + Controls.Add(buttonLeft); + Controls.Add(pictureBoxBattleship); + Name = "FormBattleship"; + Text = "Линкор"; + ((System.ComponentModel.ISupportInitialize)pictureBoxBattleship).EndInit(); + ResumeLayout(false); + PerformLayout(); + } - #endregion + #endregion - private PictureBox pictureBoxBattleship; - private Button buttonCreate; - private Button buttonLeft; - private Button buttonUp; - private Button buttonDown; - private Button buttonRight; - private Button buttonCreateShip; - private ComboBox comboBoxStrategy; - private Button buttonStrategyStep; - } + private PictureBox pictureBoxBattleship; + private Button buttonLeft; + private Button buttonUp; + private Button buttonDown; + private Button buttonRight; + private ComboBox comboBoxStrategy; + private Button buttonStrategyStep; + } } \ No newline at end of file diff --git a/ProjectBattleship/ProjectBattleship/FormBattleship.cs b/ProjectBattleship/ProjectBattleship/FormBattleship.cs index 21b7422..ed5ead8 100644 --- a/ProjectBattleship/ProjectBattleship/FormBattleship.cs +++ b/ProjectBattleship/ProjectBattleship/FormBattleship.cs @@ -1,119 +1,103 @@ -using ProjectBattleship.Drawning; +using ProjectBattleship.Drawnings; using ProjectBattleship.MovementStrategy; -using ProjectBattleship.MovementStrateg; namespace ProjectBattleship { - public partial class FormBattleship : Form - { - private DrawingShip? _drawingShip; - private AbstractStrategy? _strategy; - public FormBattleship() - { - InitializeComponent(); - _strategy = null; - } - private void Draw() - { - if (_drawingShip == null) - { - return; - } - Bitmap bmp = new Bitmap(pictureBoxBattleship.Width, pictureBoxBattleship.Height); - Graphics gr = Graphics.FromImage(bmp); - _drawingShip.DrawTransport(gr); - pictureBoxBattleship.Image = bmp; - } - private void CreateObject(string type) - { - Random random = new(); - switch (type) - { - case nameof(DrawingShip): - _drawingShip = new DrawingShip(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(DrawingBattleship): - _drawingShip = new DrawingBattleship(random.Next(100, 300), random.Next(1000, 3000), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); - break; - default: - return; - } - _drawingShip.SetPictureSize(pictureBoxBattleship.Width, pictureBoxBattleship.Height); - _drawingShip.SetPosition(random.Next(10, 100), random.Next(10, 100)); - _strategy = null; - comboBoxStrategy.Enabled = true; - Draw(); - } - private void buttonCreate_Click(object sender, EventArgs e) => CreateObject(nameof(DrawingBattleship)); - private void ButtonMove_Click(object sender, EventArgs e) - { - if (_drawingShip == null) - { - return; - } - string name = ((Button)sender)?.Name ?? string.Empty; - bool result = false; - switch (name) - { - case "buttonUp": - result = - _drawingShip.MoveTransport(DirectionType.Up); - break; - case "buttonDown": - result = - _drawingShip.MoveTransport(DirectionType.Down); - break; - case "buttonLeft": - result = - _drawingShip.MoveTransport(DirectionType.Left); - break; - case "buttonRight": - result = - _drawingShip.MoveTransport(DirectionType.Right); - break; - } - if (result) - { - Draw(); - } - } - private void buttonCreateShip_Click(object sender, EventArgs e) => CreateObject(nameof(DrawingShip)); - private void buttonStrategyStep_Click(object sender, EventArgs e) - { - if (_drawingShip == null) - { - return; - } - if (comboBoxStrategy.Enabled) - { - _strategy = comboBoxStrategy.SelectedIndex switch - { - 0 => new MoveToCenter(), - 1 => new MoveToBorder(), - _ => null, - }; - if (_strategy == null) - { - return; - } - _strategy.SetData(new MoveableShip(_drawingShip), pictureBoxBattleship.Width, pictureBoxBattleship.Height); - } - if (_strategy == null) - { - return; - } - comboBoxStrategy.Enabled = false; - _strategy.MakeStep(); - Draw(); - if (_strategy.GetStatus() == StrategyStatus.Finish) - { - comboBoxStrategy.Enabled = true; - _strategy = null; - } - } - } + public partial class FormBattleship : Form + { + private DrawingShip? _drawingShip; + private AbstractStrategy? _strategy; + public FormBattleship() + { + InitializeComponent(); + _strategy = null; + } + public DrawingShip SetShip + { + set + { + _drawingShip = value; + _drawingShip.SetPictureSize(pictureBoxBattleship.Width, pictureBoxBattleship.Height); + comboBoxStrategy.Enabled = true; + _strategy = null; + Draw(); + } + } + private void Draw() + { + if (_drawingShip == null) + { + return; + } + Bitmap bmp = new Bitmap(pictureBoxBattleship.Width, pictureBoxBattleship.Height); + Graphics gr = Graphics.FromImage(bmp); + _drawingShip.DrawTransport(gr); + pictureBoxBattleship.Image = bmp; + } + private void ButtonMove_Click(object sender, EventArgs e) + { + if (_drawingShip == null) + { + return; + } + string name = ((Button)sender)?.Name ?? string.Empty; + bool result = false; + switch (name) + { + case "buttonUp": + result = + _drawingShip.MoveTransport(DirectionType.Up); + break; + case "buttonDown": + result = + _drawingShip.MoveTransport(DirectionType.Down); + break; + case "buttonLeft": + result = + _drawingShip.MoveTransport(DirectionType.Left); + break; + case "buttonRight": + result = + _drawingShip.MoveTransport(DirectionType.Right); + break; + } + if (result) + { + Draw(); + } + } + private void buttonStrategyStep_Click(object sender, EventArgs e) + { + if (_drawingShip == null) + { + return; + } + if (comboBoxStrategy.Enabled) + { + _strategy = comboBoxStrategy.SelectedIndex switch + { + 0 => new MoveToCenter(), + 1 => new MoveToBorder(), + _ => null, + }; + if (_strategy == null) + { + return; + } + _strategy.SetData(new MoveableShip(_drawingShip), pictureBoxBattleship.Width, pictureBoxBattleship.Height); + } + if (_strategy == null) + { + return; + } + comboBoxStrategy.Enabled = false; + _strategy.MakeStep(); + Draw(); + if (_strategy.GetStatus() == StrategyStatus.Finish) + { + comboBoxStrategy.Enabled = true; + _strategy = null; + } + } + } } diff --git a/ProjectBattleship/ProjectBattleship/FormBattleship.resx b/ProjectBattleship/ProjectBattleship/FormBattleship.resx index 1bd4ba6..b0c2fc3 100644 --- a/ProjectBattleship/ProjectBattleship/FormBattleship.resx +++ b/ProjectBattleship/ProjectBattleship/FormBattleship.resx @@ -121,7 +121,7 @@ iVBORw0KGgoAAAANSUhEUgAAB44AAAOdCAYAAAB6bE8jAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAahtJREFUeF7s3V+MnXW99/0JIcYQY2rtXH/X/Ok4ljKdmc4MxhBjjDHGGLNjdnY8 + vwAADr8BOAVTJAAAahtJREFUeF7s3V+MnXW99/0JIcYQY2rtXH/X/Ok4ljKdmc4MxhBjjDHGGLNjdnY8 eA7u7EMOnoN9SO4z4iGHHvbANO261hQGEbACKmI3GCKGiOE2hJjG26cCIgICYsFSy/VcA617XOsH9M/M rN+11uudvA7uvRWms9a6muxPvveakCRJktrQ8TSdvX1i4rqL/09JkiRJkiRJkiRJ0jjVy8pvVWnx6sbC wscu/o8kSZIkSZIkSZIkSePQepIkvbS4t0qLepPhWJIkSZIkSZIkSZLGqItXxi9fGo0Nx5IkSZIkSZIk @@ -580,7 +580,7 @@ iVBORw0KGgoAAAANSUhEUgAAA50AAAeOCAYAAAB3IVJsAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAg6NJREFUeF7s/V2MZXWd939XiCGGGINM135Ye9cDbdk0/VBdVZiJMcaYiTHGTIwx + vwAADr8BOAVTJAAAg6NJREFUeF7s/V2MZXWd939XiCGGGINM135Ye9cDbdk0/VBdVZiJMcaYiTHGTIwx HvwPJnPIwX0wh+Q6I3PI4Rz2gSHdu3Y1FCIiAiJiD0yIGCOGvyHEEC//LSIiICA22LTNvtfuXjOjmx9N P6z1++29f6938sqd+3/NKHRX7bU+yffa14IkSbq8RtX/ryRJkiRJtTZoF//Pdqf4/1X/fyVJkiRJqqdj 3e7ydrt4rfTWYM9Kp/r/LEmSJEnS1XX7wsI15dh8tDSq3F/9H0mSJEmSdHUNO8VtfzM4zxt2et+o/o8l @@ -1148,7 +1148,7 @@ iVBORw0KGgoAAAANSUhEUgAAA50AAAeOCAYAAAB3IVJsAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAgjRJREFUeF7s3F+MZQWZ7/0KIYYYQ5Dp3n/W3lVdtG3T9J/qqsJMjDHGTIwxZmIm + vwAADr8BOAVTJAAAgjRJREFUeF7s3F+MZQWZ7/0KIYYYQ5Dp3n/W3lVdtG3T9J/qqsJMjDHGTIwxZmIm Ey8n55LLuSTnzswll3PZF4bQu3Y1FiIiAiI6DEyIGiMTX0OMIRyDioiIDSK00Db73dWsmXF2LxvoXms9 u/bz+Safq/e8R4WqtdYv50ktSZIkSZIkaY7b6g7+bqs3+CIAsCh6nytf85IkxbfVKX601S0mAMCiGDxb vuYlSYrP6ASARWN0SpLmKKMTABaN0SlJmqOMTgBYNEanJGmOMjoBYNEYnZKkOcroBIBFY3RKkuYooxMA @@ -1710,7 +1710,7 @@ iVBORw0KGgoAAAANSUhEUgAAB44AAAOdCAYAAAB6bE8jAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAZi5JREFUeF7s3V2MnXW99/8JIcQQY7DOrHU9rHnoMLZlHtesmh1jDDHGGGOMMcaD + vwAADr8BOAVTJAAAZi5JREFUeF7s3V2MnXW99/8JIcQQY7DOrHU9rHnoMLZlHtesmh1jDDHGGGOMMcaD /8HOPuTgf+Ah2WfEQw497IFp2jVrClMKQoUKiBUMEUPEcJOGmIbbfwWslYeCpdS2ttd/1vRXQb0KnXZm 1u9a6/VOXgf3vd3Qzqxr7WR/8t3XkCRJkiRJkiRJkiRJkiRJkiRJkja4+4aGbtlfr0+E/6ckSZIkSZIk SZIkadBamZ6+bamenesk2b0rQ0O3hP9vSZIkSZIkSZIkSdKgFIbjInh+33C+I/yXJEmSJEmSJEmSJEmD diff --git a/ProjectBattleship/ProjectBattleship/FormShipCollection.Designer.cs b/ProjectBattleship/ProjectBattleship/FormShipCollection.Designer.cs new file mode 100644 index 0000000..e5bacaa --- /dev/null +++ b/ProjectBattleship/ProjectBattleship/FormShipCollection.Designer.cs @@ -0,0 +1,174 @@ +namespace Battleship +{ + partial class FormShipCollection + { + /// + /// 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() + { + Tools = new GroupBox(); + buttonRefresh = new Button(); + buttonGoToTest = new Button(); + buttonDelShip = new Button(); + maskedTextBox = new MaskedTextBox(); + buttonAddBettleship = new Button(); + buttonAddShip = new Button(); + comboBoxSelectorCompany = new ComboBox(); + pictureBox = new PictureBox(); + Tools.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit(); + SuspendLayout(); + // + // Tools + // + Tools.Controls.Add(buttonRefresh); + Tools.Controls.Add(buttonGoToTest); + Tools.Controls.Add(buttonDelShip); + Tools.Controls.Add(maskedTextBox); + Tools.Controls.Add(buttonAddBettleship); + Tools.Controls.Add(buttonAddShip); + Tools.Controls.Add(comboBoxSelectorCompany); + Tools.Dock = DockStyle.Right; + Tools.Location = new Point(1605, 0); + Tools.Name = "Tools"; + Tools.Size = new Size(488, 1236); + Tools.TabIndex = 0; + Tools.TabStop = false; + Tools.Text = "Инструменты"; + // + // buttonRefresh + // + buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonRefresh.Location = new Point(14, 1134); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(468, 90); + buttonRefresh.TabIndex = 6; + buttonRefresh.Text = "Обновить"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += ButtonRefresh_Click; + // + // buttonGoToTest + // + buttonGoToTest.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonGoToTest.Location = new Point(6, 768); + buttonGoToTest.Name = "buttonGoToTest"; + buttonGoToTest.Size = new Size(476, 90); + buttonGoToTest.TabIndex = 5; + buttonGoToTest.Text = "Передать на тест"; + buttonGoToTest.UseVisualStyleBackColor = true; + buttonGoToTest.Click += ButtonGoToTest_Click; + // + // buttonDelShip + // + buttonDelShip.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonDelShip.Location = new Point(6, 573); + buttonDelShip.Name = "buttonDelShip"; + buttonDelShip.Size = new Size(476, 90); + buttonDelShip.TabIndex = 4; + buttonDelShip.Text = "Удалить корабль"; + buttonDelShip.UseVisualStyleBackColor = true; + buttonDelShip.Click += ButtonDelShip_Click; + // + // maskedTextBox + // + maskedTextBox.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + maskedTextBox.Location = new Point(6, 520); + maskedTextBox.Mask = "00"; + maskedTextBox.Name = "maskedTextBox"; + maskedTextBox.Size = new Size(476, 39); + maskedTextBox.TabIndex = 3; + maskedTextBox.ValidatingType = typeof(int); + // + // buttonAddBettleship + // + buttonAddBettleship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddBettleship.Location = new Point(6, 283); + buttonAddBettleship.Name = "buttonAddBettleship"; + buttonAddBettleship.Size = new Size(476, 90); + buttonAddBettleship.TabIndex = 2; + buttonAddBettleship.Text = "Добавить боевой корабль"; + buttonAddBettleship.UseVisualStyleBackColor = true; + buttonAddBettleship.Click += ButtonAddBattleship_Click; + // + // buttonAddShip + // + buttonAddShip.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + buttonAddShip.Location = new Point(6, 172); + buttonAddShip.Name = "buttonAddShip"; + buttonAddShip.Size = new Size(476, 90); + buttonAddShip.TabIndex = 1; + buttonAddShip.Text = "Добавить корабль"; + buttonAddShip.UseVisualStyleBackColor = true; + buttonAddShip.Click += buttonAddShip_Click_1; + // + // 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, 38); + comboBoxSelectorCompany.Name = "comboBoxSelectorCompany"; + comboBoxSelectorCompany.Size = new Size(476, 40); + 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(1605, 1236); + pictureBox.TabIndex = 1; + pictureBox.TabStop = false; + // + // FormShipCollection + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(2093, 1236); + Controls.Add(pictureBox); + Controls.Add(Tools); + Name = "FormShipCollection"; + Text = "Коллекция кораблей"; + Tools.ResumeLayout(false); + Tools.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox).EndInit(); + ResumeLayout(false); + } + + #endregion + + private GroupBox Tools; + private Button buttonAddBettleship; + private Button buttonAddShip; + private ComboBox comboBoxSelectorCompany; + private Button buttonDelShip; + private MaskedTextBox maskedTextBox; + private PictureBox pictureBox; + private Button buttonRefresh; + private Button buttonGoToTest; + } +} \ No newline at end of file diff --git a/ProjectBattleship/ProjectBattleship/FormShipCollection.cs b/ProjectBattleship/ProjectBattleship/FormShipCollection.cs new file mode 100644 index 0000000..4a68470 --- /dev/null +++ b/ProjectBattleship/ProjectBattleship/FormShipCollection.cs @@ -0,0 +1,167 @@ +using ProjectBattleship; +using ProjectBattleship.CollectionGenericObjects; +using ProjectBattleship.Drawnings; +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 Battleship; + +public partial class FormShipCollection : Form +{ + /// + /// Компания + /// + private AbstractCompany? _company = null; + + /// + /// Конструктор + /// + public FormShipCollection() + { + InitializeComponent(); + } + /// + /// Выбор компании + /// + /// + /// + private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSelectorCompany.Text) + { + case "Доки": + _company = new ShipDocks(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects()); + break; + } + + } + /// + /// Создание объекта класса-перемещения + /// + /// Тип создаваемого объекта + private void CreateObject(string type) + { + if (_company == null) + { + return; + } + + Random random = new(); + DrawingShip drawningShip; + switch (type) + { + case nameof(DrawingShip): + drawningShip = new DrawingShip(random.Next(100, 300), random.Next(1000, 3000), GetColor(random)); + break; + case nameof(DrawingBattleship): + drawningShip = new DrawingBattleship(random.Next(100, 300), random.Next(1000, 3000), + GetColor(random), GetColor(random), + Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2))); + break; + default: + return; + } + + if (_company + drawningShip != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось добавить объект"); + } + } + + /// + /// Получение цвета + /// + /// Генератор случайных чисел + /// + private static Color GetColor(Random random) + { + Color color = Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255)); + ColorDialog dialog = new(); + if (dialog.ShowDialog() == DialogResult.OK) + { + color = dialog.Color; + } + return color; + } + + private void ButtonDelShip_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) + { + return; + } + + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) + { + return; + } + + int pos = Convert.ToInt32(maskedTextBox.Text); + if (_company - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + } + else + { + MessageBox.Show("Не удалось удалить объект"); + } + } + + private void ButtonGoToTest_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + + DrawingShip? ship = null; + int counter = 100; + while (ship == null) + { + ship = _company.GetRandomObject(); + counter--; + if (counter <= 0) + { + break; + } + } + + if (ship == null) + { + return; + } + + FormBattleship form = new() + { + SetShip = ship + }; + form.ShowDialog(); + + } + + private void ButtonRefresh_Click(object sender, EventArgs e) + { + if (_company == null) + { + return; + } + + pictureBox.Image = _company.Show(); + } + private void ButtonAddBattleship_Click(object sender, EventArgs e) => CreateObject(nameof(DrawingBattleship)); + + private void buttonAddShip_Click_1(object sender, EventArgs e) => CreateObject(nameof(DrawingShip)); +} diff --git a/ProjectBattleship/ProjectBattleship/FormShipCollection.resx b/ProjectBattleship/ProjectBattleship/FormShipCollection.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectBattleship/ProjectBattleship/FormShipCollection.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/ProjectBattleship/ProjectBattleship/AbstractStrategy.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/AbstractStrategy.cs similarity index 95% rename from ProjectBattleship/ProjectBattleship/AbstractStrategy.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/AbstractStrategy.cs index b9f7f86..5600012 100644 --- a/ProjectBattleship/ProjectBattleship/AbstractStrategy.cs +++ b/ProjectBattleship/ProjectBattleship/MovementStrategy/AbstractStrategy.cs @@ -1,6 +1,4 @@ -using ProjectBattleship.MovementStrateg; - -namespace ProjectBattleship.MovementStrategy; +namespace ProjectBattleship.MovementStrategy; public abstract class AbstractStrategy { private IMoveableObject? _moveableObject; diff --git a/ProjectBattleship/ProjectBattleship/IMoveableObject.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/IMoveableObject.cs similarity index 100% rename from ProjectBattleship/ProjectBattleship/IMoveableObject.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/IMoveableObject.cs diff --git a/ProjectBattleship/ProjectBattleship/MoveToBorder.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/MoveToBorder.cs similarity index 100% rename from ProjectBattleship/ProjectBattleship/MoveToBorder.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/MoveToBorder.cs diff --git a/ProjectBattleship/ProjectBattleship/MoveToCenter.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/MoveToCenter.cs similarity index 100% rename from ProjectBattleship/ProjectBattleship/MoveToCenter.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/MoveToCenter.cs diff --git a/ProjectBattleship/ProjectBattleship/MoveableShip.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/MoveableShip.cs similarity index 97% rename from ProjectBattleship/ProjectBattleship/MoveableShip.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/MoveableShip.cs index fa9a117..b1e235f 100644 --- a/ProjectBattleship/ProjectBattleship/MoveableShip.cs +++ b/ProjectBattleship/ProjectBattleship/MovementStrategy/MoveableShip.cs @@ -1,4 +1,4 @@ -using ProjectBattleship.Drawning; +using ProjectBattleship.Drawnings; namespace ProjectBattleship.MovementStrategy; public class MoveableShip : IMoveableObject diff --git a/ProjectBattleship/ProjectBattleship/MovementDirection.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/MovementDirection.cs similarity index 100% rename from ProjectBattleship/ProjectBattleship/MovementDirection.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/MovementDirection.cs diff --git a/ProjectBattleship/ProjectBattleship/ObjectParameters.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/ObjectParameters.cs similarity index 100% rename from ProjectBattleship/ProjectBattleship/ObjectParameters.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/ObjectParameters.cs diff --git a/ProjectBattleship/ProjectBattleship/StrategyStatus.cs b/ProjectBattleship/ProjectBattleship/MovementStrategy/StrategyStatus.cs similarity index 66% rename from ProjectBattleship/ProjectBattleship/StrategyStatus.cs rename to ProjectBattleship/ProjectBattleship/MovementStrategy/StrategyStatus.cs index 705274d..78f2a92 100644 --- a/ProjectBattleship/ProjectBattleship/StrategyStatus.cs +++ b/ProjectBattleship/ProjectBattleship/MovementStrategy/StrategyStatus.cs @@ -1,4 +1,4 @@ -namespace ProjectBattleship.MovementStrateg +namespace ProjectBattleship.MovementStrategy { public enum StrategyStatus { diff --git a/ProjectBattleship/ProjectBattleship/Program.cs b/ProjectBattleship/ProjectBattleship/Program.cs index fa0f283..72a21a8 100644 --- a/ProjectBattleship/ProjectBattleship/Program.cs +++ b/ProjectBattleship/ProjectBattleship/Program.cs @@ -1,3 +1,5 @@ +using Battleship; + namespace ProjectBattleship { internal static class Program @@ -11,7 +13,7 @@ namespace ProjectBattleship // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormBattleship()); + Application.Run(new FormShipCollection()); } } } \ No newline at end of file