diff --git a/AirBomber/AirBomber/FormAirBomber.Designer.cs b/AirBomber/AirBomber/FormAirBomber.Designer.cs
index 806dcdd..ae4cac6 100644
--- a/AirBomber/AirBomber/FormAirBomber.Designer.cs
+++ b/AirBomber/AirBomber/FormAirBomber.Designer.cs
@@ -37,6 +37,7 @@
comboBoxStrategy = new ComboBox();
buttonCreateAirPlane = new Button();
buttonStrategyStep = new Button();
+ buttonSelectPlane = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxAirBomber).BeginInit();
SuspendLayout();
//
@@ -142,11 +143,22 @@
buttonStrategyStep.UseVisualStyleBackColor = true;
buttonStrategyStep.Click += buttonStrategyStep_Click;
//
+ // buttonSelectPlane
+ //
+ buttonSelectPlane.Location = new Point(862, 178);
+ buttonSelectPlane.Name = "buttonSelectPlane";
+ buttonSelectPlane.Size = new Size(110, 91);
+ buttonSelectPlane.TabIndex = 9;
+ buttonSelectPlane.Text = "Выбрать самолет";
+ buttonSelectPlane.UseVisualStyleBackColor = true;
+ buttonSelectPlane.Click += buttonSelectPlane_Click;
+ //
// FormAirBomber
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(986, 540);
+ Controls.Add(buttonSelectPlane);
Controls.Add(buttonStrategyStep);
Controls.Add(buttonCreateAirPlane);
Controls.Add(comboBoxStrategy);
@@ -173,5 +185,6 @@
private ComboBox comboBoxStrategy;
private Button buttonCreateAirPlane;
private Button buttonStrategyStep;
+ private Button buttonSelectPlane;
}
}
\ No newline at end of file
diff --git a/AirBomber/AirBomber/FormAirBomber.cs b/AirBomber/AirBomber/FormAirBomber.cs
index 9405a12..a50d1cf 100644
--- a/AirBomber/AirBomber/FormAirBomber.cs
+++ b/AirBomber/AirBomber/FormAirBomber.cs
@@ -123,11 +123,10 @@
///
///
///
- private void ButtonSelectPlane_Click(object sender, EventArgs e)
+ private void buttonSelectPlane_Click(object sender, EventArgs e)
{
SelectedPlane = _drawningAirPlane;
DialogResult = DialogResult.OK;
}
-
}
}
\ No newline at end of file
diff --git a/AirBomber/AirBomber/FormPlaneCollection.cs b/AirBomber/AirBomber/FormPlaneCollection.cs
index e9e77ce..eba8446 100644
--- a/AirBomber/AirBomber/FormPlaneCollection.cs
+++ b/AirBomber/AirBomber/FormPlaneCollection.cs
@@ -33,10 +33,10 @@ namespace AirBomber
FormAirBomber form = new();
if (form.ShowDialog() == DialogResult.OK)
{
- if (_planes + form.SelectedPlane)
+ if (_planes + form.SelectedPlane != -1)
{
MessageBox.Show("Объект добавлен");
- pictureBoxCollection.Image = _planes.ShowCars();
+ pictureBoxCollection.Image = _planes.ShowPlanes();
}
else
{
@@ -59,7 +59,7 @@ namespace AirBomber
if (_planes - pos != null)
{
MessageBox.Show("Объект удален");
- pictureBoxCollection.Image = _planes.ShowCars();
+ pictureBoxCollection.Image = _planes.ShowPlanes();
}
else
{
@@ -73,7 +73,7 @@ namespace AirBomber
///
private void buttonRefreshCollection_Click(object sender, EventArgs e)
{
- pictureBoxCollection.Image = _planes.ShowCars();
+ pictureBoxCollection.Image = _planes.ShowPlanes();
}
}
}
diff --git a/AirBomber/AirBomber/PlanesGenericCollection.cs b/AirBomber/AirBomber/PlanesGenericCollection.cs
index c19df9f..0031f45 100644
--- a/AirBomber/AirBomber/PlanesGenericCollection.cs
+++ b/AirBomber/AirBomber/PlanesGenericCollection.cs
@@ -21,11 +21,11 @@ namespace AirBomber
///
/// Размер занимаемого объектом места (ширина)
///
- private readonly int _placeSizeWidth = 210;
+ private readonly int _placeSizeWidth = 150;
///
/// Размер занимаемого объектом места (высота)
///
- private readonly int _placeSizeHeight = 90;
+ private readonly int _placeSizeHeight = 118;
///
/// Набор объектов
///
@@ -49,14 +49,11 @@ namespace AirBomber
///
///
///
- public static bool operator +(PlanesGenericCollection collect, T?
- obj)
+ public static int operator +(PlanesGenericCollection collect, T? obj)
{
if (obj == null)
- {
- return false;
- }
- return collect?._collection.Insert(obj) ?? false;
+ return -1;
+ return collect?._collection.Insert(obj) ?? -1;
}
///
@@ -65,8 +62,7 @@ namespace AirBomber
///
///
///
- public static T? operator -(PlanesGenericCollection collect, int
- pos)
+ public static T? operator -(PlanesGenericCollection collect, int pos)
{
T? obj = collect._collection.Get(pos);
if (obj != null)
@@ -88,7 +84,7 @@ namespace AirBomber
/// Вывод всего набора объектов
///
///
- public Bitmap ShowCars()
+ public Bitmap ShowPlanes()
{
Bitmap bmp = new(_pictureWidth, _pictureHeight);
Graphics gr = Graphics.FromImage(bmp);
@@ -122,13 +118,21 @@ namespace AirBomber
///
private void DrawObjects(Graphics g)
{
+ int heightObjCount = _pictureHeight / _placeSizeHeight;
+ int widthObjCount = _pictureWidth / _placeSizeWidth; // Добавляем вычисление ширины
+
for (int i = 0; i < _collection.Count; i++)
{
- // TODO получение объекта
- // TODO установка позиции
- // TODO прорисовка объекта
+ T? type = _collection.Get(i);
+ if (type != null)
+ {
+ int row = i / widthObjCount; // Ряд - сначала сверху вниз
+ int col = widthObjCount - 1 - (i % widthObjCount); // Столбец - справа налево
+
+ type.SetPosition(col * _placeSizeWidth, row * _placeSizeHeight);
+ type?.DrawPlane(g);
+ }
}
}
-
}
}
diff --git a/AirBomber/AirBomber/SetGeneric.cs b/AirBomber/AirBomber/SetGeneric.cs
index 605f044..8fe83a3 100644
--- a/AirBomber/AirBomber/SetGeneric.cs
+++ b/AirBomber/AirBomber/SetGeneric.cs
@@ -30,10 +30,10 @@ namespace AirBomber
///
/// Добавляемый самолет
///
- public bool Insert(T plane)
+ public int Insert(T plane)
{
- // TODO вставка в начало набора
- return true;
+ //was TODO
+ return Insert(plane, 0);
}
///
/// Добавление объекта в набор на конкретную позицию
@@ -41,15 +41,39 @@ namespace AirBomber
/// Добавляемый самолет
/// Позиция
///
- public bool Insert(T plane, int position)
+ public int Insert(T plane, int position)
{
- // TODO проверка позиции
+ // TODO проверка позиции DONE
// TODO проверка, что элемент массива по этой позиции пустой,если нет, то
- // проверка, что после вставляемого элемента в массиве есть пустой элемент
- // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
- // TODO вставка по позиции
- _places[position] = plane;
- return true;
+ // проверка, что после вставляемого элемента в массиве есть пустой элемент
+ // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
+ // TODO вставка по позиции
+ int NoEmpty = 0, temp = 0;
+ for (int i = position; i < Count; i++)
+ {
+ if (_places[i] != null) NoEmpty++;
+ }
+ if (NoEmpty == Count - position - 1) return -1;
+
+ if (position < Count && position >= 0)
+ {
+ for (int j = position; j < Count; j++)
+ {
+ if (_places[j] == null)
+ {
+ temp = j;
+ break;
+ }
+ }
+
+ for (int i = temp; i > position; i--)
+ {
+ _places[i] = _places[i - 1];
+ }
+ _places[position] = plane;
+ return position;
+ }
+ return -1;
}
///
/// Удаление объекта из набора с конкретной позиции
@@ -58,9 +82,14 @@ namespace AirBomber
///
public bool Remove(int position)
{
- // TODO проверка позиции
+ // TODO проверка позиции DONE
// TODO удаление объекта из массива, присвоив элементу массива значение null
- return true;
+ if (!(position >= 0 && position < Count) || _places[position] == null)
+ {
+ return false;
+ }
+ _places[position] = null;
+ return true;
}
///
/// Получение объекта из набора по позиции
@@ -69,7 +98,11 @@ namespace AirBomber
///
public T? Get(int position)
{
- // TODO проверка позиции
+ // TODO проверка позиции DONE
+ if (position < 0 || position >= Count)
+ {
+ return null;
+ }
return _places[position];
}