using ProjectCruiser.DrawningSamples; namespace ProjectCruiser.CollectionGenericObj; /// Абстракция компании, хранящий коллекцию автомобилей /// public abstract class AbstractCompany { // Размеры места protected readonly int _placeSizeWidth = 312; // ширина protected readonly int _placeSizeHeight = 56; // высота // Ширина окна protected readonly int _pictureWidth; // Высота окна protected readonly int _pictureHeight; // Коллекция автомобилей protected ICollectionGenObj? _collection = null; private int GetMaxCount => (_pictureWidth / (_placeSizeWidth + 20)) * ( _pictureHeight / (_placeSizeHeight + 4)); public AbstractCompany(int picWidth, int picHeight, ICollectionGenObj? collection) { _pictureWidth = picWidth; _pictureHeight = picHeight; _collection = collection; _collection.MaxCount = GetMaxCount; } // Перегрузка оператора сложения для класса // [ ! ] insted of bool: public static int operator +(AbstractCompany company, DrawningBase trasport) => company._collection.Insert(trasport); // Перегрузка оператора удаления для класса public static DrawningBase operator -(AbstractCompany company, int pos) => company._collection.Remove(pos); // Получение случайного объекта из коллекции public DrawningBase? GetRandomObject() { Random rnd = new(); return _collection?.GetItem(rnd.Next(GetMaxCount)); } // Вывод всей коллекции public Bitmap? Show() { Bitmap bitmap = new(_pictureWidth, _pictureHeight); Graphics graphics = Graphics.FromImage(bitmap); DrawBackground(graphics); SetObjectsPosition(_collection.Count - 1); for (int i = 0; i < (_collection?.Count ?? 0); i++) { DrawningBase? obj = _collection?.GetItem(i); obj?.DrawTransport(graphics); } return bitmap; } // Вывод заднего фона protected abstract void DrawBackground(Graphics g); // Расстановка объектов protected abstract void SetObjectsPosition(int border); }