122 lines
3.8 KiB
C#
Raw Normal View History

2024-04-09 08:38:25 +04:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AirBomber.Drawnings;
namespace AirBomber.CollectionGenericObjects;
/// <summary>
2024-04-09 13:54:43 +04:00
/// Абстракция компании, хранящий коллекцию самолетов
2024-04-09 08:38:25 +04:00
/// </summary>
public abstract class AbstractCompany
{
/// <summary>
/// Размер места (ширина)
/// </summary>
protected readonly int _placeSizeWidth = 210;
/// <summary>
/// Размер места (высота)
/// </summary>
2024-04-09 13:54:43 +04:00
protected readonly int _placeSizeHeight = 150;
2024-04-09 08:38:25 +04:00
/// <summary>
/// Ширина окна
/// </summary>
protected readonly int _pictureWidth;
/// <summary>
/// Высота окна
/// </summary>
protected readonly int _pictureHeight;
/// <summary>
2024-04-09 13:54:43 +04:00
/// Коллекция лодок
2024-04-09 08:38:25 +04:00
/// </summary>
protected ICollectionGenericObjects<DrawningAirPlane>? _collection = null;
/// <summary>
/// Вычисление максимального количества элементов, который можно разместить в окне
/// </summary>
private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight);
/// <summary>
/// Конструктор
/// </summary>
/// <param name="picWidth">Ширина окна</param>
/// <param name="picHeight">Высота окна</param>
2024-04-09 13:54:43 +04:00
/// <param name="collection">Коллекция лодок</param>
2024-04-09 08:38:25 +04:00
public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects<DrawningAirPlane> collection)
{
_pictureWidth = picWidth;
_pictureHeight = picHeight;
_collection = collection;
2024-05-21 00:47:54 +04:00
_collection.MaxCount = GetMaxCount;
2024-04-09 08:38:25 +04:00
}
/// <summary>
/// Перегрузка оператора сложения для класса
/// </summary>
/// <param name="company">Компания</param>
2024-04-09 13:54:43 +04:00
/// <param name="boat">Добавляемый объект</param>
2024-04-09 08:38:25 +04:00
/// <returns></returns>
2024-04-09 13:54:43 +04:00
public static int operator +(AbstractCompany company, DrawningAirPlane boat)
2024-04-09 08:38:25 +04:00
{
2024-04-09 13:54:43 +04:00
return company._collection?.Insert(boat) ?? -1;
2024-04-09 08:38:25 +04:00
}
/// <summary>
/// Перегрузка оператора удаления для класса
/// </summary>
/// <param name="company">Компания</param>
/// <param name="position">Номер удаляемого объекта</param>
/// <returns></returns>
public static DrawningAirPlane operator -(AbstractCompany company, int position)
{
return company._collection?.Remove(position) ?? null;
}
/// <summary>
/// Получение случайного объекта из коллекции
/// </summary>
/// <returns></returns>
public DrawningAirPlane? GetRandomObject()
{
Random rnd = new();
return _collection?.Get(rnd.Next(GetMaxCount));
}
/// <summary>
/// Вывод всей коллекции
/// </summary>
/// <returns></returns>
public Bitmap? Show()
{
Bitmap bitmap = new(_pictureWidth, _pictureHeight);
Graphics graphics = Graphics.FromImage(bitmap);
DrawBackground(graphics);
SetObjectsPosition();
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
{
DrawningAirPlane? obj = _collection?.Get(i);
obj?.DrawTransport(graphics);
}
return bitmap;
}
/// <summary>
/// Вывод заднего фона
/// </summary>
/// <param name="g"></param>
protected abstract void DrawBackground(Graphics g);
/// <summary>
/// Расстановка объектов
/// </summary>
protected abstract void SetObjectsPosition();
2024-04-09 13:54:43 +04:00
}