ISEbd-22 Alimova M.S. Lab Work 03 #3

Closed
malimova wants to merge 12 commits from Lab3 into Lab2
5 changed files with 83 additions and 34 deletions
Showing only changes of commit 1d0a18b4b7 - Show all commits

View File

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

View File

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

View File

@ -33,10 +33,10 @@ namespace AirBomber
FormAirBomber form = new();
if (form.ShowDialog() == DialogResult.OK)
{
if (_planes + form.SelectedPlane)
if (_planes + form.SelectedPlane != -1)
{
MessageBox.Show("Объект добавлен");
pictureBoxCollection.Image = _planes.ShowCars();
pictureBoxCollection.Image = _planes.ShowPlanes();
}
else
{
@ -59,7 +59,7 @@ namespace AirBomber
if (_planes - pos != null)
{
MessageBox.Show("Объект удален");
pictureBoxCollection.Image = _planes.ShowCars();
pictureBoxCollection.Image = _planes.ShowPlanes();
}
else
{
@ -73,7 +73,7 @@ namespace AirBomber
/// <param name="e"></param>
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>
private readonly int _placeSizeWidth = 210;
private readonly int _placeSizeWidth = 150;
/// <summary>
/// Размер занимаемого объектом места (высота)
/// </summary>
private readonly int _placeSizeHeight = 90;
private readonly int _placeSizeHeight = 118;
/// <summary>
/// Набор объектов
/// </summary>
@ -49,14 +49,11 @@ namespace AirBomber
/// <param name="collect"></param>
/// <param name="obj"></param>
/// <returns></returns>
public static bool operator +(PlanesGenericCollection<T, U> collect, T?
obj)
public static int operator +(PlanesGenericCollection<T, U> collect, T? obj)
{
if (obj == null)
{
return false;
}
return collect?._collection.Insert(obj) ?? false;
return -1;
return collect?._collection.Insert(obj) ?? -1;
}
/// <summary>
@ -65,8 +62,7 @@ namespace AirBomber
/// <param name="collect"></param>
/// <param name="pos"></param>
/// <returns></returns>
public static T? operator -(PlanesGenericCollection<T, U> collect, int
pos)
public static T? operator -(PlanesGenericCollection<T, U> collect, int pos)
{
T? obj = collect._collection.Get(pos);
if (obj != null)
@ -88,7 +84,7 @@ namespace AirBomber
/// Вывод всего набора объектов
/// </summary>
/// <returns></returns>
public Bitmap ShowCars()
public Bitmap ShowPlanes()
{
Bitmap bmp = new(_pictureWidth, _pictureHeight);
Graphics gr = Graphics.FromImage(bmp);
@ -122,13 +118,21 @@ namespace AirBomber
/// <param name="g"></param>
private void DrawObjects(Graphics g)
{
int heightObjCount = _pictureHeight / _placeSizeHeight;
int widthObjCount = _pictureWidth / _placeSizeWidth; // Добавляем вычисление ширины
for (int i = 0; i < _collection.Count; i++)
{
// TODO получение объекта
// TODO установка позиции
// TODO прорисовка объекта
T? type = _collection.Get(i);
if (type != null)
{
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>
/// <param name="plane">Добавляемый самолет</param>
/// <returns></returns>
public bool Insert(T plane)
public int Insert(T plane)
{
// TODO вставка в начало набора
return true;
//was TODO
return Insert(plane, 0);
}
/// <summary>
/// Добавление объекта в набор на конкретную позицию
@ -41,15 +41,39 @@ namespace AirBomber
/// <param name="plane">Добавляемый самолет</param>
/// <param name="position">Позиция</param>
/// <returns></returns>
public bool Insert(T plane, int position)
public int Insert(T plane, int position)
{
// TODO проверка позиции
// TODO проверка позиции DONE
// TODO проверка, что элемент массива по этой позиции пустой,если нет, то
// проверка, что после вставляемого элемента в массиве есть пустой элемент
// сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
// TODO вставка по позиции
_places[position] = plane;
return true;
// проверка, что после вставляемого элемента в массиве есть пустой элемент
// сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
// TODO вставка по позиции
int NoEmpty = 0, temp = 0;
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>
/// Удаление объекта из набора с конкретной позиции
@ -58,9 +82,14 @@ namespace AirBomber
/// <returns></returns>
public bool Remove(int position)
{
// TODO проверка позиции
// TODO проверка позиции DONE
// TODO удаление объекта из массива, присвоив элементу массива значение null
return true;
if (!(position >= 0 && position < Count) || _places[position] == null)
{
return false;
}
_places[position] = null;
return true;
}
/// <summary>
/// Получение объекта из набора по позиции
@ -69,7 +98,11 @@ namespace AirBomber
/// <returns></returns>
public T? Get(int position)
{
// TODO проверка позиции
// TODO проверка позиции DONE
if (position < 0 || position >= Count)
{
return null;
}
return _places[position];
}