Выполнение TODO

This commit is contained in:
malimova 2023-10-15 23:48:33 +04:00
parent 2fba868169
commit 1d0a18b4b7
5 changed files with 83 additions and 34 deletions

View File

@ -37,6 +37,7 @@
comboBoxStrategy = new ComboBox(); comboBoxStrategy = new ComboBox();
buttonCreateAirPlane = new Button(); buttonCreateAirPlane = new Button();
buttonStrategyStep = new Button(); buttonStrategyStep = new Button();
buttonSelectPlane = new Button();
((System.ComponentModel.ISupportInitialize)pictureBoxAirBomber).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBoxAirBomber).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@ -142,11 +143,22 @@
buttonStrategyStep.UseVisualStyleBackColor = true; buttonStrategyStep.UseVisualStyleBackColor = true;
buttonStrategyStep.Click += buttonStrategyStep_Click; 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 // FormAirBomber
// //
AutoScaleDimensions = new SizeF(10F, 25F); AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(986, 540); ClientSize = new Size(986, 540);
Controls.Add(buttonSelectPlane);
Controls.Add(buttonStrategyStep); Controls.Add(buttonStrategyStep);
Controls.Add(buttonCreateAirPlane); Controls.Add(buttonCreateAirPlane);
Controls.Add(comboBoxStrategy); Controls.Add(comboBoxStrategy);
@ -173,5 +185,6 @@
private ComboBox comboBoxStrategy; private ComboBox comboBoxStrategy;
private Button buttonCreateAirPlane; private Button buttonCreateAirPlane;
private Button buttonStrategyStep; private Button buttonStrategyStep;
private Button buttonSelectPlane;
} }
} }

View File

@ -123,11 +123,10 @@
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void ButtonSelectPlane_Click(object sender, EventArgs e) private void buttonSelectPlane_Click(object sender, EventArgs e)
{ {
SelectedPlane = _drawningAirPlane; SelectedPlane = _drawningAirPlane;
DialogResult = DialogResult.OK; DialogResult = DialogResult.OK;
} }
} }
} }

View File

@ -33,10 +33,10 @@ namespace AirBomber
FormAirBomber form = new(); FormAirBomber form = new();
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
if (_planes + form.SelectedPlane) if (_planes + form.SelectedPlane != -1)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
pictureBoxCollection.Image = _planes.ShowCars(); pictureBoxCollection.Image = _planes.ShowPlanes();
} }
else else
{ {
@ -59,7 +59,7 @@ namespace AirBomber
if (_planes - pos != null) if (_planes - pos != null)
{ {
MessageBox.Show("Объект удален"); MessageBox.Show("Объект удален");
pictureBoxCollection.Image = _planes.ShowCars(); pictureBoxCollection.Image = _planes.ShowPlanes();
} }
else else
{ {
@ -73,7 +73,7 @@ namespace AirBomber
/// <param name="e"></param> /// <param name="e"></param>
private void buttonRefreshCollection_Click(object sender, EventArgs e) private void buttonRefreshCollection_Click(object sender, EventArgs e)
{ {
pictureBoxCollection.Image = _planes.ShowCars(); pictureBoxCollection.Image = _planes.ShowPlanes();
} }
} }
} }

View File

@ -21,11 +21,11 @@ namespace AirBomber
/// <summary> /// <summary>
/// Размер занимаемого объектом места (ширина) /// Размер занимаемого объектом места (ширина)
/// </summary> /// </summary>
private readonly int _placeSizeWidth = 210; private readonly int _placeSizeWidth = 150;
/// <summary> /// <summary>
/// Размер занимаемого объектом места (высота) /// Размер занимаемого объектом места (высота)
/// </summary> /// </summary>
private readonly int _placeSizeHeight = 90; private readonly int _placeSizeHeight = 118;
/// <summary> /// <summary>
/// Набор объектов /// Набор объектов
/// </summary> /// </summary>
@ -49,14 +49,11 @@ namespace AirBomber
/// <param name="collect"></param> /// <param name="collect"></param>
/// <param name="obj"></param> /// <param name="obj"></param>
/// <returns></returns> /// <returns></returns>
public static bool operator +(PlanesGenericCollection<T, U> collect, T? public static int operator +(PlanesGenericCollection<T, U> collect, T? obj)
obj)
{ {
if (obj == null) if (obj == null)
{ return -1;
return false; return collect?._collection.Insert(obj) ?? -1;
}
return collect?._collection.Insert(obj) ?? false;
} }
/// <summary> /// <summary>
@ -65,8 +62,7 @@ namespace AirBomber
/// <param name="collect"></param> /// <param name="collect"></param>
/// <param name="pos"></param> /// <param name="pos"></param>
/// <returns></returns> /// <returns></returns>
public static T? operator -(PlanesGenericCollection<T, U> collect, int public static T? operator -(PlanesGenericCollection<T, U> collect, int pos)
pos)
{ {
T? obj = collect._collection.Get(pos); T? obj = collect._collection.Get(pos);
if (obj != null) if (obj != null)
@ -88,7 +84,7 @@ namespace AirBomber
/// Вывод всего набора объектов /// Вывод всего набора объектов
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public Bitmap ShowCars() public Bitmap ShowPlanes()
{ {
Bitmap bmp = new(_pictureWidth, _pictureHeight); Bitmap bmp = new(_pictureWidth, _pictureHeight);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
@ -122,13 +118,21 @@ namespace AirBomber
/// <param name="g"></param> /// <param name="g"></param>
private void DrawObjects(Graphics g) private void DrawObjects(Graphics g)
{ {
int heightObjCount = _pictureHeight / _placeSizeHeight;
int widthObjCount = _pictureWidth / _placeSizeWidth; // Добавляем вычисление ширины
for (int i = 0; i < _collection.Count; i++) for (int i = 0; i < _collection.Count; i++)
{ {
// TODO получение объекта T? type = _collection.Get(i);
// TODO установка позиции if (type != null)
// TODO прорисовка объекта {
int row = i / widthObjCount; // Ряд - сначала сверху вниз
int col = widthObjCount - 1 - (i % widthObjCount); // Столбец - справа налево
type.SetPosition(col * _placeSizeWidth, row * _placeSizeHeight);
type?.DrawPlane(g);
}
} }
} }
} }
} }

View File

@ -30,10 +30,10 @@ namespace AirBomber
/// </summary> /// </summary>
/// <param name="plane">Добавляемый самолет</param> /// <param name="plane">Добавляемый самолет</param>
/// <returns></returns> /// <returns></returns>
public bool Insert(T plane) public int Insert(T plane)
{ {
// TODO вставка в начало набора //was TODO
return true; return Insert(plane, 0);
} }
/// <summary> /// <summary>
/// Добавление объекта в набор на конкретную позицию /// Добавление объекта в набор на конкретную позицию
@ -41,15 +41,39 @@ namespace AirBomber
/// <param name="plane">Добавляемый самолет</param> /// <param name="plane">Добавляемый самолет</param>
/// <param name="position">Позиция</param> /// <param name="position">Позиция</param>
/// <returns></returns> /// <returns></returns>
public bool Insert(T plane, int position) public int Insert(T plane, int position)
{ {
// TODO проверка позиции // TODO проверка позиции DONE
// TODO проверка, что элемент массива по этой позиции пустой,если нет, то // TODO проверка, что элемент массива по этой позиции пустой,если нет, то
// проверка, что после вставляемого элемента в массиве есть пустой элемент // проверка, что после вставляемого элемента в массиве есть пустой элемент
// сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
// TODO вставка по позиции // TODO вставка по позиции
_places[position] = plane; int NoEmpty = 0, temp = 0;
return true; 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;
} }
/// <summary> /// <summary>
/// Удаление объекта из набора с конкретной позиции /// Удаление объекта из набора с конкретной позиции
@ -58,9 +82,14 @@ namespace AirBomber
/// <returns></returns> /// <returns></returns>
public bool Remove(int position) public bool Remove(int position)
{ {
// TODO проверка позиции // TODO проверка позиции DONE
// TODO удаление объекта из массива, присвоив элементу массива значение null // TODO удаление объекта из массива, присвоив элементу массива значение null
return true; if (!(position >= 0 && position < Count) || _places[position] == null)
{
return false;
}
_places[position] = null;
return true;
} }
/// <summary> /// <summary>
/// Получение объекта из набора по позиции /// Получение объекта из набора по позиции
@ -69,7 +98,11 @@ namespace AirBomber
/// <returns></returns> /// <returns></returns>
public T? Get(int position) public T? Get(int position)
{ {
// TODO проверка позиции // TODO проверка позиции DONE
if (position < 0 || position >= Count)
{
return null;
}
return _places[position]; return _places[position];
} }