еще правки

This commit is contained in:
Kirill 2024-04-18 10:50:55 +04:00
parent 7f00a3ff4d
commit 065cf88bdb
6 changed files with 118 additions and 100 deletions

View File

@ -7,44 +7,43 @@ namespace ProjectRoadTrain.CollectionGenericObjects;
/// </summary> /// </summary>
public abstract class AbstractCompany public abstract class AbstractCompany
{ {
/// <summary> /// <summary>
/// Размер места (ширина) /// Размер места (ширина)
/// </summary> /// </summary>
protected readonly int _placeSizeWidth = 200; protected readonly int _placeSizeWidth = 200;
/// <summary> /// <summary>
/// Размер места (высота) /// Размер места (высота)
/// </summary> /// </summary>
protected readonly int _placeSizeHeight = 110; protected readonly int _placeSizeHeight = 110;
/// <summary> /// <summary>
/// Ширина окна /// Ширина окна
/// </summary> /// </summary>
protected readonly int _pictureWidth; protected readonly int _pictureWidth;
/// <summary> /// <summary>
/// Высота окна /// Высота окна
/// </summary> /// </summary>
protected readonly int _pictureHeight; protected readonly int _pictureHeight;
/// <summary> /// <summary>
/// Коллекция поездов /// Коллекция автомобилей
/// </summary> /// </summary>
protected ICollectionGenericObjects<DrawningTrain>? _collection = null; protected ICollectionGenericObjects<DrawningTrain>? _collection = null;
/// <summary> /// <summary>
/// Вычисление максимального количества элементов, который можно разместить в окне /// Вычисление максимального количества элементов, который можно разместить в окне
/// </summary> /// </summary>
private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight); private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight);
/// <summary> /// <summary>
/// Конструктор /// Конструктор
/// </summary> /// </summary>
/// <param name="picWidth">Ширина окна</param> /// <param name="picWidth">Ширина окна</param>
/// <param name="picHeight">Высота окна</param> /// <param name="picHeight">Высота окна</param>
/// <param name="collection">Коллекция автомобилей</param> /// <param name="collection">Коллекция автомобилей</param>
public AbstractCompany(int picWidth, int picHeight, public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects<DrawningTrain> collection)
ICollectionGenericObjects<DrawningTrain> collection)
{ {
_pictureWidth = picWidth; _pictureWidth = picWidth;
_pictureHeight = picHeight; _pictureHeight = picHeight;
@ -52,63 +51,66 @@ public abstract class AbstractCompany
_collection.SetMaxCount = GetMaxCount; _collection.SetMaxCount = GetMaxCount;
} }
/// <summary> /// <summary>
/// Перегрузка оператора сложения для класса /// Перегрузка оператора сложения для класса
/// </summary> /// </summary>
/// <param name="company">Компания</param> /// <param name="company">Компания</param>
/// <param name="сruiser">Добавляемый объект</param> /// <param name="car">Добавляемый объект</param>
/// <returns></returns> /// <returns></returns>
public static int operator +(AbstractCompany company, DrawningTrain aircraft) public static int operator +(AbstractCompany company, DrawningTrain bus)
{ {
return company._collection.Insert(aircraft); return company._collection?.Insert(bus) ?? -1;
} }
/// <summary> /// <summary>
/// Перегрузка оператора удаления для класса /// Перегрузка оператора удаления для класса
/// </summary> /// </summary>
/// <param name="company">Компания</param> /// <param name="company">Компания</param>
/// <param name="position">Номер удаляемого объекта</param> /// <param name="position">Номер удаляемого объекта</param>
/// <returns></returns> /// <returns></returns>
public static DrawningTrain operator -(AbstractCompany company, int position) public static DrawningTrain operator -(AbstractCompany company, int position)
{ {
return company._collection?.Remove(position); return company._collection?.Remove(position) ?? null;
} }
/// <summary> /// <summary>
/// Получение случайного объекта из коллекции /// Получение случайного объекта из коллекции
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public DrawningTrain? GetRandomObject() public DrawningTrain? GetRandomObject()
{ {
Random rnd = new(); Random rnd = new();
return _collection?.Get(rnd.Next(GetMaxCount)); return _collection?.Get(rnd.Next(GetMaxCount));
} }
/// <summary> /// <summary>
/// Вывод всей коллекции /// Вывод всей коллекции
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public Bitmap? Show() public Bitmap? Show()
{ {
Bitmap bitmap = new(_pictureWidth, _pictureHeight); Bitmap bitmap = new(_pictureWidth, _pictureHeight);
Graphics graphics = Graphics.FromImage(bitmap); Graphics graphics = Graphics.FromImage(bitmap);
DrawBackgound(graphics); DrawBackgound(graphics);
SetObjectsPosition(); SetObjectsPosition();
for (int i = 0; i < (_collection?.Count ?? 0); ++i) for (int i = 0; i < (_collection?.Count ?? 0); ++i)
{ {
DrawningTrain? obj = _collection?.Get(i); DrawningTrain? obj = _collection?.Get(i);
obj?.DrawTransport(graphics); obj?.DrawTransport(graphics);
} }
return bitmap; return bitmap;
} }
/// <summary>
/// Вывод заднего фона /// <summary>
/// </summary> /// Вывод заднего фона
/// <param name="g"></param> /// </summary>
/// <param name="g"></param>
protected abstract void DrawBackgound(Graphics g); protected abstract void DrawBackgound(Graphics g);
/// <summary> /// <summary>
/// Расстановка объектов /// Расстановка объектов
/// </summary> /// </summary>
protected abstract void SetObjectsPosition(); protected abstract void SetObjectsPosition();
} }

View File

@ -17,12 +17,16 @@ where T : class
/// Список объектов, которые храним /// Список объектов, которые храним
/// </summary> /// </summary>
private readonly List<T?> _collection; private readonly List<T?> _collection;
/// <summary> /// <summary>
/// Максимально допустимое число объектов в списке /// Максимально допустимое число объектов в списке
/// </summary> /// </summary>
private int _maxCount; private int _maxCount;
public int Count => _collection.Count; public int Count => _collection.Count;
public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } } public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } }
/// <summary> /// <summary>
/// Конструктор /// Конструктор
/// </summary> /// </summary>
@ -30,49 +34,41 @@ where T : class
{ {
_collection = new(); _collection = new();
} }
public T? Get(int position) public T? Get(int position)
{ {
// TODO проверка позиции // TODO проверка позиции
if (position >= 0 && position < Count) if (position >= Count || position < 0) return null;
{ return _collection[position];
return _collection[position];
}
return null;
} }
public int Insert(T obj) public int Insert(T obj)
{ {
// TODO проверка, что не превышено максимальное количество элементов // TODO проверка, что не превышено максимальное количество элементов
// TODO вставка в конец набора // TODO вставка в конец набора
if (Count <= _maxCount) if (Count + 1 > _maxCount) return -1;
{ _collection.Add(obj);
_collection.Add(obj); return Count;
return Count;
}
return -1;
} }
public int Insert(T obj, int position) public int Insert(T obj, int position)
{ {
// TODO проверка, что не превышено максимальное количество элементов // TODO проверка, что не превышено максимальное количество элементов
// TODO проверка позиции // TODO проверка позиции
// TODO вставка по позиции // TODO вставка по позиции
if (Count < _maxCount && position >= 0 && position < _maxCount) if (Count + 1 > _maxCount) return -1;
{ if (position < 0 || position > Count) return -1;
_collection.Insert(position, obj); _collection.Insert(position, obj);
return position; return 1;
}
return -1;
} }
public T Remove(int position)
public T? Remove(int position)
{ {
// TODO проверка позиции // TODO проверка позиции
// TODO удаление объекта из списка // TODO удаление объекта из списка
T temp = _collection[position]; if (position < 0 || position > Count) return null;
if (position >= 0 && position < _maxCount) T? pos = _collection[position];
{ _collection.RemoveAt(position);
_collection.RemoveAt(position); return pos;
return temp;
}
return null;
} }
} }

View File

@ -12,8 +12,23 @@ where T : class
/// </summary> /// </summary>
private T?[] _collection; private T?[] _collection;
public int Count => _collection.Length; public int Count => _collection.Length;
public int SetMaxCount { set { if (value > 0) { _collection = new T?[value]; } } } public int SetMaxCount
{
set
{
if (value > 0)
{
if (_collection.Length > 0)
{
Array.Resize(ref _collection, value);
}
else
{
_collection = new T?[value];
}
}
}
}
/// <summary> /// <summary>
/// Конструктор /// Конструктор
/// </summary> /// </summary>

View File

@ -17,10 +17,12 @@ where T : class
/// Словарь (хранилище) с коллекциями /// Словарь (хранилище) с коллекциями
/// </summary> /// </summary>
readonly Dictionary<string, ICollectionGenericObjects<T>> _storages; readonly Dictionary<string, ICollectionGenericObjects<T>> _storages;
/// <summary> /// <summary>
/// Возвращение списка названий коллекций /// Возвращение списка названий коллекций
/// </summary> /// </summary>
public List<string> Keys => _storages.Keys.ToList(); public List<string> Keys => _storages.Keys.ToList();
/// <summary> /// <summary>
/// Конструктор /// Конструктор
/// </summary> /// </summary>
@ -28,6 +30,7 @@ where T : class
{ {
_storages = new Dictionary<string, ICollectionGenericObjects<T>>(); _storages = new Dictionary<string, ICollectionGenericObjects<T>>();
} }
/// <summary> /// <summary>
/// Добавление коллекции в хранилище /// Добавление коллекции в хранилище
/// </summary> /// </summary>
@ -37,18 +40,21 @@ where T : class
{ {
// TODO проверка, что name не пустой и нет в словаре записи с таким ключом // TODO проверка, что name не пустой и нет в словаре записи с таким ключом
// TODO Прописать логику для добавления // TODO Прописать логику для добавления
if (!(collectionType == CollectionType.None) && !_storages.ContainsKey(name)) if (name == null || _storages.ContainsKey(name)) { return; }
switch (collectionType)
{ {
if (collectionType == CollectionType.List) case CollectionType.None:
{ return;
_storages.Add(name, new ListGenericObjects<T>()); case CollectionType.Massive:
} _storages[name] = new MassiveGenericObjects<T>();
else if (collectionType == CollectionType.Massive) return;
{ case CollectionType.List:
_storages.Add(name, new MassiveGenericObjects<T>()); _storages[name] = new ListGenericObjects<T>();
} return;
} }
} }
/// <summary> /// <summary>
/// Удаление коллекции /// Удаление коллекции
/// </summary> /// </summary>
@ -56,8 +62,10 @@ where T : class
public void DelCollection(string name) public void DelCollection(string name)
{ {
// TODO Прописать логику для удаления коллекции // TODO Прописать логику для удаления коллекции
if (_storages.ContainsKey(name)) { _storages.Remove(name); } if (_storages.ContainsKey(name))
_storages.Remove(name);
} }
/// <summary> /// <summary>
/// Доступ к коллекции /// Доступ к коллекции
/// </summary> /// </summary>
@ -68,11 +76,8 @@ where T : class
get get
{ {
// TODO Продумать логику получения объекта // TODO Продумать логику получения объекта
if (_storages.ContainsKey(name)) if (name == null || !_storages.ContainsKey(name)) { return null; }
{ return _storages[name];
return _storages[name];
}
return null;
} }
} }
} }

View File

@ -64,6 +64,7 @@
groupBoxTools.Size = new Size(290, 589); groupBoxTools.Size = new Size(290, 589);
groupBoxTools.TabIndex = 0; groupBoxTools.TabIndex = 0;
groupBoxTools.TabStop = false; groupBoxTools.TabStop = false;
groupBoxTools.Tag = "";
groupBoxTools.Text = "Инструменты"; groupBoxTools.Text = "Инструменты";
// //
// panelCompanyTools // panelCompanyTools

View File

@ -244,7 +244,6 @@ namespace ProjectRoadTrain
panelCompanyTools.Enabled = true; panelCompanyTools.Enabled = true;
RerfreshListBoxItems(); RerfreshListBoxItems();
} }
/// <summary> /// <summary>
/// Обновление списка в listBoxCollection /// Обновление списка в listBoxCollection