From 377098a07aa98560d31b8133c45a1c279180236f Mon Sep 17 00:00:00 2001
From: Esenia12 <148366616+Esenia12@users.noreply.github.com>
Date: Sat, 2 Mar 2024 22:52:16 +0400
Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86?=
=?UTF-8?q?=D0=B8=D0=B8=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AbstractCompany.cs | 112 ++++++++++++++++++
.../CarSharingService.cs | 6 +
.../ICollectionGenericObjects.cs | 50 ++++++++
.../MassiveGenericObjects.cs | 85 +++++++++++++
4 files changed, 253 insertions(+)
create mode 100644 ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/AbstractCompany.cs
create mode 100644 ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/CarSharingService.cs
create mode 100644 ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/ICollectionGenericObjects.cs
create mode 100644 ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/MassiveGenericObjects.cs
diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/AbstractCompany.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/AbstractCompany.cs
new file mode 100644
index 0000000..6413673
--- /dev/null
+++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/AbstractCompany.cs
@@ -0,0 +1,112 @@
+using ProjectDumpTrack.Drawnings;
+namespace ProjectDumpTruck.CollectionGenericObjects;
+
+public abstract class AbstractCompany
+{
+ ///
+ /// Размер места (ширина)
+ ///
+ protected readonly int _placeSizeWidth = 210;
+
+ ///
+ /// Размер места (высота)
+ ///
+ protected readonly int _placeSizeHeight = 80;
+
+ ///
+ /// Ширина окна
+ ///
+ protected readonly int _pictureWidth;
+
+ ///
+ /// Высота окна
+ ///
+ protected readonly int _pictureHeight;
+
+ ///
+ /// Коллекция автомобилей
+ ///
+ protected ICollectionGenericObjects? _collection = null;
+
+ ///
+ /// Вычисление максимального количества элементов, который можно разместить в окне
+ ///
+ private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight);
+
+ ///
+ /// Конструктор
+ ///
+ /// Ширина окна
+ /// Высота окна
+ /// Коллекция автомобилей
+ public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects collection)
+ {
+ _pictureWidth = picWidth;
+ _pictureHeight = picHeight;
+ _collection = collection;
+ _collection.SetMaxCount = GetMaxCount;
+ }
+
+ ///
+ /// Перегрузка оператора сложения для класса
+ ///
+ /// Компания
+ /// Добавляемый объект
+ ///
+ public static bool operator +(AbstractCompany company, DrawningTrack car)
+ {
+ return company._collection?.Insert(car) ?? false;
+ }
+
+ ///
+ /// Перегрузка оператора удаления для класса
+ ///
+ /// Компания
+ /// Номер удаляемого объекта
+ ///
+ public static bool operator -(AbstractCompany company, int position)
+ {
+ return company._collection?.Remove(position) ?? false;
+ }
+
+ ///
+ /// Получение случайного объекта из коллекции
+ ///
+ ///
+ public DrawningTrack? GetRandomObject()
+ {
+ Random rnd = new();
+ return _collection?.Get(rnd.Next(GetMaxCount));
+ }
+
+ ///
+ /// Вывод всей коллекции
+ ///
+ ///
+ public Bitmap? Show()
+ {
+ Bitmap bitmap = new(_pictureWidth, _pictureHeight);
+ Graphics graphics = Graphics.FromImage(bitmap);
+ DrawBackgound(graphics);
+
+ SetObjectsPosition();
+ for (int i = 0; i < (_collection?.Count ?? 0); ++i)
+ {
+ DrawningTrack? obj = _collection?.Get(i);
+ obj?.DrawTransport(graphics);
+ }
+
+ return bitmap;
+ }
+
+ ///
+ /// Вывод заднего фона
+ ///
+ ///
+ protected abstract void DrawBackgound(Graphics g);
+
+ ///
+ /// Расстановка объектов
+ ///
+ protected abstract void SetObjectsPosition();
+}
diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/CarSharingService.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/CarSharingService.cs
new file mode 100644
index 0000000..e2ada74
--- /dev/null
+++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/CarSharingService.cs
@@ -0,0 +1,6 @@
+
+namespace ProjectDumpTruck.CollectionGenericObjects;
+
+internal class CarSharingService
+{
+}
diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/ICollectionGenericObjects.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/ICollectionGenericObjects.cs
new file mode 100644
index 0000000..eda278c
--- /dev/null
+++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/ICollectionGenericObjects.cs
@@ -0,0 +1,50 @@
+
+namespace ProjectDumpTruck.CollectionGenericObjects;
+
+
+///
+/// Интерфейс описания действий для набора хранимых объектов
+///
+/// Параметр: ограничение - ссылочный тип
+public interface ICollectionGenericObjects
+ where T : class
+{
+ ///
+ /// Количество объектов в коллекции
+ ///
+ int Count { get; }
+
+ ///
+ /// Установка максимального количества элементов
+ ///
+ int SetMaxCount { set; }
+
+ ///
+ /// Добавление объекта в коллекцию
+ ///
+ /// Добавляемый объект
+ /// true - вставка прошла удачно, false - вставка не удалась
+ bool Insert(T obj);
+
+ ///
+ /// Добавление объекта в коллекцию на конкретную позицию
+ ///
+ /// Добавляемый объект
+ /// Позиция
+ /// true - вставка прошла удачно, false - вставка не удалась
+ bool Insert(T obj, int position);
+
+ ///
+ /// Удаление объекта из коллекции с конкретной позиции
+ ///
+ /// Позиция
+ /// true - удаление прошло удачно, false - удаление не удалось
+ bool Remove(int position);
+
+ ///
+ /// Получение объекта по позиции
+ ///
+ /// Позиция
+ /// Объект
+ T? Get(int position);
+}
diff --git a/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/MassiveGenericObjects.cs
new file mode 100644
index 0000000..cecc38d
--- /dev/null
+++ b/ProjectDumpTruck/ProjectDumpTruck/CollectionGenericObjects/MassiveGenericObjects.cs
@@ -0,0 +1,85 @@
+
+namespace ProjectDumpTruck.CollectionGenericObjects;
+
+internal class SetDumpTrackGeneric
+ where T : class
+{
+ private readonly T[] _collection;
+ public int Count => _collection.Length;
+ public SetDumpTrackGeneric(int count)
+ {
+ _collection = new T[count];
+ }
+
+ public int Insert(T DumpTrack)
+ {
+ // TODO вставка в начало набора
+ if (_collection[Count - 1] == null)
+ {
+ for (int i = Count - 1; i > 0; i--)
+ {
+ _collection[i] = _collection[i - 1];
+ }
+ _collection[0] = DumpTrack;
+ return 0;
+ }
+ return -1;
+ }
+ public int Insert(T DumpTrack, int position)
+ {
+ // TODO проверка позиции
+ // TODO проверка, что элемент массива по этой позиции пустой, если нет, то
+ // проверка, что после вставляемого элемента в массиве есть пустой элемент
+ // сдвиг всех объектов, находящихся справа от позиции до первого пустого элемента
+ // TODO вставка по позиции
+ if (position < 0 || position >= Count) return -1;
+ if (_collection[position] == null)
+ {
+ _collection[position] = DumpTrack;
+ return position;
+ }
+ else
+ {
+ if (_collection[Count - 1] == null)
+ {
+ for (int i = Count - 1; i > position; i--)
+ {
+ _collection[i] = _collection[i - 1];
+ }
+ _collection[position] = DumpTrack;
+ return position;
+ }
+ return -1;
+ }
+ }
+
+ public T Remove(int position)
+ {
+ // TODO проверка позиции
+ // TODO удаление объекта из массива, присовив элементу массива значение null
+ if (position < 0 || position >= Count)
+ return null;
+ if (_collection[position] != null)
+ {
+ T removed = _collection[position];
+ _collection[position] = null;
+ if (position < Count - 1)
+ {
+ for (int k = position; k < Count - 1; k++)
+ {
+ _collection[k] = _collection[k + 1];
+ }
+ }
+ return removed;
+ }
+ return null;
+ }
+ public T Get(int position)
+ {
+ // TODO проверка позиции
+ if (position >= Count || position < 0)
+ return null;
+
+ return _collection[position];
+ }
+}