PIbd-21 Belianin N.N. LabWork03 #3
2
Tank/Tank/CollectionsFrame.Designer.cs
generated
2
Tank/Tank/CollectionsFrame.Designer.cs
generated
@ -70,7 +70,7 @@
|
||||
DeleteButton.TabIndex = 3;
|
||||
DeleteButton.Text = "Удалить технику";
|
||||
DeleteButton.UseVisualStyleBackColor = true;
|
||||
DeleteButton.Click += ButtonRemoveCar_Click;
|
||||
DeleteButton.Click += ButtonRemoveTank_Click;
|
||||
//
|
||||
// AddButton
|
||||
//
|
||||
|
@ -31,7 +31,7 @@ namespace Tank
|
||||
if (_tanks + form.SelectedCar != -1)
|
||||
{
|
||||
MessageBox.Show("Объект добавлен");
|
||||
DrawTank.Image = _tanks.ShowCars();
|
||||
DrawTank.Image = _tanks.ShowTanks();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -39,7 +39,7 @@ namespace Tank
|
||||
}
|
||||
}
|
||||
}
|
||||
private void ButtonRemoveCar_Click(object sender, EventArgs e)
|
||||
private void ButtonRemoveTank_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (MessageBox.Show("Удалить объект?", "Удаление",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
|
||||
@ -55,7 +55,7 @@ namespace Tank
|
||||
if (_tanks - pos)
|
||||
{
|
||||
MessageBox.Show("Объект удален");
|
||||
DrawTank.Image = _tanks.ShowCars();
|
||||
DrawTank.Image = _tanks.ShowTanks();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -65,7 +65,7 @@ namespace Tank
|
||||
|
||||
private void ButtonRefreshCollection_Click(object sender, EventArgs e)
|
||||
{
|
||||
DrawTank.Image = _tanks.ShowCars();
|
||||
DrawTank.Image = _tanks.ShowTanks();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -128,4 +128,4 @@ namespace Tank
|
||||
|
||||
public IMoveableObject GetMoveableObject => new DrawingObjectTank(this);
|
||||
}
|
||||
}
|
||||
}
|
@ -44,4 +44,4 @@ namespace Tank.MovementStrategy
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -8,15 +8,19 @@ namespace Tank
|
||||
{
|
||||
internal class SetGeneric<T> where T : class
|
||||
{
|
||||
// Массив объектов, которые храним
|
||||
private readonly T?[] _places;
|
||||
|
||||
// Количество объектов в массиве
|
||||
public int Count => _places.Length;
|
||||
|
||||
// Конструктор
|
||||
public SetGeneric(int count)
|
||||
{
|
||||
_places = new T?[count];
|
||||
}
|
||||
|
||||
//Добавление объекта в набор
|
||||
public int Insert(T car)
|
||||
{
|
||||
int index = -1;
|
||||
|
||||
@ -39,6 +43,7 @@ namespace Tank
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Добавление объекта в набор на конкретную позицию
|
||||
public int Insert(T car, int position)
|
||||
{
|
||||
if (position < 0 || position >= Count)
|
||||
@ -66,6 +71,7 @@ namespace Tank
|
||||
return position;
|
||||
}
|
||||
|
||||
// Удаление объекта из набора с конкретной позиции
|
||||
public bool Remove(int position)
|
||||
{
|
||||
if (position < 0 || position >= Count)
|
||||
@ -74,6 +80,7 @@ namespace Tank
|
||||
return true;
|
||||
}
|
||||
|
||||
// Получение объекта из набора по позиции
|
||||
public T? Get(int position)
|
||||
{
|
||||
if (position < 0 || position >= Count)
|
||||
@ -81,4 +88,4 @@ namespace Tank
|
||||
return _places[position];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -13,12 +13,18 @@ namespace Tank.Generics
|
||||
where T : DrawArmoVehicle
|
||||
where U : IMoveableObject
|
||||
{
|
||||
// Ширина и высота окна прорисовки
|
||||
private readonly int _pictureWidth;
|
||||
private readonly int _pictureHeight;
|
||||
|
||||
// Размеры занимаемого объектом места
|
||||
private readonly int _placeSizeWidth = 180;
|
||||
private readonly int _placeSizeHeight = 90;
|
||||
|
||||
// Набор объектов
|
||||
private readonly SetGeneric<T> _collection;
|
||||
|
||||
// Конструктор
|
||||
public TanksGenericCollection(int pictureWidth, int pictureHeight)
|
||||
{
|
||||
int width = pictureWidth / _placeSizeWidth;
|
||||
@ -28,6 +34,7 @@ namespace Tank.Generics
|
||||
_collection = new SetGeneric<T>(width * height);
|
||||
}
|
||||
|
||||
// Перегрузка оператора сложения
|
||||
public static int? operator +(TanksGenericCollection<T, U> collect, T? obj)
|
||||
{
|
||||
if (obj == null)
|
||||
@ -37,6 +44,7 @@ namespace Tank.Generics
|
||||
return collect?._collection.Insert(obj);
|
||||
}
|
||||
|
||||
// Перегрузка оператора вычитания
|
||||
public static bool operator -(TanksGenericCollection<T, U> collect, int pos)
|
||||
{
|
||||
T? obj = collect._collection.Get(pos);
|
||||
@ -47,12 +55,14 @@ namespace Tank.Generics
|
||||
return collect._collection.Remove(pos);
|
||||
}
|
||||
|
||||
// Получение объекта IMoveableObject
|
||||
public U? GetU(int pos)
|
||||
{
|
||||
return (U?)_collection.Get(pos)?.GetMoveableObject;
|
||||
}
|
||||
|
||||
public Bitmap ShowCars()
|
||||
// Вывод всего набора объектов
|
||||
public Bitmap ShowTanks()
|
||||
{
|
||||
Bitmap bmp = new(_pictureWidth, _pictureHeight);
|
||||
Graphics gr = Graphics.FromImage(bmp);
|
||||
@ -61,6 +71,7 @@ namespace Tank.Generics
|
||||
return bmp;
|
||||
}
|
||||
|
||||
// Метод отрисовки фона
|
||||
private void DrawBackground(Graphics g)
|
||||
{
|
||||
Pen pen = new(Color.Black, 3);
|
||||
@ -78,6 +89,7 @@ namespace Tank.Generics
|
||||
}
|
||||
}
|
||||
|
||||
// Метод прорисовки объектов
|
||||
private void DrawObjects(Graphics g)
|
||||
{
|
||||
int width = _pictureWidth / _placeSizeWidth;
|
||||
|
Loading…
Reference in New Issue
Block a user
Правильнее было вызвать Insert(T obj, 0);