From e85221a51b7f11a908c048b680d12ced3d53339f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC=D0=B8=D1=80=20=D0=94?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=BB=D0=BE=D0=B2?= Date: Wed, 1 Nov 2023 00:29:15 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Project_DumpTruck/FormDumpTruck.cs | 24 +++++++-- .../Project_DumpTruck/FormTruckCollection.cs | 2 +- .../Project_DumpTruck/SetGeneric.cs | 54 ++++++++++++++----- .../TrucksGenericCollection.cs | 21 +++++--- 4 files changed, 77 insertions(+), 24 deletions(-) diff --git a/Project_DumpTruck/Project_DumpTruck/FormDumpTruck.cs b/Project_DumpTruck/Project_DumpTruck/FormDumpTruck.cs index 54763ae..cd8c96e 100644 --- a/Project_DumpTruck/Project_DumpTruck/FormDumpTruck.cs +++ b/Project_DumpTruck/Project_DumpTruck/FormDumpTruck.cs @@ -49,8 +49,13 @@ namespace Project_DumpTruck private void buttonCreateTruck_Click(object sender, EventArgs e) { Random random = new(); - _drawningTruck = new DrawningTruck(random.Next(100, 300), random.Next(1000, 3000), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); + ColorDialog dialog = new(); + if (dialog.ShowDialog() == DialogResult.OK) + { + color = dialog.Color; + } + _drawningTruck = new DrawningTruck(random.Next(100, 300), random.Next(1000, 3000), color, pictureBoxDumpTruck.Width, pictureBoxDumpTruck.Height); _drawningTruck.SetPosition(random.Next(10, 100), random.Next(10, 100)); @@ -90,9 +95,20 @@ namespace Project_DumpTruck private void buttonCreateDumpTruck_Click(object sender, EventArgs e) { Random random = new(); + Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); + ColorDialog dialog = new(); + if (dialog.ShowDialog() == DialogResult.OK) + { + color = dialog.Color; + } + Color dopColor = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)); + dialog = new(); + if (dialog.ShowDialog() == DialogResult.OK) + { + dopColor = dialog.Color; + } _drawningTruck = new DrawningDumpTruck(random.Next(100, 300), random.Next(1000, 3000), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), - Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)), + color, dopColor, Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)), pictureBoxDumpTruck.Width, pictureBoxDumpTruck.Height); _drawningTruck.SetPosition(random.Next(10, 100), random.Next(10, 100)); diff --git a/Project_DumpTruck/Project_DumpTruck/FormTruckCollection.cs b/Project_DumpTruck/Project_DumpTruck/FormTruckCollection.cs index 2c6b151..5af8e17 100644 --- a/Project_DumpTruck/Project_DumpTruck/FormTruckCollection.cs +++ b/Project_DumpTruck/Project_DumpTruck/FormTruckCollection.cs @@ -32,7 +32,7 @@ namespace Project_DumpTruck FormDumpTruck form = new(); if (form.ShowDialog() == DialogResult.OK) { - if (_trucks + form.selectedTruck) + if (_trucks + form.selectedTruck != -1) { MessageBox.Show("Объект добавлен"); pictureBoxCollection.Image = _trucks.ShowTrucks(); diff --git a/Project_DumpTruck/Project_DumpTruck/SetGeneric.cs b/Project_DumpTruck/Project_DumpTruck/SetGeneric.cs index 8a0b7c3..d68b95b 100644 --- a/Project_DumpTruck/Project_DumpTruck/SetGeneric.cs +++ b/Project_DumpTruck/Project_DumpTruck/SetGeneric.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; @@ -32,28 +33,54 @@ namespace Project_DumpTruck.Generics /// /// Добавление объекта в набор /// - /// Добавляемый автомобиль + /// Добавляемый автомобиль /// - public bool Insert(T car) + public int Insert(T truck) { - // TODO вставка в начало набора - return true; + return Insert(truck, 0); } /// /// Добавление объекта в набор на конкретную позицию /// - /// Добавляемый автомобиль + /// Добавляемый автомобиль /// Позиция /// - public bool Insert(T car, int position) + public int Insert(T truck, int position) { // TODO проверка позиции + if (position < 0 || position > Count) + { + return -1; + } // TODO проверка, что элемент массива по этой позиции пустой, если нет, то - // проверка, что после вставляемого элемента в массиве есть пустой элемент - // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента - // TODO вставка по позиции - _places[position] = car; - return true; + if (_places[position] != null) + { + // проверка, что после вставляемого элемента в массиве есть пустой элемент + int nullIndex = -1; + for (int i = position + 1; i < Count; i++) + { + if (_places[i] == null) + { + nullIndex = i; + break; + } + } + // Если пустого элемента нет, то выходим + if (nullIndex < 0) + { + return -1; + } + // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента + int j = nullIndex - 1; + while (j >= position) + { + _places[j + 1] = _places[j]; + j--; + } + } + // TODO вставка по позиции + _places[position] = truck; + return position; } /// /// Удаление объекта из набора с конкретной позиции @@ -63,8 +90,10 @@ namespace Project_DumpTruck.Generics public bool Remove(int position) { // TODO проверка позиции + if ((position < 0) || (position > Count)) return false; // TODO удаление объекта из массива, присвоив элементу массива значение null - return true; + _places[position] = null; + return true; } /// /// Получение объекта из набора по позиции @@ -74,6 +103,7 @@ namespace Project_DumpTruck.Generics public T? Get(int position) { // TODO проверка позиции + if ((position < 0) || (position > Count)) return null; return _places[position]; } } diff --git a/Project_DumpTruck/Project_DumpTruck/TrucksGenericCollection.cs b/Project_DumpTruck/Project_DumpTruck/TrucksGenericCollection.cs index 645824f..89b1cbc 100644 --- a/Project_DumpTruck/Project_DumpTruck/TrucksGenericCollection.cs +++ b/Project_DumpTruck/Project_DumpTruck/TrucksGenericCollection.cs @@ -23,11 +23,11 @@ namespace Project_DumpTruck.Generics /// /// Размер занимаемого объектом места (ширина) /// - private readonly int _placeSizeWidth = 210; + private readonly int _placeSizeWidth = 110; /// /// Размер занимаемого объектом места (высота) /// - private readonly int _placeSizeHeight = 90; + private readonly int _placeSizeHeight = 70; /// /// Набор объектов /// @@ -51,14 +51,14 @@ namespace Project_DumpTruck.Generics /// /// /// - public static bool operator +(TrucksGenericCollection collect, T? + public static int operator +(TrucksGenericCollection collect, T? obj) { if (obj == null) { - return false; + return -1; } - return collect?._collection.Insert(obj) ?? false; + return collect._collection.Insert(obj); } /// /// Перегрузка оператора вычитания @@ -66,8 +66,7 @@ namespace Project_DumpTruck.Generics /// /// /// - public static T? operator -(TrucksGenericCollection collect, int - pos) + public static T? operator -(TrucksGenericCollection collect, int pos) { T? obj = collect._collection.Get(pos); if (obj != null) @@ -123,11 +122,19 @@ namespace Project_DumpTruck.Generics /// private void DrawObjects(Graphics g) { + int width = _pictureWidth / _placeSizeWidth; + int height = _pictureHeight / _placeSizeHeight; + for (int i = 0; i < _collection.Count; i++) { // TODO получение объекта // TODO установка позиции // TODO прорисовка объекта + DrawningTruck? truck = _collection.Get(i); + if (truck == null) + continue; + truck.SetPosition(i % width * _placeSizeWidth, i / height * _placeSizeHeight); + truck.DrawTransport(g); } } }