From 5287002a6fcdfe68592e45492dead1bfbb913324 Mon Sep 17 00:00:00 2001 From: "ns.potapov" Date: Sun, 8 Oct 2023 13:22:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B5=20SetGeneric?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FormStormtrooper.Designer.cs | 13 ++++ .../ProjectStormtrooper/FormStormtrooper.cs | 2 +- .../ProjectStormtrooper/SetGeneric.cs | 62 +++++++++++++++---- 3 files changed, 65 insertions(+), 12 deletions(-) diff --git a/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.Designer.cs b/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.Designer.cs index 46e6117..171f171 100644 --- a/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.Designer.cs +++ b/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.Designer.cs @@ -37,6 +37,7 @@ buttonCreatePlane = new Button(); comboBoxStrategy = new ComboBox(); buttonStep = new Button(); + buttonSelectPlane = new Button(); ((System.ComponentModel.ISupportInitialize)pictureBoxStormtrooper).BeginInit(); SuspendLayout(); // @@ -140,11 +141,22 @@ buttonStep.UseVisualStyleBackColor = true; buttonStep.Click += buttonStep_Click; // + // buttonSelectPlane + // + buttonSelectPlane.Location = new Point(537, 412); + buttonSelectPlane.Name = "buttonSelectPlane"; + buttonSelectPlane.Size = new Size(137, 29); + buttonSelectPlane.TabIndex = 9; + buttonSelectPlane.Text = "Выбрать"; + buttonSelectPlane.UseVisualStyleBackColor = true; + buttonSelectPlane.Click += ButtonSelectPlane_Click; + // // FormStormtrooper // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(882, 453); + Controls.Add(buttonSelectPlane); Controls.Add(buttonStep); Controls.Add(comboBoxStrategy); Controls.Add(buttonCreatePlane); @@ -173,5 +185,6 @@ private Button buttonCreatePlane; private ComboBox comboBoxStrategy; private Button buttonStep; + private Button buttonSelectPlane; } } \ No newline at end of file diff --git a/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.cs b/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.cs index 98fdfb0..b1dc399 100644 --- a/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.cs +++ b/ProjectStormtrooper/ProjectStormtrooper/FormStormtrooper.cs @@ -149,7 +149,7 @@ namespace ProjectStormtrooper { return; } - _strategy.SetData(new DrawingObjectPlane(_drawingPlane), pictureBoxStormtrooper.Width, pictureBoxStormtrooper.Height); + _strategy.SetData(new DrawingObjectPlane(_drawingPlane), pictureBoxStormtrooper.Width, pictureBoxStormtrooper.Height); } if (_strategy == null) { diff --git a/ProjectStormtrooper/ProjectStormtrooper/SetGeneric.cs b/ProjectStormtrooper/ProjectStormtrooper/SetGeneric.cs index 98568f9..05afe5b 100644 --- a/ProjectStormtrooper/ProjectStormtrooper/SetGeneric.cs +++ b/ProjectStormtrooper/ProjectStormtrooper/SetGeneric.cs @@ -33,9 +33,8 @@ namespace ProjectStormtrooper /// /// public bool Insert(T plane) - { - // TODO: вставка в начало набора - return true; + { + return Insert(plane, 0); } /// /// Добавление объекта в набор на конкретную позицию @@ -45,11 +44,38 @@ namespace ProjectStormtrooper /// public bool Insert(T plane, int position) { - // TODO проверка позиции - // TODO проверка, что элемент массива по этой позиции пустой, если нет, то - // проверка, что после вставляемого элемента в массиве есть пустой элемент - // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента - // TODO вставка по позиции + // Проверка позиции + if (position < 0 || position > Count - 1) + { + return false; + } + // Проверка, что элемент массива по этой позиции пустой + if (_places[position] != null) + { + // Проверка, что после вставляемого элемента в массиве есть пустой элемент + int nullIndex = -1; + for (int i = position + 1; i < Count; i++) + { + if (_places[i] == null) + { + nullIndex = i; + break; + } + } + // Если пустого элемента нет, то выходим + if (nullIndex < 0) + { + return false; + } + // Сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента + int i = nullIndex - 1; + while (i >= position) + { + _places[i + 1] = _places[i]; + i--; + } + } + // Вставка по позиции _places[position] = plane; return true; } @@ -60,8 +86,18 @@ namespace ProjectStormtrooper /// public bool Remove(int position) { - // TODO проверка позиции - // TODO удаление объекта из массива, присвоив элементу массива значение null + // Проверка позиции + if (position < 0 || position > Count - 1) + { + return false; + } + // Нельзя удалить пустой элемент + if (_places[position] == null) + { + return false; + } + // Удаление объекта из массива, присвоив элементу массива значение null + _places[position] = null; return true; } /// @@ -71,7 +107,11 @@ namespace ProjectStormtrooper /// public T? Get(int position) { - // TODO проверка позиции + // Проверка позиции + if (position < 0 || position > Count - 1) + { + return null; + } return _places[position]; } }