diff --git a/AirBomber/AirBomber/FormAirBomber.Designer.cs b/AirBomber/AirBomber/FormAirBomber.Designer.cs index 806dcdd..ae4cac6 100644 --- a/AirBomber/AirBomber/FormAirBomber.Designer.cs +++ b/AirBomber/AirBomber/FormAirBomber.Designer.cs @@ -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; } } \ No newline at end of file diff --git a/AirBomber/AirBomber/FormAirBomber.cs b/AirBomber/AirBomber/FormAirBomber.cs index 9405a12..a50d1cf 100644 --- a/AirBomber/AirBomber/FormAirBomber.cs +++ b/AirBomber/AirBomber/FormAirBomber.cs @@ -123,11 +123,10 @@ /// /// /// - private void ButtonSelectPlane_Click(object sender, EventArgs e) + private void buttonSelectPlane_Click(object sender, EventArgs e) { SelectedPlane = _drawningAirPlane; DialogResult = DialogResult.OK; } - } } \ No newline at end of file diff --git a/AirBomber/AirBomber/FormPlaneCollection.cs b/AirBomber/AirBomber/FormPlaneCollection.cs index e9e77ce..eba8446 100644 --- a/AirBomber/AirBomber/FormPlaneCollection.cs +++ b/AirBomber/AirBomber/FormPlaneCollection.cs @@ -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 /// private void buttonRefreshCollection_Click(object sender, EventArgs e) { - pictureBoxCollection.Image = _planes.ShowCars(); + pictureBoxCollection.Image = _planes.ShowPlanes(); } } } diff --git a/AirBomber/AirBomber/PlanesGenericCollection.cs b/AirBomber/AirBomber/PlanesGenericCollection.cs index c19df9f..0031f45 100644 --- a/AirBomber/AirBomber/PlanesGenericCollection.cs +++ b/AirBomber/AirBomber/PlanesGenericCollection.cs @@ -21,11 +21,11 @@ namespace AirBomber /// /// Размер занимаемого объектом места (ширина) /// - private readonly int _placeSizeWidth = 210; + private readonly int _placeSizeWidth = 150; /// /// Размер занимаемого объектом места (высота) /// - private readonly int _placeSizeHeight = 90; + private readonly int _placeSizeHeight = 118; /// /// Набор объектов /// @@ -49,14 +49,11 @@ namespace AirBomber /// /// /// - public static bool operator +(PlanesGenericCollection collect, T? - obj) + public static int operator +(PlanesGenericCollection collect, T? obj) { if (obj == null) - { - return false; - } - return collect?._collection.Insert(obj) ?? false; + return -1; + return collect?._collection.Insert(obj) ?? -1; } /// @@ -65,8 +62,7 @@ namespace AirBomber /// /// /// - public static T? operator -(PlanesGenericCollection collect, int - pos) + public static T? operator -(PlanesGenericCollection collect, int pos) { T? obj = collect._collection.Get(pos); if (obj != null) @@ -88,7 +84,7 @@ namespace AirBomber /// Вывод всего набора объектов /// /// - public Bitmap ShowCars() + public Bitmap ShowPlanes() { Bitmap bmp = new(_pictureWidth, _pictureHeight); Graphics gr = Graphics.FromImage(bmp); @@ -122,13 +118,21 @@ namespace AirBomber /// 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); + } } } - } } diff --git a/AirBomber/AirBomber/SetGeneric.cs b/AirBomber/AirBomber/SetGeneric.cs index 605f044..8fe83a3 100644 --- a/AirBomber/AirBomber/SetGeneric.cs +++ b/AirBomber/AirBomber/SetGeneric.cs @@ -30,10 +30,10 @@ namespace AirBomber /// /// Добавляемый самолет /// - public bool Insert(T plane) + public int Insert(T plane) { - // TODO вставка в начало набора - return true; + //was TODO + return Insert(plane, 0); } /// /// Добавление объекта в набор на конкретную позицию @@ -41,15 +41,39 @@ namespace AirBomber /// Добавляемый самолет /// Позиция /// - 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; } /// /// Удаление объекта из набора с конкретной позиции @@ -58,9 +82,14 @@ namespace AirBomber /// 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; } /// /// Получение объекта из набора по позиции @@ -69,7 +98,11 @@ namespace AirBomber /// public T? Get(int position) { - // TODO проверка позиции + // TODO проверка позиции DONE + if (position < 0 || position >= Count) + { + return null; + } return _places[position]; }