Лаб 3 финал

This commit is contained in:
GokaPek 2023-10-24 10:50:42 +04:00
parent a98774d0c4
commit 8f08604a56
3 changed files with 32 additions and 29 deletions

View File

@ -10,6 +10,7 @@ using System.Windows.Forms;
using SelfPropelledArtilleryUnit.DrawningObjects;
using SelfPropelledArtilleryUnit.MovementStrategy;
using SelfPropelledArtilleryUnit.Generics;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace SelfPropelledArtilleryUnit
{
@ -18,6 +19,7 @@ namespace SelfPropelledArtilleryUnit
/// </summary>
public partial class FormSPAUCollection : Form
{
readonly int countPlaces = 11;
/// <summary>
/// Набор объектов
/// </summary>
@ -40,7 +42,9 @@ namespace SelfPropelledArtilleryUnit
FormSPAU form = new();
if (form.ShowDialog() == DialogResult.OK)
{
if (_SPAUs + form.SelectedSPAU)
int addedIndex = _SPAUs + form.SelectedSPAU;
if (addedIndex != -1 && addedIndex <= countPlaces)
{
MessageBox.Show("Объект добавлен");
pictureBoxCollection.Image = _SPAUs.ShowSPAUs();

View File

@ -56,14 +56,13 @@ namespace SelfPropelledArtilleryUnit.Generics
/// <param name="collect"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static bool operator +(SPAUGenericCollection<T, U> collect, T? obj)
public static int operator +(SPAUGenericCollection<T, U> collect, T? obj)
{
if (obj == null)
{
return false;
return -1;
}
collect?._collection.Insert(obj);
return true;
return collect._collection.Insert(obj);
}
/// <summary>
/// Перегрузка оператора вычитания

View File

@ -35,20 +35,9 @@ namespace SelfPropelledArtilleryUnit.Generics
/// </summary>
/// <param name="spau">Добавляемый автомобиль</param>
/// <returns></returns>
public bool Insert(T spau)
public int Insert(T spau)
{
try
{
for (int i = _places.Length - 1; i > 0; i--)
{
_places[i] = _places[i - 1];
}
_places[0] = spau;
return true;
}
catch {
return false;
}
return Insert(spau, 0);
}
/// <summary>
/// Добавление объекта в набор на конкретную позицию
@ -56,26 +45,37 @@ namespace SelfPropelledArtilleryUnit.Generics
/// <param name="car">Добавляемый автомобиль</param>
/// <param name="position">Позиция</param>
/// <returns></returns>
public bool Insert(T spau, int position)
public int Insert(T spau, int position)
{
if (position < 0 || position >= _places.Count() || spau == null)
if (position < 0 || spau == null)
{
return false;
return -1;
}
if (_places[position] == null)
if (position >= Count)
{
return false;
return -1;
}
// Ищем первую пустую позицию начиная с указанной позиции
int positionNull = Array.FindIndex(_places, position, x => x == null);
if (positionNull == -1)
return false;
if (positionNull == -1 && _places[Count - 1] != null)
{
// Если пустых позиций нет и последняя позиция в массиве занята
return -1;
}
else if (positionNull == -1)
{
// Если позиция для вставки пустая, а пустых позиций больше нет
positionNull = Count - 1;
}
// Сдвигаем элементы вправо, начиная с первой пустой позиции и заканчивая указанной позицией
for (int i = positionNull; i > position; i--)
{
_places[i] = _places[i - 1];
}
// Вставка по позиции
_places[position] = spau;
return true;
return position;
}
/// <summary>
/// Удаление объекта из набора с конкретной позиции
@ -84,7 +84,7 @@ namespace SelfPropelledArtilleryUnit.Generics
/// <returns></returns>
public bool Remove(int position)
{
if (position < 0 || position >= _places.Count())
if (position < 0 || position >= Count)
return false;
_places[position] = null;
@ -98,7 +98,7 @@ namespace SelfPropelledArtilleryUnit.Generics
/// <returns></returns>
public T? Get(int position)
{
if (position < 0 || position >= _places.Count())
if (position < 0 || position >= Count)
return null;
return _places[position];
}