Правки в лабораторной 3

This commit is contained in:
nikbel2004@outlook.com 2023-10-21 14:36:51 +04:00
parent a17318de92
commit b54059d598
6 changed files with 28 additions and 9 deletions

View File

@ -70,7 +70,7 @@
DeleteButton.TabIndex = 3; DeleteButton.TabIndex = 3;
DeleteButton.Text = "Удалить технику"; DeleteButton.Text = "Удалить технику";
DeleteButton.UseVisualStyleBackColor = true; DeleteButton.UseVisualStyleBackColor = true;
DeleteButton.Click += ButtonRemoveCar_Click; DeleteButton.Click += ButtonRemoveTank_Click;
// //
// AddButton // AddButton
// //

View File

@ -31,7 +31,7 @@ namespace Tank
if (_tanks + form.SelectedCar != -1) if (_tanks + form.SelectedCar != -1)
{ {
MessageBox.Show("Объект добавлен"); MessageBox.Show("Объект добавлен");
DrawTank.Image = _tanks.ShowCars(); DrawTank.Image = _tanks.ShowTanks();
} }
else 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("Удалить объект?", "Удаление", if (MessageBox.Show("Удалить объект?", "Удаление",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
@ -55,7 +55,7 @@ namespace Tank
if (_tanks - pos) if (_tanks - pos)
{ {
MessageBox.Show("Объект удален"); MessageBox.Show("Объект удален");
DrawTank.Image = _tanks.ShowCars(); DrawTank.Image = _tanks.ShowTanks();
} }
else else
{ {
@ -65,7 +65,7 @@ namespace Tank
private void ButtonRefreshCollection_Click(object sender, EventArgs e) private void ButtonRefreshCollection_Click(object sender, EventArgs e)
{ {
DrawTank.Image = _tanks.ShowCars(); DrawTank.Image = _tanks.ShowTanks();
} }
} }

View File

@ -128,4 +128,4 @@ namespace Tank
public IMoveableObject GetMoveableObject => new DrawingObjectTank(this); public IMoveableObject GetMoveableObject => new DrawingObjectTank(this);
} }
} }

View File

@ -44,4 +44,4 @@ namespace Tank.MovementStrategy
} }
} }
} }
} }

View File

@ -8,15 +8,19 @@ namespace Tank
{ {
internal class SetGeneric<T> where T : class internal class SetGeneric<T> where T : class
{ {
// Массив объектов, которые храним
private readonly T?[] _places; private readonly T?[] _places;
// Количество объектов в массиве
public int Count => _places.Length; public int Count => _places.Length;
// Конструктор
public SetGeneric(int count) public SetGeneric(int count)
{ {
_places = new T?[count]; _places = new T?[count];
} }
//Добавление объекта в набор
public int Insert(T car) public int Insert(T car)
{ {
int index = -1; int index = -1;
@ -39,6 +43,7 @@ namespace Tank
return 0; return 0;
} }
// Добавление объекта в набор на конкретную позицию
public int Insert(T car, int position) public int Insert(T car, int position)
{ {
if (position < 0 || position >= Count) if (position < 0 || position >= Count)
@ -66,6 +71,7 @@ namespace Tank
return position; return position;
} }
// Удаление объекта из набора с конкретной позиции
public bool Remove(int position) public bool Remove(int position)
{ {
if (position < 0 || position >= Count) if (position < 0 || position >= Count)
@ -74,6 +80,7 @@ namespace Tank
return true; return true;
} }
// Получение объекта из набора по позиции
public T? Get(int position) public T? Get(int position)
{ {
if (position < 0 || position >= Count) if (position < 0 || position >= Count)
@ -81,4 +88,4 @@ namespace Tank
return _places[position]; return _places[position];
} }
} }
} }

View File

@ -13,12 +13,18 @@ namespace Tank.Generics
where T : DrawArmoVehicle where T : DrawArmoVehicle
where U : IMoveableObject where U : IMoveableObject
{ {
// Ширина и высота окна прорисовки
private readonly int _pictureWidth; private readonly int _pictureWidth;
private readonly int _pictureHeight; private readonly int _pictureHeight;
// Размеры занимаемого объектом места
private readonly int _placeSizeWidth = 180; private readonly int _placeSizeWidth = 180;
private readonly int _placeSizeHeight = 90; private readonly int _placeSizeHeight = 90;
// Набор объектов
private readonly SetGeneric<T> _collection; private readonly SetGeneric<T> _collection;
// Конструктор
public TanksGenericCollection(int pictureWidth, int pictureHeight) public TanksGenericCollection(int pictureWidth, int pictureHeight)
{ {
int width = pictureWidth / _placeSizeWidth; int width = pictureWidth / _placeSizeWidth;
@ -28,6 +34,7 @@ namespace Tank.Generics
_collection = new SetGeneric<T>(width * height); _collection = new SetGeneric<T>(width * height);
} }
// Перегрузка оператора сложения
public static int? operator +(TanksGenericCollection<T, U> collect, T? obj) public static int? operator +(TanksGenericCollection<T, U> collect, T? obj)
{ {
if (obj == null) if (obj == null)
@ -37,6 +44,7 @@ namespace Tank.Generics
return collect?._collection.Insert(obj); return collect?._collection.Insert(obj);
} }
// Перегрузка оператора вычитания
public static bool operator -(TanksGenericCollection<T, U> collect, int pos) public static bool operator -(TanksGenericCollection<T, U> collect, int pos)
{ {
T? obj = collect._collection.Get(pos); T? obj = collect._collection.Get(pos);
@ -47,12 +55,14 @@ namespace Tank.Generics
return collect._collection.Remove(pos); return collect._collection.Remove(pos);
} }
// Получение объекта IMoveableObject
public U? GetU(int pos) public U? GetU(int pos)
{ {
return (U?)_collection.Get(pos)?.GetMoveableObject; return (U?)_collection.Get(pos)?.GetMoveableObject;
} }
public Bitmap ShowCars() // Вывод всего набора объектов
public Bitmap ShowTanks()
{ {
Bitmap bmp = new(_pictureWidth, _pictureHeight); Bitmap bmp = new(_pictureWidth, _pictureHeight);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
@ -61,6 +71,7 @@ namespace Tank.Generics
return bmp; return bmp;
} }
// Метод отрисовки фона
private void DrawBackground(Graphics g) private void DrawBackground(Graphics g)
{ {
Pen pen = new(Color.Black, 3); Pen pen = new(Color.Black, 3);
@ -78,6 +89,7 @@ namespace Tank.Generics
} }
} }
// Метод прорисовки объектов
private void DrawObjects(Graphics g) private void DrawObjects(Graphics g)
{ {
int width = _pictureWidth / _placeSizeWidth; int width = _pictureWidth / _placeSizeWidth;