diff --git a/WarmlyShip/WarmlyShip/FormMapWithSetWarmlyShip.cs b/WarmlyShip/WarmlyShip/FormMapWithSetWarmlyShip.cs index 5e5f9bd..fbaf5a2 100644 --- a/WarmlyShip/WarmlyShip/FormMapWithSetWarmlyShip.cs +++ b/WarmlyShip/WarmlyShip/FormMapWithSetWarmlyShip.cs @@ -68,7 +68,7 @@ namespace WarmlyShip if (form.ShowDialog() == DialogResult.OK) { DrawningObjectShip car = new(form.SelectedShip); - if (_mapWarmlyShipCollectionGeneric + car) + if ((_mapWarmlyShipCollectionGeneric + car) > -1) { MessageBox.Show("Объект добавлен"); pictureBox1.Image = _mapWarmlyShipCollectionGeneric.ShowSet(); @@ -98,7 +98,7 @@ namespace WarmlyShip return; } int pos = Convert.ToInt32(maskedTextBoxPosition.Text); - if (_mapWarmlyShipCollectionGeneric - pos) + if ((_mapWarmlyShipCollectionGeneric - pos) != null) { MessageBox.Show("Объект удален"); pictureBox1.Image = _mapWarmlyShipCollectionGeneric.ShowSet(); @@ -107,7 +107,6 @@ namespace WarmlyShip { MessageBox.Show("Не удалось удалить объект"); } - } /// diff --git a/WarmlyShip/WarmlyShip/MapWithSetWarmlyShipGeneric.cs b/WarmlyShip/WarmlyShip/MapWithSetWarmlyShipGeneric.cs index 1f628f0..56b40bc 100644 --- a/WarmlyShip/WarmlyShip/MapWithSetWarmlyShipGeneric.cs +++ b/WarmlyShip/WarmlyShip/MapWithSetWarmlyShipGeneric.cs @@ -26,11 +26,11 @@ namespace WarmlyShip /// /// Размер занимаемого объектом места (ширина) /// - private readonly int _placeSizeWidth = 210; + private readonly int _placeSizeWidth = 140; /// /// Размер занимаемого объектом места (высота) /// - private readonly int _placeSizeHeight = 90; + private readonly int _placeSizeHeight = 80; /// /// Набор объектов /// @@ -60,7 +60,7 @@ namespace WarmlyShip /// /// /// - public static bool operator +(MapWithSetWarmlyShipGeneric map, T ship) + public static int operator +(MapWithSetWarmlyShipGeneric map, T ship) { return map._setWarmlyShip.Insert(ship); } @@ -70,7 +70,7 @@ namespace WarmlyShip /// /// /// - public static bool operator -(MapWithSetWarmlyShipGeneric map, int position) + public static T operator -(MapWithSetWarmlyShipGeneric map, int position) { return map._setWarmlyShip.Remove(position); } @@ -83,7 +83,7 @@ namespace WarmlyShip Bitmap bmp = new(_pictureWidth, _pictureHeight); Graphics gr = Graphics.FromImage(bmp); DrawBackground(gr); - DrawCars(gr); + DrawWarmlyShip(gr); return bmp; } /// @@ -155,7 +155,7 @@ namespace WarmlyShip for (int j = 0; j < _pictureHeight / _placeSizeHeight + 1; ++j) {//линия рамзетки места g.DrawLine(pen, i * _placeSizeWidth, j * _placeSizeHeight, i * - _placeSizeWidth + _placeSizeWidth / 2, j * _placeSizeHeight); + _placeSizeWidth + _placeSizeWidth / 2 , j * _placeSizeHeight); } g.DrawLine(pen, i * _placeSizeWidth, 0, i * _placeSizeWidth, (_pictureHeight / _placeSizeHeight) * _placeSizeHeight); @@ -165,12 +165,25 @@ namespace WarmlyShip /// Метод прорисовки объектов /// /// - private void DrawCars(Graphics g) + private void DrawWarmlyShip(Graphics g) { - for (int i = 0; i < _setWarmlyShip.Count; i++) + // TODO установка позиции + int i = 0; + int j = 0; + for (int k = 0; k < _setWarmlyShip.Count; k++) { - // TODO установка позиции - _setWarmlyShip.Get(i)?.DrawningObject(g); + _setWarmlyShip.Get(k)?.SetObject(j + 10, i + 20, _pictureWidth, _pictureHeight); + _setWarmlyShip.Get(k)?.DrawningObject(g); + + if (j >= _pictureWidth - 2 * _placeSizeWidth) + { + j = 0; + i += _placeSizeHeight; + } + else + { + j += _placeSizeWidth; + } } } } diff --git a/WarmlyShip/WarmlyShip/SetWarmlyShipGeneric.cs b/WarmlyShip/WarmlyShip/SetWarmlyShipGeneric.cs index d441cb0..a7edbcd 100644 --- a/WarmlyShip/WarmlyShip/SetWarmlyShipGeneric.cs +++ b/WarmlyShip/WarmlyShip/SetWarmlyShipGeneric.cs @@ -34,10 +34,19 @@ namespace WarmlyShip /// /// Добавляемый корабль /// - public bool Insert(T ship) + public int Insert(T ship) { // TODO вставка в начало набора - return true; + if (ship == null) + { + return -1; + } + for (int i = Count - 1; i > 0; i--) + { + _places[i] = _places[i - 1]; + } + _places[0] = ship; + return 0; } /// /// Добавление объекта в набор на конкретную позицию @@ -45,26 +54,50 @@ namespace WarmlyShip /// Добавляемый автомобиль /// Позиция /// - public bool Insert(T ship, int position) + public int Insert(T ship, int position) { // TODO проверка позиции // TODO проверка, что элемент массива по этой позиции пустой, если нет, то // проверка, что после вставляемого элемента в массиве есть пустой элемент // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента // TODO вставка по позиции - _places[position] = ship; - return true; + if (position < 0 || position > Count) + { + return -1; + } + int firstNullElementIndex = position; //индекс первого нулевого элемента + while (_places[firstNullElementIndex] != null) + { + if (firstNullElementIndex >= Count) + { + return -1; + } + firstNullElementIndex++; + } + for (int i = firstNullElementIndex; i > position; i--) + { + _places[i] = _places[i - 1]; + } + + _places[position] = ship; + return 0; } /// /// Удаление объекта из набора с конкретной позиции /// /// /// - public bool Remove(int position) + public T Remove(int position) { // TODO проверка позиции // TODO удаление объекта из массива, присовив элементу массива значение null - return true; + if (_places[position] == null) + { + return null; + } + var result = _places[position]; + _places[position] = null; + return result; } /// /// Получение объекта из набора по позиции @@ -73,9 +106,11 @@ namespace WarmlyShip /// public T Get(int position) { - // TODO проверка позиции - return _places[position]; + if (_places[position] != null) + { + return _places[position]; + } + return null; } - } }