PIbd-21 Belianin N.N. LabWork03 #3

Closed
Belnik wants to merge 4 commits from LabWork03 into LabWork02
6 changed files with 28 additions and 9 deletions
Showing only changes of commit b54059d598 - Show all commits

View File

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

View File

@ -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();
}
}

View File

@ -128,4 +128,4 @@ namespace Tank
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
{
// Массив объектов, которые храним
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;
Review

Правильнее было вызвать Insert(T obj, 0);

Правильнее было вызвать Insert(T obj, 0);
@ -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];
}
}
}
}

View File

@ -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;