Compare commits
34 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a5d54664c8 | ||
|
132d748335 | ||
|
ecdd4af98d | ||
|
a794117141 | ||
|
d15a731a0b | ||
|
a6214ebf50 | ||
|
8099071590 | ||
|
5561fe3211 | ||
|
d3002e061b | ||
|
beb3b23a63 | ||
|
6bdae3afef | ||
|
41443da6cf | ||
|
e160e20a97 | ||
|
8b72f79d1b | ||
|
a4ddd7c407 | ||
|
d61123f404 | ||
|
f09ac7ed4d | ||
|
f7e90e6ffa | ||
|
df565e4295 | ||
|
fc61c617ed | ||
|
4d51d18658 | ||
|
40c301658b | ||
|
373a50c33e | ||
|
1ed3ddbdbd | ||
|
64fdafe57a | ||
|
ee25905cc2 | ||
|
8cbceb87b7 | ||
|
f8b0e3baa1 | ||
|
19049b7467 | ||
|
9971ee0609 | ||
|
f3f9c1547e | ||
|
1e3c260993 | ||
|
2c774e7f39 | ||
|
9bf2ee06c2 |
@ -2,10 +2,36 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net8.0-windows</TargetFramework>
|
||||
<TargetFramework>net6.0-windows7.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.11" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Properties\Resources.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="nlog.config">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,112 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AccordionBus.Drawnings;
|
||||
namespace AccordionBus.CollectionGenericObjects;
|
||||
|
||||
using ProjectAccordionBus.CollectionGenericObjects;
|
||||
|
||||
/// <summary>
|
||||
/// Абстракция компании, хранящий коллекцию автобусов
|
||||
/// </summary>
|
||||
public abstract class AbstractCompany
|
||||
{
|
||||
/// <summary>
|
||||
/// Размер места (ширина)
|
||||
/// </summary>
|
||||
protected readonly int _placeSizeWidth = 240;
|
||||
/// <summary>
|
||||
/// Размер места (высота)
|
||||
/// </summary>
|
||||
protected readonly int _placeSizeHeight = 50;
|
||||
/// <summary>
|
||||
/// Ширина окна
|
||||
/// </summary>
|
||||
protected readonly int _pictureWidth;
|
||||
/// <summary>
|
||||
/// Высота окна
|
||||
/// </summary>
|
||||
protected readonly int _pictureHeight;
|
||||
/// <summary>
|
||||
/// Коллекция автомобилей
|
||||
/// </summary>
|
||||
protected ICollectionGenericObjects<DrawningBus>? _collection = null;
|
||||
/// <summary>
|
||||
/// Вычисление максимального количества элементов, который можно разместить в окне
|
||||
/// </summary>
|
||||
private int GetMaxCount => _pictureWidth * _pictureHeight / (_placeSizeWidth * _placeSizeHeight);
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="picWidth">Ширина окна</param>
|
||||
/// <param name="picHeight">Высота окна</param>
|
||||
/// <param name="collection">Коллекция автомобилей</param>
|
||||
public AbstractCompany(int picWidth, int picHeight, ICollectionGenericObjects<DrawningBus> collection)
|
||||
{
|
||||
_pictureWidth = picWidth;
|
||||
_pictureHeight = picHeight;
|
||||
_collection = collection;
|
||||
_collection.MaxCount = GetMaxCount;
|
||||
}
|
||||
/// <summary>
|
||||
/// Перегрузка оператора сложения для класса
|
||||
/// </summary>
|
||||
/// <param name="company">Компания</param>
|
||||
/// <param name="car">Добавляемый объект</param>
|
||||
/// <returns></returns>
|
||||
public static bool operator +(AbstractCompany company, DrawningBus bus)
|
||||
{
|
||||
return company._collection?.Insert(bus)!=-1? true : false;
|
||||
}
|
||||
/// <summary>
|
||||
/// Перегрузка оператора удаления для класса
|
||||
/// </summary>
|
||||
/// <param name="company">Компания</param>
|
||||
/// <param name="position">Номер удаляемого объекта</param>
|
||||
/// <returns></returns>
|
||||
public static DrawningBus operator -(AbstractCompany? company, int position)
|
||||
{
|
||||
return company._collection.Remove(position);
|
||||
}
|
||||
/// <summary>
|
||||
/// Получение случайного объекта из коллекции
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public DrawningBus? 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);
|
||||
DrawBackgound(graphics);
|
||||
SetObjectsPosition();
|
||||
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
|
||||
{
|
||||
try
|
||||
{
|
||||
DrawningBus? obj = _collection?.Get(i);
|
||||
obj?.DrawTransport(graphics);
|
||||
}
|
||||
catch (Exception) { }
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
/// <summary>
|
||||
/// Вывод заднего фона
|
||||
/// </summary>
|
||||
/// <param name="g"></param>
|
||||
protected abstract void DrawBackgound(Graphics g);
|
||||
/// <summary>
|
||||
/// Расстановка объектов
|
||||
/// </summary>
|
||||
protected abstract void SetObjectsPosition();
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
using ProjectAccordionBus.CollectionGenericObjects;
|
||||
using AccordionBus.Drawnings;
|
||||
using AccordionBus.Exceptions;
|
||||
|
||||
namespace AccordionBus.CollectionGenericObjects;
|
||||
|
||||
public class BusStation : AbstractCompany
|
||||
{
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="picWidth"></param>
|
||||
/// <param name="picHeight"></param>
|
||||
/// <param name="collection"></param>
|
||||
public BusStation(int picWidth, int picHeight, ICollectionGenericObjects<DrawningBus> collection) : base(picWidth, picHeight, collection){}
|
||||
protected override void DrawBackgound(Graphics g)
|
||||
{
|
||||
Pen pen = new(Color.Black, 3);
|
||||
int posX = 0;
|
||||
for (int i = 0; i < _pictureWidth / _placeSizeWidth; i++)
|
||||
{
|
||||
int posY = 0;
|
||||
g.DrawLine(pen, posX, posY, posX, posY + _placeSizeHeight * (_pictureHeight / _placeSizeHeight));
|
||||
for (int j = 0; j <= _pictureHeight / _placeSizeHeight; j++)
|
||||
{
|
||||
g.DrawLine(pen, posX, posY, posX + _placeSizeWidth - 30, posY);
|
||||
posY += _placeSizeHeight;
|
||||
}
|
||||
posX += _placeSizeWidth;
|
||||
|
||||
}
|
||||
}
|
||||
protected override void SetObjectsPosition()
|
||||
{
|
||||
int posX = 0;
|
||||
int posY = _pictureHeight / _placeSizeHeight-1;
|
||||
for (int i = 0; i < (_collection?.Count ?? 0); i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
_collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight);
|
||||
_collection?.Get(i)?.SetPosition(posX * _placeSizeWidth + 5, posY * _placeSizeHeight + 5);
|
||||
}
|
||||
catch(Exception) {}
|
||||
if (posY > 0)
|
||||
{
|
||||
posY--;
|
||||
}
|
||||
else
|
||||
{
|
||||
posX++;
|
||||
posY = _pictureHeight / _placeSizeHeight-1;
|
||||
}
|
||||
if (posY < 0) { return; }
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.CollectionGenericObjects;
|
||||
|
||||
public enum CollectionType
|
||||
{
|
||||
None=0, Massive=1, List=2
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
using AccordionBus.CollectionGenericObjects;
|
||||
|
||||
namespace ProjectAccordionBus.CollectionGenericObjects;
|
||||
/// <summary>
|
||||
/// Интерфейс описания действий для набора хранимых объектов
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Параметр: ограничение - ссылочный тип</typeparam>
|
||||
public interface ICollectionGenericObjects<T>
|
||||
where T : class
|
||||
{
|
||||
/// <summary>
|
||||
/// Количество объектов в коллекции
|
||||
/// </summary>
|
||||
int Count { get; }
|
||||
///<summary>
|
||||
/// Установка макс. кол-ва элементов
|
||||
int MaxCount { get; set; }
|
||||
///</summary>
|
||||
/// <summary>
|
||||
/// Добавление объекта в коллекцию
|
||||
/// </summary>
|
||||
/// <param name="obj">Добавляемый объект</param>
|
||||
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
|
||||
|
||||
int Insert(T obj);
|
||||
/// <summary>
|
||||
/// Добавление объекта в коллекцию на конкретную позицию
|
||||
/// </summary>
|
||||
/// <param name="obj">Добавляемый объект</param>
|
||||
/// <param name="position">Позиция</param>
|
||||
/// <returns>true - вставка прошла удачно, false - вставка не удалась</returns>
|
||||
int Insert(T obj, int position);
|
||||
/// <summary>
|
||||
/// Удаление объекта из коллекции с конкретной позиции
|
||||
/// </summary>
|
||||
/// <param name="position">Позиция</param>
|
||||
/// <returns>true - удаление прошло удачно, false - удаление не удалось</returns>
|
||||
T? Remove(int position);
|
||||
/// <summary>
|
||||
/// Получение объекта по позиции
|
||||
/// </summary>
|
||||
/// <param name="position">Позиция</param>
|
||||
/// <returns>Объект</returns>
|
||||
T? Get(int position);
|
||||
/// <summary>
|
||||
/// Получение типа коллекции
|
||||
/// </summary>
|
||||
CollectionType GetCollectionType { get; }
|
||||
/// <summary>
|
||||
/// Получение объектов коллекции по одному
|
||||
/// </summary>
|
||||
/// <returns>Поэлементый вывод элементов коллекции</returns>
|
||||
IEnumerable<T?> GetItems();
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
using AccordionBus.Exceptions;
|
||||
using ProjectAccordionBus.CollectionGenericObjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.CollectionGenericObjects;
|
||||
|
||||
public class ListGenericObjects<T>:ICollectionGenericObjects<T> where T : class
|
||||
{
|
||||
private readonly List<T?> _collection;
|
||||
private int _maxCount;
|
||||
public int Count => _collection.Count;
|
||||
public CollectionType GetCollectionType => CollectionType.List;
|
||||
|
||||
public int MaxCount {
|
||||
get
|
||||
{
|
||||
return _maxCount;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value > 0) _maxCount = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public ListGenericObjects()
|
||||
{
|
||||
_collection = new();
|
||||
}
|
||||
|
||||
public T? Get(int position)
|
||||
{
|
||||
if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position);
|
||||
return _collection[position];
|
||||
}
|
||||
|
||||
public int Insert(T obj)
|
||||
{
|
||||
if (Count == _maxCount) throw new CollectionOverflowException(Count);
|
||||
_collection.Add(obj);
|
||||
return Count;
|
||||
}
|
||||
|
||||
public int Insert(T obj, int position)
|
||||
{
|
||||
if (position < 0 || position >= Count)
|
||||
throw new PositionOutOfCollectionException(position);
|
||||
|
||||
if (Count == _maxCount)
|
||||
throw new CollectionOverflowException(Count);
|
||||
_collection.Insert(position, obj);
|
||||
return position;
|
||||
}
|
||||
|
||||
public T? Remove(int position)
|
||||
{
|
||||
if (position >= Count || position < 0) throw new PositionOutOfCollectionException(position);
|
||||
T? obj = _collection[position];
|
||||
_collection.RemoveAt(position);
|
||||
return obj;
|
||||
}
|
||||
|
||||
public IEnumerable<T?> GetItems()
|
||||
{
|
||||
for (int i = 0; i < _collection.Count; i++)
|
||||
{
|
||||
yield return _collection[i];
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
using AccordionBus.Exceptions;
|
||||
using ProjectAccordionBus.CollectionGenericObjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.CollectionGenericObjects;
|
||||
public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
|
||||
where T : class
|
||||
{
|
||||
private T?[] _collection;
|
||||
|
||||
public int Count => _collection.Length;
|
||||
|
||||
public int MaxCount
|
||||
{
|
||||
|
||||
get
|
||||
{
|
||||
return _collection.Length;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value > 0)
|
||||
{
|
||||
if (_collection.Length > 0)
|
||||
{
|
||||
Array.Resize(ref _collection, value-9);
|
||||
}
|
||||
else
|
||||
{
|
||||
_collection = new T?[value-9];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public CollectionType GetCollectionType => CollectionType.Massive;
|
||||
|
||||
public MassiveGenericObjects()
|
||||
{
|
||||
_collection = Array.Empty<T?>();
|
||||
}
|
||||
|
||||
public T Get(int position)
|
||||
{
|
||||
if (position < 0 || position >= _collection.Length)
|
||||
{
|
||||
throw new PositionOutOfCollectionException();
|
||||
}
|
||||
if (_collection[position] == null)
|
||||
{
|
||||
throw new ObjectNotFoundException(position);
|
||||
}
|
||||
return _collection[position];
|
||||
}
|
||||
|
||||
public int Insert(T obj)
|
||||
{
|
||||
for (int i = 0; i < _collection.Length; i++)
|
||||
{
|
||||
if (_collection[i] == null)
|
||||
{
|
||||
_collection[i] = obj;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
throw new CollectionOverflowException(Count);
|
||||
}
|
||||
|
||||
public int Insert(T obj, int position)
|
||||
{
|
||||
if (position < 0 || position >= _collection.Length)
|
||||
{
|
||||
throw new PositionOutOfCollectionException(position);
|
||||
}
|
||||
|
||||
if (_collection[position] == null)
|
||||
{
|
||||
_collection[position] = obj;
|
||||
return position;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = position; i < _collection.Length; ++i) //ищем свободное место справа
|
||||
{
|
||||
if (_collection[i] == null)
|
||||
{
|
||||
_collection[i] = obj;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < position; ++i) // иначе слева
|
||||
{
|
||||
if (_collection[i] == null)
|
||||
{
|
||||
_collection[i] = obj;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new CollectionOverflowException(Count);
|
||||
}
|
||||
|
||||
public T? Remove(int position)
|
||||
{
|
||||
if (position < 0 || position >= _collection.Length)
|
||||
throw new PositionOutOfCollectionException(position);
|
||||
T? obj = _collection[position];
|
||||
if (_collection[position] == null)
|
||||
{
|
||||
throw new ObjectNotFoundException(position);
|
||||
}
|
||||
if (_collection[position] != null)
|
||||
{
|
||||
_collection[position] = null;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
public IEnumerable<T?> GetItems()
|
||||
{
|
||||
for (int i = 0; i < _collection.Length; ++i)
|
||||
{
|
||||
yield return _collection[i];
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,218 @@
|
||||
using AccordionBus.Drawnings;
|
||||
using AccordionBus.Exceptions;
|
||||
using ProjectAccordionBus.CollectionGenericObjects;
|
||||
using System.Text;
|
||||
|
||||
namespace AccordionBus.CollectionGenericObjects;
|
||||
/// <summary>
|
||||
/// Класс-хранилище коллекций
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class StorageCollection<T> where T : DrawningBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Словарь (хранилище) с коллекциями
|
||||
/// </summary>
|
||||
readonly Dictionary<string, ICollectionGenericObjects<T>> _storages;
|
||||
|
||||
/// <summary>
|
||||
/// Возвращение списка названий коллекций
|
||||
/// </summary>
|
||||
public List<string> Keys => _storages.Keys.ToList();
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public StorageCollection()
|
||||
{
|
||||
_storages = new Dictionary<string, ICollectionGenericObjects<T>>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление коллекции в хранилище
|
||||
/// </summary>
|
||||
/// <param name="name">Название коллекции</param>
|
||||
/// <param name="collectionType">тип коллекции</param>
|
||||
public void AddCollection(string name, CollectionType collectionType)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name) || _storages.ContainsKey(name))
|
||||
{
|
||||
return;
|
||||
}
|
||||
switch (collectionType)
|
||||
{
|
||||
case CollectionType.Massive:
|
||||
_storages[name] = new MassiveGenericObjects<T>();
|
||||
break;
|
||||
case CollectionType.List:
|
||||
_storages[name] = new ListGenericObjects<T>();
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Удаление коллекции
|
||||
/// </summary>
|
||||
/// <param name="name">Название коллекции</param>
|
||||
public void DelCollection(string name)
|
||||
{
|
||||
if (_storages.ContainsKey(name))
|
||||
{
|
||||
_storages.Remove(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Доступ к коллекции
|
||||
/// </summary>
|
||||
/// <param name="name">Название коллекции</param>
|
||||
/// <returns></returns>
|
||||
public ICollectionGenericObjects<T>? this[string name]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_storages.ContainsKey(name))
|
||||
{
|
||||
return _storages[name];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Ключевое слово, с которого должен начинаться файл
|
||||
/// </summary>
|
||||
private readonly string _collectionKey = "CollectionsStorage";
|
||||
/// <summary>
|
||||
/// Разделитель для записи ключа и значения элемента словаря
|
||||
/// </summary>
|
||||
private readonly string _separatorForKeyValue = "|";
|
||||
/// <summary>
|
||||
/// Разделитель для записей коллекции данных в файл
|
||||
/// </summary>
|
||||
private readonly string _separatorItems = ";";
|
||||
/// <summary>
|
||||
/// Сохранение информации по самолетам в хранилище в файл
|
||||
/// </summary>
|
||||
/// <param name="filename">Путь и имя файла</param>
|
||||
/// <returns>true - сохранение прошло успешно, false - ошибка при сохранении данных</returns>
|
||||
public void SaveData(string filename)
|
||||
{
|
||||
if (_storages.Count == 0)
|
||||
{
|
||||
throw new Exception("В хранилище отсутствуют коллекции для сохранения");
|
||||
}
|
||||
if (File.Exists(filename))
|
||||
{
|
||||
File.Delete(filename);
|
||||
}
|
||||
StringBuilder sb = new();
|
||||
sb.Append(_collectionKey);
|
||||
foreach (KeyValuePair<string, ICollectionGenericObjects<T>> value in
|
||||
_storages)
|
||||
{
|
||||
sb.Append(Environment.NewLine);
|
||||
// не сохраняем пустые коллекции
|
||||
if (value.Value.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
sb.Append(value.Key);
|
||||
sb.Append(_separatorForKeyValue);
|
||||
sb.Append(value.Value.GetCollectionType);
|
||||
sb.Append(_separatorForKeyValue);
|
||||
sb.Append(value.Value.MaxCount);
|
||||
sb.Append(_separatorForKeyValue);
|
||||
foreach (T? item in value.Value.GetItems())
|
||||
{
|
||||
string data = item?.GetDataForSave() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(data))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
sb.Append(data);
|
||||
sb.Append(_separatorItems);
|
||||
}
|
||||
}
|
||||
using FileStream fs = new(filename, FileMode.Create);
|
||||
byte[] info = new UTF8Encoding(true).GetBytes(sb.ToString());
|
||||
fs.Write(info, 0, info.Length);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Загрузка информации по самолетам в хранилище из файла
|
||||
/// </summary>
|
||||
/// <param name="filename">Путь и имя файла</param>
|
||||
/// <returns>true - загрузка прошла успешно, false - ошибка при загрузке данных</returns>
|
||||
public void LoadData(string filename)
|
||||
{
|
||||
if (!File.Exists(filename))
|
||||
{
|
||||
throw new Exception("Файл не существует");
|
||||
}
|
||||
|
||||
using (StreamReader sr = new StreamReader(filename))
|
||||
{
|
||||
string? str;
|
||||
str = sr.ReadLine();
|
||||
if (str == null || str.Length == 0)
|
||||
throw new Exception("В файле нет данных");
|
||||
if (str != _collectionKey.ToString())
|
||||
throw new Exception("В файле неверные данные");
|
||||
_storages.Clear();
|
||||
while ((str = sr.ReadLine()) != null)
|
||||
{
|
||||
string[] record = str.Split(_separatorForKeyValue);
|
||||
if (record.Length != 4)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
CollectionType collectionType = (CollectionType)Enum.Parse(typeof(CollectionType), record[1]);
|
||||
ICollectionGenericObjects<T>? collection = StorageCollection<T>.CreateCollection(collectionType);
|
||||
if (collection == null)
|
||||
{
|
||||
throw new Exception("Не удалось создать коллекцию");
|
||||
}
|
||||
|
||||
collection.MaxCount = Convert.ToInt32(record[2])+9;
|
||||
|
||||
string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (string elem in set)
|
||||
{
|
||||
if (elem?.CreateDrawningBus() is T bus)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (collection.Insert(bus) == -1)
|
||||
throw new Exception("Объект не удалось добавить в коллекцию: " + record[3]);
|
||||
}
|
||||
catch (CollectionOverflowException ex)
|
||||
{
|
||||
throw new Exception("Коллекция переполнена", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
_storages.Add(record[0], collection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание коллекции по типу
|
||||
/// </summary>
|
||||
/// <param name="collectionType"></param>
|
||||
/// <returns></returns>
|
||||
private static ICollectionGenericObjects<T>?
|
||||
CreateCollection(CollectionType collectionType)
|
||||
{
|
||||
return collectionType switch
|
||||
{
|
||||
CollectionType.Massive => new MassiveGenericObjects<T>(),
|
||||
CollectionType.List => new ListGenericObjects<T>(),
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
}
|
12
AccordionBus/AccordionBus/Drawnings/DirectionType.cs
Normal file
12
AccordionBus/AccordionBus/Drawnings/DirectionType.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Drawnings;
|
||||
|
||||
public enum DirectionType
|
||||
{
|
||||
Up = 1, Down = 2, Left = 3, Right = 4, Unknow = -1
|
||||
}
|
85
AccordionBus/AccordionBus/Drawnings/DrawningAccordionBus.cs
Normal file
85
AccordionBus/AccordionBus/Drawnings/DrawningAccordionBus.cs
Normal file
@ -0,0 +1,85 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AccordionBus.Drawnings;
|
||||
using AccordionBus.Entities;
|
||||
|
||||
namespace AccordionBus.Drawnings;
|
||||
public class DrawningAccordionBus:DrawningBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||
/// <param name="bodyGlass">Признак наличия стёкол</param>
|
||||
/// /// <param name="garmoshka">Признак наличия гармошки</param>
|
||||
|
||||
public DrawningAccordionBus(EntityAccordionBus bus) : base(200, 40)
|
||||
{
|
||||
EntityBus = bus;
|
||||
}
|
||||
public DrawningAccordionBus(int speed, double weight, Color bodyColor, Color
|
||||
additionalColor, bool bodyGlass,bool garmoshka): base(200, 40)
|
||||
{
|
||||
EntityBus = new EntityAccordionBus(speed, weight, bodyColor, additionalColor,
|
||||
bodyGlass, garmoshka);
|
||||
}
|
||||
/// <summary>
|
||||
/// перегрузка для создания автобуса в коллекцию базового типа
|
||||
/// </summary>
|
||||
/// <param name="speed">скорость</param>
|
||||
/// <param name="weight">вес</param>
|
||||
/// <param name="bodyColor">основной цвет</param>
|
||||
public DrawningAccordionBus(int speed, double weight, Color bodyColor) : base(220, 50)
|
||||
{
|
||||
EntityBus = new EntityAccordionBus(speed, weight, bodyColor);
|
||||
}
|
||||
|
||||
public override void DrawTransport(Graphics g)
|
||||
{
|
||||
if(EntityBus == null || EntityBus is not EntityAccordionBus accordionBus || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||
return;
|
||||
base.DrawTransport(g);
|
||||
//гармошка
|
||||
if (accordionBus.BodyGarmoshka)
|
||||
{
|
||||
g.FillRectangle(new HatchBrush(HatchStyle.Vertical, Color.Black, EntityBus.BodyColor), _startPosX.Value + 90, _startPosY.Value, 40, 30);
|
||||
g.DrawRectangle(new Pen(Color.Black), _startPosX.Value, _startPosY.Value, 90, 30);
|
||||
g.DrawRectangle(new Pen(Color.Black), _startPosX.Value + 90, _startPosY.Value, 40, 30);
|
||||
g.FillRectangle(new SolidBrush(accordionBus.BodyColor), _startPosX.Value + 130, _startPosY.Value, 70, 30);
|
||||
g.DrawRectangle(new Pen(Color.Black), _startPosX.Value + 130, _startPosY.Value, 70, 30);
|
||||
g.FillRectangle(new SolidBrush(Color.Black), _startPosX.Value + 155, _startPosY.Value + 10, 5, 20);
|
||||
g.FillRectangle(new SolidBrush(Color.Black), _startPosX.Value + 175, _startPosY.Value + 10, 5, 20);
|
||||
g.DrawEllipse(new Pen(Color.Black), _startPosX.Value + 130, _startPosY.Value + 25, 20, 15);
|
||||
g.DrawEllipse(new Pen(Color.Black), _startPosX.Value + 180, _startPosY.Value + 25, 20, 15);
|
||||
g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 130, _startPosY.Value + 25, 20, 15);
|
||||
g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 180, _startPosY.Value + 25, 20, 15);
|
||||
g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 130, _startPosY.Value + 25, 20, 15);
|
||||
g.FillEllipse(new SolidBrush(Color.Black), _startPosX.Value + 180, _startPosY.Value + 25, 20, 15);
|
||||
}
|
||||
//стекла
|
||||
if (accordionBus.BodyGlass)
|
||||
{
|
||||
Brush brBlue = new SolidBrush(accordionBus.AdditionalColor);
|
||||
g.FillEllipse(brBlue, _startPosX.Value + 10, _startPosY.Value + 5, 10, 15);
|
||||
g.FillEllipse(brBlue, _startPosX.Value + 65, _startPosY.Value + 5, 10, 15);
|
||||
Pen penGlass = new Pen(Color.Black);
|
||||
g.DrawEllipse(penGlass, _startPosX.Value + 10, _startPosY.Value + 5, 10, 15);
|
||||
g.DrawEllipse(penGlass, _startPosX.Value + 65, _startPosY.Value + 5, 10, 15);
|
||||
if (accordionBus.BodyGarmoshka)
|
||||
{
|
||||
g.FillEllipse(brBlue, _startPosX.Value + 135, _startPosY.Value + 5, 10, 15);
|
||||
g.FillEllipse(brBlue, _startPosX.Value + 185, _startPosY.Value + 5, 10, 15);
|
||||
g.DrawEllipse(penGlass, _startPosX.Value + 135, _startPosY.Value + 5, 10, 15);
|
||||
g.DrawEllipse(penGlass, _startPosX.Value + 185, _startPosY.Value + 5, 10, 15);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
201
AccordionBus/AccordionBus/Drawnings/DrawningBus.cs
Normal file
201
AccordionBus/AccordionBus/Drawnings/DrawningBus.cs
Normal file
@ -0,0 +1,201 @@
|
||||
using AccordionBus.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Drawnings;
|
||||
|
||||
public class DrawningBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс-сущность
|
||||
/// </summary>
|
||||
public EntityBus? EntityBus { get; protected set; }
|
||||
/// <summary>
|
||||
/// Ширина окна
|
||||
/// </summary>
|
||||
private int? _pictureWidth;
|
||||
/// <summary>
|
||||
/// Высота окна
|
||||
/// </summary>
|
||||
private int? _pictureHeight;
|
||||
/// <summary>
|
||||
/// Левая координата прорисовки автомобиля
|
||||
/// </summary>
|
||||
protected int? _startPosX;
|
||||
/// <summary>
|
||||
/// Верхняя кооридната прорисовки автомобиля
|
||||
/// </summary>
|
||||
protected int? _startPosY;
|
||||
/// <summary>
|
||||
/// Ширина прорисовки автомобиля
|
||||
/// </summary>
|
||||
private readonly int _drawningBusWidth = 180;
|
||||
/// <summary>
|
||||
/// Высота прорисовки автомобиля
|
||||
/// </summary>
|
||||
private readonly int _drawningBusHeight = 40;
|
||||
/// <summary>
|
||||
/// Координата X
|
||||
/// </summary>
|
||||
public int? GetPosX=>_startPosX;
|
||||
/// <summary>
|
||||
/// Координата Y
|
||||
/// </summary>
|
||||
public int? GetPosY => _startPosY;
|
||||
/// <summary>
|
||||
/// Ширина объекта
|
||||
/// </summary>
|
||||
public int GetWidth => _drawningBusWidth;
|
||||
/// <summary>
|
||||
/// Высота объекта
|
||||
/// </summary>
|
||||
public int GetHeight => _drawningBusHeight;
|
||||
|
||||
public DrawningBus(EntityBus bus)
|
||||
{
|
||||
EntityBus = bus;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пустой конструктор
|
||||
/// </summary>
|
||||
private DrawningBus()
|
||||
{
|
||||
_pictureWidth = null;
|
||||
_pictureHeight = null;
|
||||
_startPosX = null;
|
||||
_startPosY = null;
|
||||
}
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
public DrawningBus(int speed, double weight, Color bodyColor):this()
|
||||
{
|
||||
EntityBus = new EntityBus(speed, weight, bodyColor);
|
||||
}
|
||||
/// <summary>
|
||||
/// Конструктор для наследования
|
||||
/// </summary>
|
||||
/// <param name="drawningBusWidth">ширина автобуса</param>
|
||||
/// <param name="drawningBusHeight">высота автобуса</param>
|
||||
protected DrawningBus(int drawningBusWidth, int drawningBusHeight):this()
|
||||
{
|
||||
_drawningBusWidth = drawningBusWidth;
|
||||
_drawningBusHeight = drawningBusHeight;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Установка границ поля
|
||||
/// </summary>
|
||||
/// <param name="width">Ширина поля</param>
|
||||
/// <param name="height">Высота поля</param>
|
||||
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя
|
||||
public bool SetPictureSize(int width, int height)
|
||||
{
|
||||
if (_drawningBusWidth <= width && _drawningBusHeight <= height)
|
||||
{
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = height;
|
||||
if (_startPosX.HasValue && _startPosY.HasValue)
|
||||
{
|
||||
if (_startPosX + _drawningBusWidth > _pictureWidth)
|
||||
{
|
||||
_startPosX = _pictureWidth - _drawningBusWidth;
|
||||
}
|
||||
|
||||
if (_startPosY + _drawningBusHeight > _pictureHeight)
|
||||
{
|
||||
_startPosY = _pictureHeight - _drawningBusHeight;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/// <summary>
|
||||
/// Установка позиции
|
||||
/// </summary>
|
||||
/// <param name="x">Координата X</param>
|
||||
/// <param name="y">Координата Y</param>
|
||||
public void SetPosition(int x, int y)
|
||||
{
|
||||
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (x < 0) x = 0;
|
||||
else if (x + _drawningBusWidth > _pictureWidth) x = _pictureWidth.Value - _drawningBusWidth;
|
||||
|
||||
if (y < 0) y = 0;
|
||||
else if (y + _drawningBusHeight > _pictureHeight) y = _pictureHeight.Value - _drawningBusHeight;
|
||||
_startPosX = x;
|
||||
_startPosY = y;
|
||||
}
|
||||
public bool MoveTransport(DirectionType direction)
|
||||
{
|
||||
if (EntityBus == null || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||
return false;
|
||||
switch (direction)
|
||||
{
|
||||
//влево
|
||||
case DirectionType.Left:
|
||||
if (_startPosX.Value - EntityBus.Step > 0)
|
||||
_startPosX -= (int)EntityBus.Step;
|
||||
return true;
|
||||
//вверх
|
||||
case DirectionType.Up:
|
||||
if (_startPosY.Value - EntityBus.Step > 0)
|
||||
_startPosY -= (int)EntityBus.Step;
|
||||
return true;
|
||||
// вправо
|
||||
case DirectionType.Right:
|
||||
if (_startPosX.Value + _drawningBusWidth + EntityBus.Step < _pictureWidth)
|
||||
_startPosX += (int)EntityBus.Step;
|
||||
return true;
|
||||
//вниз
|
||||
case DirectionType.Down:
|
||||
if (_startPosY.Value + _drawningBusHeight + EntityBus.Step < _pictureHeight)
|
||||
_startPosY += (int)EntityBus.Step;
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Прорисовка объекта
|
||||
/// </summary>
|
||||
/// <param name="g"></param>
|
||||
public virtual void DrawTransport(Graphics g)
|
||||
{
|
||||
if (EntityBus == null || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||
return;
|
||||
//кузов
|
||||
Brush br = new SolidBrush(EntityBus.BodyColor);
|
||||
g.FillRectangle(br, _startPosX.Value, _startPosY.Value, 90, 30);
|
||||
g.DrawRectangle(new Pen(Color.Black), _startPosX.Value, _startPosY.Value, 90, 30);
|
||||
//диски
|
||||
Brush brWhite = new SolidBrush(Color.White);
|
||||
g.FillEllipse(brWhite, _startPosX.Value, _startPosY.Value + 25, 20, 15);
|
||||
g.FillEllipse(brWhite, _startPosX.Value + 70, _startPosY.Value + 25, 20, 15);
|
||||
Brush brWheel = new SolidBrush(Color.Black);
|
||||
g.FillEllipse(brWheel, _startPosX.Value, _startPosY.Value + 25, 20, 15);
|
||||
g.FillEllipse(brWheel, _startPosX.Value + 70, _startPosY.Value + 25, 20, 15);
|
||||
|
||||
Pen penWheel = new Pen(Color.Black);
|
||||
g.DrawEllipse(penWheel, _startPosX.Value, _startPosY.Value + 25, 20, 15);
|
||||
g.DrawEllipse(penWheel, _startPosX.Value + 70, _startPosY.Value + 25, 20, 15);
|
||||
|
||||
|
||||
//двери
|
||||
Brush brDoor = new SolidBrush(Color.Black);
|
||||
g.FillRectangle(brDoor, _startPosX.Value + 55, _startPosY.Value + 10, 5, 20);
|
||||
g.FillRectangle(brDoor, _startPosX.Value + 25, _startPosY.Value + 10, 5, 20);
|
||||
}
|
||||
}
|
50
AccordionBus/AccordionBus/Drawnings/ExtentionDrawningCar.cs
Normal file
50
AccordionBus/AccordionBus/Drawnings/ExtentionDrawningCar.cs
Normal file
@ -0,0 +1,50 @@
|
||||
using AccordionBus.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Drawnings;
|
||||
|
||||
public static class ExtentionDrawningBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Разделитель для записи информации по объекту в файл
|
||||
/// </summary>
|
||||
private static readonly string _separatorForObject = ":";
|
||||
/// <summary>
|
||||
/// Создание объекта из строки
|
||||
/// </summary>
|
||||
/// <param name="info">Строка с данными для создания объекта</param>
|
||||
/// <returns>Объект</returns>
|
||||
public static DrawningBus? CreateDrawningBus(this string info)
|
||||
{
|
||||
string[] strs = info.Split(_separatorForObject);
|
||||
EntityBus? bus = EntityAccordionBus.CreateEntityAccordionBus(strs);
|
||||
if (bus != null && bus is EntityAccordionBus bus1)
|
||||
{
|
||||
return new DrawningAccordionBus(bus1);
|
||||
}
|
||||
bus = EntityBus.CreateEntityBus(strs);
|
||||
if (bus != null)
|
||||
{
|
||||
return new DrawningBus(bus);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/// <summary>
|
||||
/// Получение данных для сохранения в файл
|
||||
/// </summary>
|
||||
/// <param name="drawningBus">Сохраняемый объект</param>
|
||||
/// <returns>Строка с данными по объекту</returns>
|
||||
public static string GetDataForSave(this DrawningBus drawningBus)
|
||||
{
|
||||
string[]? array = drawningBus?.EntityBus?.GetStringRepresentation();
|
||||
if (array == null)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
return string.Join(_separatorForObject, array);
|
||||
}
|
||||
}
|
60
AccordionBus/AccordionBus/Entities/EntityAccordionBus.cs
Normal file
60
AccordionBus/AccordionBus/Entities/EntityAccordionBus.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Entities;
|
||||
public class EntityAccordionBus: EntityBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Дополнительный цвет (для опциональных элементов)
|
||||
/// </summary>
|
||||
public Color AdditionalColor { get; private set; }
|
||||
/// <summary>
|
||||
/// Признак (опция) наличия стёкол
|
||||
/// </summary>
|
||||
public bool BodyGlass { get; private set; }
|
||||
/// <summary>
|
||||
/// признак наличия гармошки
|
||||
/// </summary>
|
||||
public bool BodyGarmoshka { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Инициализация полей объекта-класса автобуса с гармошкой
|
||||
/// </summary>
|
||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||
/// <param name="glass">наличие стекла</param>
|
||||
/// <param name="garmoshka">наличие гармошки</param>
|
||||
|
||||
public EntityAccordionBus(int speed, double weigth, Color bodyColor, Color additionalColor, bool glass, bool garmoshka) : base (speed,weigth,bodyColor)
|
||||
{
|
||||
AdditionalColor = additionalColor;
|
||||
BodyGlass = glass;
|
||||
BodyGarmoshka = garmoshka;
|
||||
}
|
||||
/// <summary>
|
||||
/// Перегрузка конструктора для создания базового автобуса в коллекцию
|
||||
/// </summary>
|
||||
/// <param name="speed">скрость</param>
|
||||
/// <param name="weigth">вес</param>
|
||||
/// <param name="bodyColor">основной цвет</param>
|
||||
public EntityAccordionBus(int speed, double weigth, Color bodyColor) : base(speed, weigth, bodyColor){}
|
||||
|
||||
public void SetAdditional(Color color)
|
||||
{
|
||||
AdditionalColor = color;
|
||||
}
|
||||
public override string[] GetStringRepresentation()
|
||||
{
|
||||
return new[] { nameof(EntityAccordionBus), Speed.ToString(), Weight.ToString(), BodyColor.Name,
|
||||
AdditionalColor.Name, BodyGlass.ToString(), BodyGarmoshka.ToString() };
|
||||
}
|
||||
public static EntityAccordionBus? CreateEntityAccordionBus(string[] strs)
|
||||
{
|
||||
if (strs.Length != 7 || strs[0] != nameof(EntityAccordionBus)) { return null; }
|
||||
|
||||
return new EntityAccordionBus(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]),
|
||||
Color.FromName(strs[3]), Color.FromName(strs[4]), Convert.ToBoolean(strs[5]), Convert.ToBoolean(strs[6]));
|
||||
}
|
||||
}
|
67
AccordionBus/AccordionBus/Entities/EntityBus.cs
Normal file
67
AccordionBus/AccordionBus/Entities/EntityBus.cs
Normal file
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Entities;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Класс-сущность автобус
|
||||
/// </summary>
|
||||
|
||||
public class EntityBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Скорость
|
||||
/// </summary>
|
||||
public int Speed { get; private set; }
|
||||
/// <summary>
|
||||
/// Вес
|
||||
/// </summary>
|
||||
public double Weight { get; private set; }
|
||||
/// <summary>
|
||||
/// Основной цвет
|
||||
/// </summary>
|
||||
public Color BodyColor { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Шаг перемещения автомобиля
|
||||
/// </summary>
|
||||
public double Step => Speed * 100 / Weight;
|
||||
/// <summary>
|
||||
/// Конструктор сущности
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес автомобиля</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
public EntityBus(int speed, double weight, Color bodyColor)
|
||||
{
|
||||
Speed = speed;
|
||||
Weight = weight;
|
||||
BodyColor = bodyColor;
|
||||
}
|
||||
public void SetBody(Color color)
|
||||
{
|
||||
BodyColor = color;
|
||||
}
|
||||
|
||||
public virtual string[] GetStringRepresentation()
|
||||
{
|
||||
return new[] { nameof(EntityBus), Speed.ToString(), Weight.ToString(), BodyColor.Name };
|
||||
}
|
||||
/// <summary>
|
||||
/// Создание объекта из массива строк
|
||||
/// </summary>
|
||||
/// <param name="strs"></param>
|
||||
/// <returns></returns>
|
||||
public static EntityBus? CreateEntityBus(string[] strs)
|
||||
{
|
||||
if (strs.Length != 4 || strs[0] != nameof(EntityBus))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new EntityBus(Convert.ToInt32(strs[1]), Convert.ToDouble(strs[2]), Color.FromName(strs[3]));
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Exceptions;
|
||||
|
||||
public class CollectionOverflowException : ApplicationException
|
||||
{
|
||||
public CollectionOverflowException(int count) : base("В коллекции превышено допустимое количество: " + count) { }
|
||||
public CollectionOverflowException() : base() { }
|
||||
public CollectionOverflowException(string message) : base(message) { }
|
||||
public CollectionOverflowException(string message, Exception exception) :
|
||||
base(message, exception)
|
||||
{ }
|
||||
protected CollectionOverflowException(SerializationInfo info,
|
||||
StreamingContext contex) : base(info, contex)
|
||||
{
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Exceptions;
|
||||
|
||||
public class ObjectNotFoundException : ApplicationException
|
||||
{
|
||||
public ObjectNotFoundException(int i) : base("Не найден объект по позиции " + i)
|
||||
{ }
|
||||
public ObjectNotFoundException() : base() { }
|
||||
public ObjectNotFoundException(string message) : base(message) { }
|
||||
public ObjectNotFoundException(string message, Exception exception) : base(message, exception) { }
|
||||
protected ObjectNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.Exceptions;
|
||||
|
||||
internal class PositionOutOfCollectionException : ApplicationException
|
||||
{
|
||||
public PositionOutOfCollectionException(int i) : base("Выход за границы коллекции.Позиция " + i) { }
|
||||
public PositionOutOfCollectionException() : base() { }
|
||||
public PositionOutOfCollectionException(string message) : base(message) { }
|
||||
public PositionOutOfCollectionException(string message, Exception exception) : base(message, exception) { }
|
||||
protected PositionOutOfCollectionException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
|
||||
|
||||
}
|
39
AccordionBus/AccordionBus/Form1.Designer.cs
generated
39
AccordionBus/AccordionBus/Form1.Designer.cs
generated
@ -1,39 +0,0 @@
|
||||
namespace AccordionBus
|
||||
{
|
||||
partial class Form1
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||
this.Text = "Form1";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
namespace AccordionBus
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
150
AccordionBus/AccordionBus/FormAccordionBus.Designer.cs
generated
Normal file
150
AccordionBus/AccordionBus/FormAccordionBus.Designer.cs
generated
Normal file
@ -0,0 +1,150 @@
|
||||
namespace AccordionBus
|
||||
{
|
||||
partial class FormAccordionBus
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
#region Windows Form Designer generated code
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAccordionBus));
|
||||
pictureBoxAccordionBus = new PictureBox();
|
||||
buttonUp = new Button();
|
||||
buttonLeft = new Button();
|
||||
buttonDown = new Button();
|
||||
buttonRight = new Button();
|
||||
comboBoxStrategy = new ComboBox();
|
||||
buttonStrategyStep = new Button();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxAccordionBus).BeginInit();
|
||||
SuspendLayout();
|
||||
//
|
||||
// pictureBoxAccordionBus
|
||||
//
|
||||
pictureBoxAccordionBus.Dock = DockStyle.Fill;
|
||||
pictureBoxAccordionBus.Location = new Point(0, 0);
|
||||
pictureBoxAccordionBus.Name = "pictureBoxAccordionBus";
|
||||
pictureBoxAccordionBus.Size = new Size(714, 390);
|
||||
pictureBoxAccordionBus.SizeMode = PictureBoxSizeMode.AutoSize;
|
||||
pictureBoxAccordionBus.TabIndex = 5;
|
||||
pictureBoxAccordionBus.TabStop = false;
|
||||
//
|
||||
// buttonUp
|
||||
//
|
||||
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
|
||||
buttonUp.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonUp.Location = new Point(626, 308);
|
||||
buttonUp.Name = "buttonUp";
|
||||
buttonUp.Size = new Size(35, 35);
|
||||
buttonUp.TabIndex = 7;
|
||||
buttonUp.Text = " ";
|
||||
buttonUp.UseVisualStyleBackColor = true;
|
||||
buttonUp.Click += ButtonMove_Click;
|
||||
//
|
||||
// buttonLeft
|
||||
//
|
||||
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
|
||||
buttonLeft.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonLeft.Location = new Point(585, 349);
|
||||
buttonLeft.Name = "buttonLeft";
|
||||
buttonLeft.Size = new Size(35, 35);
|
||||
buttonLeft.TabIndex = 8;
|
||||
buttonLeft.Text = " ";
|
||||
buttonLeft.UseVisualStyleBackColor = true;
|
||||
buttonLeft.Click += ButtonMove_Click;
|
||||
//
|
||||
// buttonDown
|
||||
//
|
||||
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
|
||||
buttonDown.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonDown.Location = new Point(626, 349);
|
||||
buttonDown.Name = "buttonDown";
|
||||
buttonDown.Size = new Size(35, 35);
|
||||
buttonDown.TabIndex = 9;
|
||||
buttonDown.Text = " ";
|
||||
buttonDown.UseVisualStyleBackColor = true;
|
||||
buttonDown.Click += ButtonMove_Click;
|
||||
//
|
||||
// buttonRight
|
||||
//
|
||||
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
|
||||
buttonRight.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
buttonRight.Location = new Point(667, 349);
|
||||
buttonRight.Name = "buttonRight";
|
||||
buttonRight.Size = new Size(35, 35);
|
||||
buttonRight.TabIndex = 10;
|
||||
buttonRight.Text = " ";
|
||||
buttonRight.UseVisualStyleBackColor = true;
|
||||
buttonRight.Click += ButtonMove_Click;
|
||||
//
|
||||
// comboBoxStrategy
|
||||
//
|
||||
comboBoxStrategy.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
comboBoxStrategy.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoxStrategy.FormattingEnabled = true;
|
||||
comboBoxStrategy.Items.AddRange(new object[] { "К центру", "К краю" });
|
||||
comboBoxStrategy.Location = new Point(581, 12);
|
||||
comboBoxStrategy.Name = "comboBoxStrategy";
|
||||
comboBoxStrategy.Size = new Size(121, 23);
|
||||
comboBoxStrategy.TabIndex = 12;
|
||||
//
|
||||
// buttonStrategyStep
|
||||
//
|
||||
buttonStrategyStep.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
buttonStrategyStep.Location = new Point(627, 41);
|
||||
buttonStrategyStep.Name = "buttonStrategyStep";
|
||||
buttonStrategyStep.Size = new Size(75, 23);
|
||||
buttonStrategyStep.TabIndex = 13;
|
||||
buttonStrategyStep.Text = "Шаг";
|
||||
buttonStrategyStep.UseVisualStyleBackColor = true;
|
||||
buttonStrategyStep.Click += ButtonStrategyStep_Click;
|
||||
//
|
||||
// FormAccordionBus
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(714, 390);
|
||||
Controls.Add(buttonStrategyStep);
|
||||
Controls.Add(comboBoxStrategy);
|
||||
Controls.Add(buttonRight);
|
||||
Controls.Add(buttonDown);
|
||||
Controls.Add(buttonLeft);
|
||||
Controls.Add(buttonUp);
|
||||
Controls.Add(pictureBoxAccordionBus);
|
||||
Name = "FormAccordionBus";
|
||||
Text = "Автобус с гармошкой";
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxAccordionBus).EndInit();
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
#endregion
|
||||
private PictureBox pictureBoxAccordionBus;
|
||||
private Button buttonUp;
|
||||
private Button buttonLeft;
|
||||
private Button buttonDown;
|
||||
private Button buttonRight;
|
||||
private ComboBox comboBoxStrategy;
|
||||
private Button buttonStrategyStep;
|
||||
}
|
||||
}
|
147
AccordionBus/AccordionBus/FormAccordionBus.cs
Normal file
147
AccordionBus/AccordionBus/FormAccordionBus.cs
Normal file
@ -0,0 +1,147 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using AccordionBus.Drawnings;
|
||||
using AccordionBus.MovementStrategy;
|
||||
|
||||
namespace AccordionBus;
|
||||
public partial class FormAccordionBus : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Поле-объект для прорисовки объекта
|
||||
/// </summary>
|
||||
|
||||
private DrawningBus? _drawningBus;
|
||||
/// <summary>
|
||||
/// Стратегия перемещения
|
||||
/// </summary>
|
||||
private AbstractStrategy? _strategy;
|
||||
/// <summary>
|
||||
/// Получение объекта
|
||||
/// </summary>
|
||||
public DrawningBus SetBus
|
||||
{
|
||||
set
|
||||
{
|
||||
_drawningBus = value;
|
||||
_drawningBus.SetPictureSize(pictureBoxAccordionBus.Width, pictureBoxAccordionBus.Height);
|
||||
comboBoxStrategy.Enabled = true;
|
||||
_strategy = null;
|
||||
Draw();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Инициализация формы
|
||||
/// </summary>
|
||||
|
||||
|
||||
public FormAccordionBus()
|
||||
{
|
||||
InitializeComponent();
|
||||
_strategy = null;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Метод прорисовки машины
|
||||
/// </summary>
|
||||
|
||||
private void Draw()
|
||||
{
|
||||
if (_drawningBus == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Bitmap bmp = new(pictureBoxAccordionBus.Width, pictureBoxAccordionBus.Height);
|
||||
Graphics gr = Graphics.FromImage(bmp);
|
||||
_drawningBus.DrawTransport(gr);
|
||||
pictureBoxAccordionBus.Image = bmp;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Перемещение объекта по форме (нажатие кнопок навигации)
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
|
||||
private void ButtonMove_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_drawningBus == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string name = ((Button)sender)?.Name ?? string.Empty;
|
||||
bool result = false;
|
||||
switch (name)
|
||||
{
|
||||
case "buttonUp":
|
||||
result = _drawningBus.MoveTransport(DirectionType.Up);
|
||||
break;
|
||||
case "buttonDown":
|
||||
result = _drawningBus.MoveTransport(DirectionType.Down);
|
||||
break;
|
||||
case "buttonLeft":
|
||||
result = _drawningBus.MoveTransport(DirectionType.Left);
|
||||
break;
|
||||
case "buttonRight":
|
||||
result = _drawningBus.MoveTransport(DirectionType.Right);
|
||||
break;
|
||||
}
|
||||
|
||||
if (result)
|
||||
{
|
||||
Draw();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Обработка нажатия кнопки "Шаг"
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonStrategyStep_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_drawningBus == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (comboBoxStrategy.Enabled)
|
||||
{
|
||||
_strategy = comboBoxStrategy.SelectedIndex switch
|
||||
{
|
||||
0 => new MoveToCenter(),
|
||||
1 => new MoveToBorder(),
|
||||
_ => null,
|
||||
};
|
||||
if (_strategy == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_strategy.SetData(new MoveableBus(_drawningBus), pictureBoxAccordionBus.Width, pictureBoxAccordionBus.Height);
|
||||
}
|
||||
|
||||
if (_strategy == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
comboBoxStrategy.Enabled = false;
|
||||
_strategy.MakeStep();
|
||||
Draw();
|
||||
|
||||
if (_strategy.GetStatus() == StrategyStatus.Finish)
|
||||
{
|
||||
comboBoxStrategy.Enabled = true;
|
||||
_strategy = null;
|
||||
}
|
||||
}
|
||||
}
|
565
AccordionBus/AccordionBus/FormAccordionBus.resx
Normal file
565
AccordionBus/AccordionBus/FormAccordionBus.resx
Normal file
@ -0,0 +1,565 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="buttonUp.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
AElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="buttonLeft.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<data name="buttonDown.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<data name="buttonRight.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
QmCC
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
345
AccordionBus/AccordionBus/FormBusCollection.Designer.cs
generated
Normal file
345
AccordionBus/AccordionBus/FormBusCollection.Designer.cs
generated
Normal file
@ -0,0 +1,345 @@
|
||||
namespace AccordionBus
|
||||
{
|
||||
partial class FormBusCollection
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
groupBoxTools = new GroupBox();
|
||||
panelCompanyTools = new Panel();
|
||||
buttonAddBus = new Button();
|
||||
maskedTextBoxPosition = new MaskedTextBox();
|
||||
buttonRefresh = new Button();
|
||||
buttonDelBus = new Button();
|
||||
buttonGoToCheck = new Button();
|
||||
buttonCreateCompany = new Button();
|
||||
panelStorage = new Panel();
|
||||
buttonCollectionDel = new Button();
|
||||
listBoxCollection = new ListBox();
|
||||
buttonCollectionAdd = new Button();
|
||||
radioButtonList = new RadioButton();
|
||||
radioButtonMassive = new RadioButton();
|
||||
textBoxCollectionName = new TextBox();
|
||||
labelCollectionName = new Label();
|
||||
comboBoxSelectorCompany = new ComboBox();
|
||||
pictureBox = new PictureBox();
|
||||
colorDialog1 = new ColorDialog();
|
||||
menuStrip = new MenuStrip();
|
||||
файлToolStripMenuItem = new ToolStripMenuItem();
|
||||
saveToolStripMenuItem = new ToolStripMenuItem();
|
||||
loadToolStripMenuItem = new ToolStripMenuItem();
|
||||
saveFileDialog = new SaveFileDialog();
|
||||
loadFileDialog = new OpenFileDialog();
|
||||
groupBoxTools.SuspendLayout();
|
||||
panelCompanyTools.SuspendLayout();
|
||||
panelStorage.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox).BeginInit();
|
||||
menuStrip.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// groupBoxTools
|
||||
//
|
||||
groupBoxTools.Controls.Add(panelCompanyTools);
|
||||
groupBoxTools.Controls.Add(buttonCreateCompany);
|
||||
groupBoxTools.Controls.Add(panelStorage);
|
||||
groupBoxTools.Controls.Add(comboBoxSelectorCompany);
|
||||
groupBoxTools.Dock = DockStyle.Right;
|
||||
groupBoxTools.Location = new Point(906, 24);
|
||||
groupBoxTools.Name = "groupBoxTools";
|
||||
groupBoxTools.Size = new Size(231, 448);
|
||||
groupBoxTools.TabIndex = 0;
|
||||
groupBoxTools.TabStop = false;
|
||||
groupBoxTools.Text = "Инструменты";
|
||||
//
|
||||
// panelCompanyTools
|
||||
//
|
||||
panelCompanyTools.Controls.Add(buttonAddBus);
|
||||
panelCompanyTools.Controls.Add(maskedTextBoxPosition);
|
||||
panelCompanyTools.Controls.Add(buttonRefresh);
|
||||
panelCompanyTools.Controls.Add(buttonDelBus);
|
||||
panelCompanyTools.Controls.Add(buttonGoToCheck);
|
||||
panelCompanyTools.Dock = DockStyle.Bottom;
|
||||
panelCompanyTools.Enabled = false;
|
||||
panelCompanyTools.Location = new Point(3, 290);
|
||||
panelCompanyTools.Name = "panelCompanyTools";
|
||||
panelCompanyTools.Size = new Size(225, 155);
|
||||
panelCompanyTools.TabIndex = 10;
|
||||
//
|
||||
// buttonAddBus
|
||||
//
|
||||
buttonAddBus.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonAddBus.Location = new Point(4, 3);
|
||||
buttonAddBus.Name = "buttonAddBus";
|
||||
buttonAddBus.Size = new Size(209, 29);
|
||||
buttonAddBus.TabIndex = 1;
|
||||
buttonAddBus.Text = "Добавление автобуса";
|
||||
buttonAddBus.UseVisualStyleBackColor = true;
|
||||
buttonAddBus.Click += ButtonAddBus_Click;
|
||||
//
|
||||
// maskedTextBoxPosition
|
||||
//
|
||||
maskedTextBoxPosition.Location = new Point(4, 38);
|
||||
maskedTextBoxPosition.Mask = "00";
|
||||
maskedTextBoxPosition.Name = "maskedTextBoxPosition";
|
||||
maskedTextBoxPosition.Size = new Size(212, 23);
|
||||
maskedTextBoxPosition.TabIndex = 4;
|
||||
maskedTextBoxPosition.ValidatingType = typeof(int);
|
||||
//
|
||||
// buttonRefresh
|
||||
//
|
||||
buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonRefresh.Location = new Point(4, 125);
|
||||
buttonRefresh.Name = "buttonRefresh";
|
||||
buttonRefresh.Size = new Size(209, 22);
|
||||
buttonRefresh.TabIndex = 7;
|
||||
buttonRefresh.Text = "Обновить";
|
||||
buttonRefresh.UseVisualStyleBackColor = true;
|
||||
buttonRefresh.Click += ButtonRefresh_Click;
|
||||
//
|
||||
// buttonDelBus
|
||||
//
|
||||
buttonDelBus.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonDelBus.Location = new Point(4, 67);
|
||||
buttonDelBus.Name = "buttonDelBus";
|
||||
buttonDelBus.Size = new Size(209, 23);
|
||||
buttonDelBus.TabIndex = 5;
|
||||
buttonDelBus.Text = "Удалить автомобиль";
|
||||
buttonDelBus.UseVisualStyleBackColor = true;
|
||||
buttonDelBus.Click += ButtonRemoveBus_Click;
|
||||
//
|
||||
// buttonGoToCheck
|
||||
//
|
||||
buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonGoToCheck.Location = new Point(4, 96);
|
||||
buttonGoToCheck.Name = "buttonGoToCheck";
|
||||
buttonGoToCheck.Size = new Size(209, 23);
|
||||
buttonGoToCheck.TabIndex = 6;
|
||||
buttonGoToCheck.Text = "Передать на тесты";
|
||||
buttonGoToCheck.UseVisualStyleBackColor = true;
|
||||
buttonGoToCheck.Click += ButtonGoToCheck_Click;
|
||||
//
|
||||
// buttonCreateCompany
|
||||
//
|
||||
buttonCreateCompany.Location = new Point(6, 264);
|
||||
buttonCreateCompany.Name = "buttonCreateCompany";
|
||||
buttonCreateCompany.Size = new Size(213, 23);
|
||||
buttonCreateCompany.TabIndex = 9;
|
||||
buttonCreateCompany.Text = "Создать компанию";
|
||||
buttonCreateCompany.UseVisualStyleBackColor = true;
|
||||
buttonCreateCompany.Click += buttonCreateCompany_Click;
|
||||
//
|
||||
// panelStorage
|
||||
//
|
||||
panelStorage.Controls.Add(buttonCollectionDel);
|
||||
panelStorage.Controls.Add(listBoxCollection);
|
||||
panelStorage.Controls.Add(buttonCollectionAdd);
|
||||
panelStorage.Controls.Add(radioButtonList);
|
||||
panelStorage.Controls.Add(radioButtonMassive);
|
||||
panelStorage.Controls.Add(textBoxCollectionName);
|
||||
panelStorage.Controls.Add(labelCollectionName);
|
||||
panelStorage.Dock = DockStyle.Top;
|
||||
panelStorage.Location = new Point(3, 19);
|
||||
panelStorage.Name = "panelStorage";
|
||||
panelStorage.Size = new Size(225, 210);
|
||||
panelStorage.TabIndex = 8;
|
||||
//
|
||||
// buttonCollectionDel
|
||||
//
|
||||
buttonCollectionDel.Location = new Point(3, 184);
|
||||
buttonCollectionDel.Name = "buttonCollectionDel";
|
||||
buttonCollectionDel.Size = new Size(210, 23);
|
||||
buttonCollectionDel.TabIndex = 6;
|
||||
buttonCollectionDel.Text = "Удалить коллекцию";
|
||||
buttonCollectionDel.UseVisualStyleBackColor = true;
|
||||
buttonCollectionDel.Click += buttonCollectionDel_Click;
|
||||
//
|
||||
// listBoxCollection
|
||||
//
|
||||
listBoxCollection.FormattingEnabled = true;
|
||||
listBoxCollection.ItemHeight = 15;
|
||||
listBoxCollection.Location = new Point(3, 101);
|
||||
listBoxCollection.Name = "listBoxCollection";
|
||||
listBoxCollection.Size = new Size(213, 79);
|
||||
listBoxCollection.TabIndex = 5;
|
||||
//
|
||||
// buttonCollectionAdd
|
||||
//
|
||||
buttonCollectionAdd.Location = new Point(3, 72);
|
||||
buttonCollectionAdd.Name = "buttonCollectionAdd";
|
||||
buttonCollectionAdd.Size = new Size(213, 23);
|
||||
buttonCollectionAdd.TabIndex = 4;
|
||||
buttonCollectionAdd.Text = "Добавить коллекцию";
|
||||
buttonCollectionAdd.UseVisualStyleBackColor = true;
|
||||
buttonCollectionAdd.Click += buttonCollectionAdd_Click;
|
||||
//
|
||||
// radioButtonList
|
||||
//
|
||||
radioButtonList.AutoSize = true;
|
||||
radioButtonList.Location = new Point(150, 47);
|
||||
radioButtonList.Name = "radioButtonList";
|
||||
radioButtonList.Size = new Size(66, 19);
|
||||
radioButtonList.TabIndex = 3;
|
||||
radioButtonList.TabStop = true;
|
||||
radioButtonList.Text = "Список";
|
||||
radioButtonList.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// radioButtonMassive
|
||||
//
|
||||
radioButtonMassive.AutoSize = true;
|
||||
radioButtonMassive.Location = new Point(4, 47);
|
||||
radioButtonMassive.Name = "radioButtonMassive";
|
||||
radioButtonMassive.Size = new Size(67, 19);
|
||||
radioButtonMassive.TabIndex = 2;
|
||||
radioButtonMassive.TabStop = true;
|
||||
radioButtonMassive.Text = "Массив";
|
||||
radioButtonMassive.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// textBoxCollectionName
|
||||
//
|
||||
textBoxCollectionName.Location = new Point(3, 18);
|
||||
textBoxCollectionName.Name = "textBoxCollectionName";
|
||||
textBoxCollectionName.Size = new Size(213, 23);
|
||||
textBoxCollectionName.TabIndex = 1;
|
||||
//
|
||||
// labelCollectionName
|
||||
//
|
||||
labelCollectionName.AutoSize = true;
|
||||
labelCollectionName.Location = new Point(3, 0);
|
||||
labelCollectionName.Name = "labelCollectionName";
|
||||
labelCollectionName.Size = new Size(125, 15);
|
||||
labelCollectionName.TabIndex = 0;
|
||||
labelCollectionName.Text = "Название коллекции:";
|
||||
//
|
||||
// comboBoxSelectorCompany
|
||||
//
|
||||
comboBoxSelectorCompany.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
comboBoxSelectorCompany.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoxSelectorCompany.FormattingEnabled = true;
|
||||
comboBoxSelectorCompany.Items.AddRange(new object[] { "Автовокзал" });
|
||||
comboBoxSelectorCompany.Location = new Point(6, 235);
|
||||
comboBoxSelectorCompany.Name = "comboBoxSelectorCompany";
|
||||
comboBoxSelectorCompany.Size = new Size(213, 23);
|
||||
comboBoxSelectorCompany.TabIndex = 0;
|
||||
//
|
||||
// pictureBox
|
||||
//
|
||||
pictureBox.Dock = DockStyle.Fill;
|
||||
pictureBox.Location = new Point(0, 24);
|
||||
pictureBox.Name = "pictureBox";
|
||||
pictureBox.Size = new Size(906, 448);
|
||||
pictureBox.TabIndex = 3;
|
||||
pictureBox.TabStop = false;
|
||||
//
|
||||
// menuStrip
|
||||
//
|
||||
menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
|
||||
menuStrip.Location = new Point(0, 0);
|
||||
menuStrip.Name = "menuStrip";
|
||||
menuStrip.Size = new Size(1137, 24);
|
||||
menuStrip.TabIndex = 4;
|
||||
menuStrip.Text = "menuStrip1";
|
||||
//
|
||||
// файлToolStripMenuItem
|
||||
//
|
||||
файлToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { saveToolStripMenuItem, loadToolStripMenuItem });
|
||||
файлToolStripMenuItem.Name = "файлToolStripMenuItem";
|
||||
файлToolStripMenuItem.Size = new Size(48, 20);
|
||||
файлToolStripMenuItem.Text = "Файл";
|
||||
//
|
||||
// saveToolStripMenuItem
|
||||
//
|
||||
saveToolStripMenuItem.Name = "saveToolStripMenuItem";
|
||||
saveToolStripMenuItem.Size = new Size(141, 22);
|
||||
saveToolStripMenuItem.Text = "Сохранение";
|
||||
saveToolStripMenuItem.Click += SaveToolStripMenuItem_Click;
|
||||
//
|
||||
// loadToolStripMenuItem
|
||||
//
|
||||
loadToolStripMenuItem.Name = "loadToolStripMenuItem";
|
||||
loadToolStripMenuItem.Size = new Size(141, 22);
|
||||
loadToolStripMenuItem.Text = "Загрузка";
|
||||
loadToolStripMenuItem.Click += LoadToolStripMenuItem_Click;
|
||||
//
|
||||
// saveFileDialog
|
||||
//
|
||||
saveFileDialog.Filter = "txt file|*.txt";
|
||||
//
|
||||
// loadFileDialog
|
||||
//
|
||||
loadFileDialog.FileName = "openFileDialog1";
|
||||
//
|
||||
// FormBusCollection
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(1137, 472);
|
||||
Controls.Add(pictureBox);
|
||||
Controls.Add(groupBoxTools);
|
||||
Controls.Add(menuStrip);
|
||||
MainMenuStrip = menuStrip;
|
||||
Name = "FormBusCollection";
|
||||
Text = "Коллекция автобусов";
|
||||
groupBoxTools.ResumeLayout(false);
|
||||
panelCompanyTools.ResumeLayout(false);
|
||||
panelCompanyTools.PerformLayout();
|
||||
panelStorage.ResumeLayout(false);
|
||||
panelStorage.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox).EndInit();
|
||||
menuStrip.ResumeLayout(false);
|
||||
menuStrip.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private GroupBox groupBoxTools;
|
||||
private ComboBox comboBoxSelectorCompany;
|
||||
private Button buttonDelBus;
|
||||
private MaskedTextBox maskedTextBoxPosition;
|
||||
private Button buttonAddBus;
|
||||
private PictureBox pictureBox;
|
||||
private Button buttonRefresh;
|
||||
private Button buttonGoToCheck;
|
||||
private ColorDialog colorDialog1;
|
||||
private Panel panelStorage;
|
||||
private TextBox textBoxCollectionName;
|
||||
private Label labelCollectionName;
|
||||
private RadioButton radioButtonList;
|
||||
private RadioButton radioButtonMassive;
|
||||
private Button buttonCollectionDel;
|
||||
private ListBox listBoxCollection;
|
||||
private Button buttonCollectionAdd;
|
||||
private Button buttonCreateCompany;
|
||||
private Panel panelCompanyTools;
|
||||
private MenuStrip menuStrip;
|
||||
private ToolStripMenuItem файлToolStripMenuItem;
|
||||
private ToolStripMenuItem saveToolStripMenuItem;
|
||||
private ToolStripMenuItem loadToolStripMenuItem;
|
||||
private SaveFileDialog saveFileDialog;
|
||||
private OpenFileDialog loadFileDialog;
|
||||
}
|
||||
}
|
293
AccordionBus/AccordionBus/FormBusCollection.cs
Normal file
293
AccordionBus/AccordionBus/FormBusCollection.cs
Normal file
@ -0,0 +1,293 @@
|
||||
using AccordionBus.CollectionGenericObjects;
|
||||
using AccordionBus.Drawnings;
|
||||
using AccordionBus.Exceptions;
|
||||
using AccordionBus.MovementStrategy;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ProjectAccordionBus.CollectionGenericObjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AccordionBus;
|
||||
|
||||
public partial class FormBusCollection : Form
|
||||
{
|
||||
private readonly StorageCollection<DrawningBus> _storageCollection;
|
||||
/// <summary>
|
||||
/// Компания
|
||||
/// </summary>
|
||||
private AbstractCompany? _company = null;
|
||||
/// <summary>
|
||||
/// Логер
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public FormBusCollection(ILogger<FormBusCollection> logger)
|
||||
{
|
||||
InitializeComponent();
|
||||
_storageCollection = new();
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
private void SetBus(DrawningBus bus)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_company == null || bus == null) return;
|
||||
if (_company + bus)
|
||||
{
|
||||
MessageBox.Show("Объект добавлен");
|
||||
pictureBox.Image = _company.Show();
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
if (ex is CollectionOverflowException)
|
||||
{
|
||||
MessageBox.Show("Не удалось добавить объект");
|
||||
_logger.LogError("Ошибка: {Message}", ex.Message);
|
||||
}
|
||||
else if (ex is PositionOutOfCollectionException)
|
||||
{
|
||||
MessageBox.Show("Выход за пределы коллекции");
|
||||
_logger.LogError("Ошибка: {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Выбор компании
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void comboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
panelCompanyTools.Enabled = false;
|
||||
}
|
||||
/// <summary>
|
||||
/// Добавление обычного автомобиля
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonAddBus_Click(object sender, EventArgs e)
|
||||
{
|
||||
FormBusConfig form = new();
|
||||
form.Show();
|
||||
form.AddEvent(SetBus);
|
||||
}
|
||||
/// <summary>
|
||||
/// Удаление объекта
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonRemoveBus_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(maskedTextBoxPosition.Text) || _company == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
|
||||
try
|
||||
{
|
||||
if (_company - pos != null)
|
||||
{
|
||||
MessageBox.Show("Объект удален");
|
||||
_logger.LogInformation("Удален объект - " + pos);
|
||||
pictureBox.Image = _company.Show();
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
MessageBox.Show("Не удалось удалить объект");
|
||||
_logger.LogError("Ошибка: {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Передача объекта в другую форму
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonGoToCheck_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_company == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
DrawningBus? bus = null;
|
||||
int counter = 100;
|
||||
try
|
||||
{
|
||||
while (bus == null)
|
||||
{
|
||||
bus = _company.GetRandomObject();
|
||||
counter--;
|
||||
if (counter <= 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bus == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
FormAccordionBus form = new()
|
||||
{
|
||||
SetBus = bus
|
||||
};
|
||||
form.ShowDialog();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Перерисовка коллекции
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonRefresh_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_company == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
pictureBox.Image = _company.Show();
|
||||
}
|
||||
private void RefreshListBoxItems()
|
||||
{
|
||||
listBoxCollection.Items.Clear();
|
||||
for (int i = 0; i < _storageCollection.Keys?.Count; ++i)
|
||||
{
|
||||
string? colName = _storageCollection.Keys?[i];
|
||||
if (!string.IsNullOrEmpty(colName))
|
||||
{
|
||||
listBoxCollection.Items.Add(colName);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
private void buttonCollectionAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
|
||||
{
|
||||
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
CollectionType collectionType = CollectionType.None;
|
||||
if (radioButtonMassive.Checked)
|
||||
{
|
||||
collectionType = CollectionType.Massive;
|
||||
}
|
||||
else if (radioButtonList.Checked)
|
||||
{
|
||||
collectionType = CollectionType.List;
|
||||
}
|
||||
|
||||
_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
|
||||
RefreshListBoxItems();
|
||||
_logger.LogInformation("Коллекция добавлена " + textBoxCollectionName.Text);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
_logger.LogError("Ошибка: {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
private void buttonCollectionDel_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItems == null)
|
||||
{
|
||||
MessageBox.Show("Коллекция не выбрана");
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
|
||||
RefreshListBoxItems();
|
||||
_logger.LogInformation("Коллекция " + listBoxCollection.SelectedItem.ToString() + " удалена");
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
_logger.LogError("Ошибка: {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
private void buttonCreateCompany_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
|
||||
{
|
||||
MessageBox.Show("Коллекция не выбрана");
|
||||
return;
|
||||
}
|
||||
|
||||
ICollectionGenericObjects<DrawningBus>? collection = _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty];
|
||||
if (collection == null)
|
||||
{
|
||||
MessageBox.Show("Коллекция не проинициализирована");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (comboBoxSelectorCompany.Text)
|
||||
{
|
||||
case "Автовокзал":
|
||||
_company = new BusStation(pictureBox.Width, pictureBox.Height, collection);
|
||||
break;
|
||||
}
|
||||
|
||||
panelCompanyTools.Enabled = true;
|
||||
RefreshListBoxItems();
|
||||
}
|
||||
|
||||
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (loadFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
try
|
||||
{
|
||||
_storageCollection.LoadData(loadFileDialog.FileName);
|
||||
RefreshListBoxItems();
|
||||
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
_logger.LogInformation("Загрузка из файла: {filename}",
|
||||
loadFileDialog.FileName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Результат",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
_logger.LogError("Ошибка: {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
try
|
||||
{
|
||||
_storageCollection.SaveData(saveFileDialog.FileName);
|
||||
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
_logger.LogInformation("Сохранение в файл: {filename}", saveFileDialog.FileName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
_logger.LogError("Ошибка: {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
132
AccordionBus/AccordionBus/FormBusCollection.resx
Normal file
132
AccordionBus/AccordionBus/FormBusCollection.resx
Normal file
@ -0,0 +1,132 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="colorDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>138, 17</value>
|
||||
</metadata>
|
||||
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>247, 17</value>
|
||||
</metadata>
|
||||
<metadata name="loadFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>376, 17</value>
|
||||
</metadata>
|
||||
</root>
|
357
AccordionBus/AccordionBus/FormBusConfig.Designer.cs
generated
Normal file
357
AccordionBus/AccordionBus/FormBusConfig.Designer.cs
generated
Normal file
@ -0,0 +1,357 @@
|
||||
namespace AccordionBus
|
||||
{
|
||||
partial class FormBusConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
groupBoxConfig = new GroupBox();
|
||||
groupBoxColors = new GroupBox();
|
||||
panelPurple = new Panel();
|
||||
panelBlack = new Panel();
|
||||
panelGray = new Panel();
|
||||
panelWhite = new Panel();
|
||||
panelYellow = new Panel();
|
||||
panelBlue = new Panel();
|
||||
panelGreen = new Panel();
|
||||
panelRed = new Panel();
|
||||
checkBoxGarmoshka = new CheckBox();
|
||||
checkBoxGlass = new CheckBox();
|
||||
numericUpDownSpeed = new NumericUpDown();
|
||||
numericUpDownWeight = new NumericUpDown();
|
||||
labelWeight = new Label();
|
||||
labelSpeed = new Label();
|
||||
labelModifiedObject = new Label();
|
||||
labelSimpleObject = new Label();
|
||||
pictureBoxObject = new PictureBox();
|
||||
buttonAdd = new Button();
|
||||
buttonCancel = new Button();
|
||||
panelObject = new Panel();
|
||||
labelAdditionalColor = new Label();
|
||||
labelBaseColor = new Label();
|
||||
groupBoxConfig.SuspendLayout();
|
||||
groupBoxColors.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit();
|
||||
panelObject.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// groupBoxConfig
|
||||
//
|
||||
groupBoxConfig.Controls.Add(groupBoxColors);
|
||||
groupBoxConfig.Controls.Add(checkBoxGarmoshka);
|
||||
groupBoxConfig.Controls.Add(checkBoxGlass);
|
||||
groupBoxConfig.Controls.Add(numericUpDownSpeed);
|
||||
groupBoxConfig.Controls.Add(numericUpDownWeight);
|
||||
groupBoxConfig.Controls.Add(labelWeight);
|
||||
groupBoxConfig.Controls.Add(labelSpeed);
|
||||
groupBoxConfig.Controls.Add(labelModifiedObject);
|
||||
groupBoxConfig.Controls.Add(labelSimpleObject);
|
||||
groupBoxConfig.Dock = DockStyle.Left;
|
||||
groupBoxConfig.Location = new Point(0, 0);
|
||||
groupBoxConfig.Name = "groupBoxConfig";
|
||||
groupBoxConfig.Size = new Size(549, 341);
|
||||
groupBoxConfig.TabIndex = 0;
|
||||
groupBoxConfig.TabStop = false;
|
||||
groupBoxConfig.Text = "Параметры";
|
||||
//
|
||||
// groupBoxColors
|
||||
//
|
||||
groupBoxColors.Controls.Add(panelPurple);
|
||||
groupBoxColors.Controls.Add(panelBlack);
|
||||
groupBoxColors.Controls.Add(panelGray);
|
||||
groupBoxColors.Controls.Add(panelWhite);
|
||||
groupBoxColors.Controls.Add(panelYellow);
|
||||
groupBoxColors.Controls.Add(panelBlue);
|
||||
groupBoxColors.Controls.Add(panelGreen);
|
||||
groupBoxColors.Controls.Add(panelRed);
|
||||
groupBoxColors.Location = new Point(370, 12);
|
||||
groupBoxColors.Name = "groupBoxColors";
|
||||
groupBoxColors.Size = new Size(140, 84);
|
||||
groupBoxColors.TabIndex = 1;
|
||||
groupBoxColors.TabStop = false;
|
||||
groupBoxColors.Text = "Цвета";
|
||||
//
|
||||
// panelPurple
|
||||
//
|
||||
panelPurple.BackColor = Color.Purple;
|
||||
panelPurple.Location = new Point(105, 56);
|
||||
panelPurple.Name = "panelPurple";
|
||||
panelPurple.Size = new Size(27, 25);
|
||||
panelPurple.TabIndex = 1;
|
||||
//
|
||||
// panelBlack
|
||||
//
|
||||
panelBlack.BackColor = Color.Black;
|
||||
panelBlack.Location = new Point(73, 56);
|
||||
panelBlack.Name = "panelBlack";
|
||||
panelBlack.Size = new Size(27, 25);
|
||||
panelBlack.TabIndex = 1;
|
||||
//
|
||||
// panelGray
|
||||
//
|
||||
panelGray.BackColor = Color.Gray;
|
||||
panelGray.Location = new Point(39, 56);
|
||||
panelGray.Name = "panelGray";
|
||||
panelGray.Size = new Size(27, 25);
|
||||
panelGray.TabIndex = 1;
|
||||
//
|
||||
// panelWhite
|
||||
//
|
||||
panelWhite.BackColor = Color.White;
|
||||
panelWhite.Location = new Point(6, 56);
|
||||
panelWhite.Name = "panelWhite";
|
||||
panelWhite.Size = new Size(27, 25);
|
||||
panelWhite.TabIndex = 1;
|
||||
//
|
||||
// panelYellow
|
||||
//
|
||||
panelYellow.BackColor = Color.Yellow;
|
||||
panelYellow.Location = new Point(105, 22);
|
||||
panelYellow.Name = "panelYellow";
|
||||
panelYellow.Size = new Size(27, 25);
|
||||
panelYellow.TabIndex = 1;
|
||||
//
|
||||
// panelBlue
|
||||
//
|
||||
panelBlue.BackColor = Color.Blue;
|
||||
panelBlue.Location = new Point(72, 22);
|
||||
panelBlue.Name = "panelBlue";
|
||||
panelBlue.Size = new Size(27, 25);
|
||||
panelBlue.TabIndex = 1;
|
||||
//
|
||||
// panelGreen
|
||||
//
|
||||
panelGreen.BackColor = Color.Green;
|
||||
panelGreen.Location = new Point(39, 22);
|
||||
panelGreen.Name = "panelGreen";
|
||||
panelGreen.Size = new Size(27, 25);
|
||||
panelGreen.TabIndex = 1;
|
||||
//
|
||||
// panelRed
|
||||
//
|
||||
panelRed.BackColor = Color.Red;
|
||||
panelRed.Location = new Point(6, 22);
|
||||
panelRed.Name = "panelRed";
|
||||
panelRed.Size = new Size(27, 25);
|
||||
panelRed.TabIndex = 0;
|
||||
//
|
||||
// checkBoxGarmoshka
|
||||
//
|
||||
checkBoxGarmoshka.AutoSize = true;
|
||||
checkBoxGarmoshka.Location = new Point(12, 74);
|
||||
checkBoxGarmoshka.Name = "checkBoxGarmoshka";
|
||||
checkBoxGarmoshka.Size = new Size(99, 19);
|
||||
checkBoxGarmoshka.TabIndex = 7;
|
||||
checkBoxGarmoshka.Text = "Второй отсек";
|
||||
checkBoxGarmoshka.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxGlass
|
||||
//
|
||||
checkBoxGlass.AutoSize = true;
|
||||
checkBoxGlass.Location = new Point(12, 99);
|
||||
checkBoxGlass.Name = "checkBoxGlass";
|
||||
checkBoxGlass.Size = new Size(64, 19);
|
||||
checkBoxGlass.TabIndex = 6;
|
||||
checkBoxGlass.Text = "Стекла";
|
||||
checkBoxGlass.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// numericUpDownSpeed
|
||||
//
|
||||
numericUpDownSpeed.Location = new Point(82, 17);
|
||||
numericUpDownSpeed.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
|
||||
numericUpDownSpeed.Minimum = new decimal(new int[] { 10, 0, 0, 0 });
|
||||
numericUpDownSpeed.Name = "numericUpDownSpeed";
|
||||
numericUpDownSpeed.Size = new Size(88, 23);
|
||||
numericUpDownSpeed.TabIndex = 5;
|
||||
numericUpDownSpeed.Value = new decimal(new int[] { 10, 0, 0, 0 });
|
||||
//
|
||||
// numericUpDownWeight
|
||||
//
|
||||
numericUpDownWeight.Location = new Point(82, 45);
|
||||
numericUpDownWeight.Maximum = new decimal(new int[] { 120, 0, 0, 0 });
|
||||
numericUpDownWeight.Minimum = new decimal(new int[] { 30, 0, 0, 0 });
|
||||
numericUpDownWeight.Name = "numericUpDownWeight";
|
||||
numericUpDownWeight.Size = new Size(88, 23);
|
||||
numericUpDownWeight.TabIndex = 4;
|
||||
numericUpDownWeight.Value = new decimal(new int[] { 30, 0, 0, 0 });
|
||||
//
|
||||
// labelWeight
|
||||
//
|
||||
labelWeight.AutoSize = true;
|
||||
labelWeight.Location = new Point(12, 47);
|
||||
labelWeight.Name = "labelWeight";
|
||||
labelWeight.Size = new Size(32, 15);
|
||||
labelWeight.TabIndex = 3;
|
||||
labelWeight.Text = "Вес: ";
|
||||
//
|
||||
// labelSpeed
|
||||
//
|
||||
labelSpeed.AutoSize = true;
|
||||
labelSpeed.Location = new Point(12, 19);
|
||||
labelSpeed.Name = "labelSpeed";
|
||||
labelSpeed.Size = new Size(65, 15);
|
||||
labelSpeed.TabIndex = 2;
|
||||
labelSpeed.Text = "Скорость: ";
|
||||
//
|
||||
// labelModifiedObject
|
||||
//
|
||||
labelModifiedObject.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelModifiedObject.Location = new Point(442, 99);
|
||||
labelModifiedObject.Name = "labelModifiedObject";
|
||||
labelModifiedObject.Size = new Size(100, 23);
|
||||
labelModifiedObject.TabIndex = 1;
|
||||
labelModifiedObject.Text = "Продвинутый";
|
||||
labelModifiedObject.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelModifiedObject.MouseDown += LabelObject_MouseDown;
|
||||
//
|
||||
// labelSimpleObject
|
||||
//
|
||||
labelSimpleObject.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelSimpleObject.Location = new Point(336, 99);
|
||||
labelSimpleObject.Name = "labelSimpleObject";
|
||||
labelSimpleObject.Size = new Size(100, 23);
|
||||
labelSimpleObject.TabIndex = 0;
|
||||
labelSimpleObject.Text = "Простой ";
|
||||
labelSimpleObject.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelSimpleObject.MouseDown += LabelObject_MouseDown;
|
||||
//
|
||||
// pictureBoxObject
|
||||
//
|
||||
pictureBoxObject.Location = new Point(7, 74);
|
||||
pictureBoxObject.Name = "pictureBoxObject";
|
||||
pictureBoxObject.Size = new Size(256, 156);
|
||||
pictureBoxObject.TabIndex = 8;
|
||||
pictureBoxObject.TabStop = false;
|
||||
//
|
||||
// buttonAdd
|
||||
//
|
||||
buttonAdd.Location = new Point(554, 270);
|
||||
buttonAdd.Name = "buttonAdd";
|
||||
buttonAdd.Size = new Size(75, 23);
|
||||
buttonAdd.TabIndex = 9;
|
||||
buttonAdd.Text = "Добавить";
|
||||
buttonAdd.UseVisualStyleBackColor = true;
|
||||
buttonAdd.Click += ButtonAdd_Click;
|
||||
//
|
||||
// buttonCancel
|
||||
//
|
||||
buttonCancel.Location = new Point(736, 270);
|
||||
buttonCancel.Name = "buttonCancel";
|
||||
buttonCancel.Size = new Size(75, 23);
|
||||
buttonCancel.TabIndex = 10;
|
||||
buttonCancel.Text = "Отмена";
|
||||
buttonCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panelObject
|
||||
//
|
||||
panelObject.AllowDrop = true;
|
||||
panelObject.Controls.Add(labelAdditionalColor);
|
||||
panelObject.Controls.Add(labelBaseColor);
|
||||
panelObject.Controls.Add(pictureBoxObject);
|
||||
panelObject.Location = new Point(548, 0);
|
||||
panelObject.Name = "panelObject";
|
||||
panelObject.Size = new Size(275, 264);
|
||||
panelObject.TabIndex = 11;
|
||||
panelObject.DragDrop += PanelObject_DragDrop;
|
||||
panelObject.DragEnter += PanelObject_DragEnter;
|
||||
//
|
||||
// labelAdditionalColor
|
||||
//
|
||||
labelAdditionalColor.AllowDrop = true;
|
||||
labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelAdditionalColor.Location = new Point(193, 34);
|
||||
labelAdditionalColor.Name = "labelAdditionalColor";
|
||||
labelAdditionalColor.Size = new Size(70, 20);
|
||||
labelAdditionalColor.TabIndex = 9;
|
||||
labelAdditionalColor.Text = "Доп. цвет";
|
||||
labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelAdditionalColor.DragDrop += labelAdditionalColor_DragDrop;
|
||||
labelAdditionalColor.DragEnter += labelAdditionalColor_DragEnter;
|
||||
//
|
||||
// labelBaseColor
|
||||
//
|
||||
labelBaseColor.AllowDrop = true;
|
||||
labelBaseColor.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelBaseColor.Location = new Point(7, 34);
|
||||
labelBaseColor.Name = "labelBaseColor";
|
||||
labelBaseColor.Size = new Size(57, 20);
|
||||
labelBaseColor.TabIndex = 8;
|
||||
labelBaseColor.Text = "Цвет";
|
||||
labelBaseColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelBaseColor.DragDrop += labelBodyColor_DragDrop;
|
||||
labelBaseColor.DragEnter += labelBodyColor_DragEnter;
|
||||
//
|
||||
// FormBusConfig
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(823, 341);
|
||||
Controls.Add(panelObject);
|
||||
Controls.Add(buttonCancel);
|
||||
Controls.Add(buttonAdd);
|
||||
Controls.Add(groupBoxConfig);
|
||||
Name = "FormBusConfig";
|
||||
Text = "Создание объекта";
|
||||
groupBoxConfig.ResumeLayout(false);
|
||||
groupBoxConfig.PerformLayout();
|
||||
groupBoxColors.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit();
|
||||
panelObject.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private GroupBox groupBoxConfig;
|
||||
private Label labelWeight;
|
||||
private Label labelSpeed;
|
||||
private Label labelModifiedObject;
|
||||
private Label labelSimpleObject;
|
||||
private CheckBox checkBoxGlass;
|
||||
private NumericUpDown numericUpDownSpeed;
|
||||
private NumericUpDown numericUpDownWeight;
|
||||
private CheckBox checkBoxGarmoshka;
|
||||
private GroupBox groupBoxColors;
|
||||
private Panel panelPurple;
|
||||
private Panel panelBlack;
|
||||
private Panel panelGray;
|
||||
private Panel panelWhite;
|
||||
private Panel panelYellow;
|
||||
private Panel panelBlue;
|
||||
private Panel panelGreen;
|
||||
private Panel panelRed;
|
||||
private PictureBox pictureBoxObject;
|
||||
private Button buttonAdd;
|
||||
private Button buttonCancel;
|
||||
private Panel panelObject;
|
||||
private Label labelAdditionalColor;
|
||||
private Label labelBaseColor;
|
||||
}
|
||||
}
|
126
AccordionBus/AccordionBus/FormBusConfig.cs
Normal file
126
AccordionBus/AccordionBus/FormBusConfig.cs
Normal file
@ -0,0 +1,126 @@
|
||||
using AccordionBus.Drawnings;
|
||||
using AccordionBus.Entities;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;
|
||||
|
||||
namespace AccordionBus;
|
||||
|
||||
public partial class FormBusConfig : Form
|
||||
{
|
||||
private DrawningBus? _bus;
|
||||
|
||||
private event Action<DrawningBus>? _busDelegate;
|
||||
public FormBusConfig()
|
||||
{
|
||||
InitializeComponent();
|
||||
panelRed.MouseDown += Panel_MouseDown;
|
||||
panelGreen.MouseDown += Panel_MouseDown;
|
||||
panelBlue.MouseDown += Panel_MouseDown;
|
||||
panelYellow.MouseDown += Panel_MouseDown;
|
||||
panelWhite.MouseDown += Panel_MouseDown;
|
||||
panelGray.MouseDown += Panel_MouseDown;
|
||||
panelBlack.MouseDown += Panel_MouseDown;
|
||||
panelPurple.MouseDown += Panel_MouseDown;
|
||||
buttonCancel.Click += (sender, e) => Close();
|
||||
}
|
||||
private void DrawObject()
|
||||
{
|
||||
Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
|
||||
Graphics gr = Graphics.FromImage(bmp);
|
||||
_bus?.SetPictureSize(pictureBoxObject.Width,
|
||||
pictureBoxObject.Height);
|
||||
_bus?.SetPosition(15, 15);
|
||||
_bus?.DrawTransport(gr);
|
||||
pictureBoxObject.Image = bmp;
|
||||
}
|
||||
|
||||
public void AddEvent(Action<DrawningBus> busDelegate)
|
||||
{
|
||||
_busDelegate += busDelegate;
|
||||
}
|
||||
|
||||
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
(sender as Label)?.DoDragDrop((sender as Label)?.Name, DragDropEffects.Move | DragDropEffects.Copy);
|
||||
}
|
||||
|
||||
private void PanelObject_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
e.Effect = e.Data?.GetDataPresent(DataFormats.Text) ?? false ? e.Effect = DragDropEffects.Copy : e.Effect = DragDropEffects.None;
|
||||
}
|
||||
|
||||
private void PanelObject_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
switch (e.Data?.GetData(DataFormats.Text)?.ToString())
|
||||
{
|
||||
case "labelSimpleObject":
|
||||
_bus = new DrawningBus((int)numericUpDownSpeed.Value,
|
||||
(double)numericUpDownWeight.Value, Color.White);
|
||||
break;
|
||||
case "labelModifiedObject":
|
||||
_bus = new
|
||||
DrawningAccordionBus((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value,
|
||||
Color.White,
|
||||
Color.Black, checkBoxGlass.Checked,
|
||||
checkBoxGarmoshka.Checked);
|
||||
break;
|
||||
}
|
||||
DrawObject();
|
||||
|
||||
}
|
||||
|
||||
private void Panel_MouseDown(object? sender, MouseEventArgs e)
|
||||
{
|
||||
(sender as Control)?.DoDragDrop((sender as Control)?.BackColor!, DragDropEffects.Move | DragDropEffects.Copy);
|
||||
}
|
||||
|
||||
private void ButtonAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_bus != null) {
|
||||
_busDelegate?.Invoke(_bus);
|
||||
Close();
|
||||
}
|
||||
}
|
||||
private void labelBodyColor_DragDrop(object sender, DragEventArgs? e)
|
||||
{
|
||||
if (_bus == null) return;
|
||||
_bus.EntityBus?.SetBody((Color)e.Data.GetData(typeof(Color)));
|
||||
DrawObject();
|
||||
}
|
||||
private void labelBodyColor_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (e.Data.GetDataPresent(typeof(Color))) e.Effect = DragDropEffects.Copy;
|
||||
else e.Effect = DragDropEffects.None;
|
||||
}
|
||||
|
||||
private void labelAdditionalColor_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_bus is DrawningAccordionBus)
|
||||
{
|
||||
if (e.Data.GetDataPresent(typeof(Color)))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void labelAdditionalColor_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_bus?.EntityBus is EntityAccordionBus _accordionBus)
|
||||
{
|
||||
_accordionBus.SetAdditional((Color)e.Data.GetData(typeof(Color)));
|
||||
}
|
||||
DrawObject();
|
||||
}
|
||||
}
|
120
AccordionBus/AccordionBus/FormBusConfig.resx
Normal file
120
AccordionBus/AccordionBus/FormBusConfig.resx
Normal file
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
123
AccordionBus/AccordionBus/MovementStrategy/AbstractStrategy.cs
Normal file
123
AccordionBus/AccordionBus/MovementStrategy/AbstractStrategy.cs
Normal file
@ -0,0 +1,123 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
public abstract class AbstractStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// Перемещаемый объект
|
||||
/// </summary>
|
||||
private IMoveableObject? _moveableObject;
|
||||
/// <summary>
|
||||
/// Статус перемещения
|
||||
/// </summary>
|
||||
private StrategyStatus _state = StrategyStatus.NotInit;
|
||||
/// <summary>
|
||||
/// Ширина поля
|
||||
/// </summary>
|
||||
protected int FieldWidth { get; private set; }
|
||||
/// <summary>
|
||||
/// Высота поля
|
||||
/// </summary>
|
||||
protected int FieldHeight { get; private set; }
|
||||
/// <summary>
|
||||
/// Статус перемещения
|
||||
/// </summary>
|
||||
public StrategyStatus GetStatus() { return _state; }
|
||||
/// <summary>
|
||||
/// Установка данных
|
||||
/// </summary>
|
||||
/// <param name="moveableObject">Перемещаемый объект</param>
|
||||
/// <param name="width">Ширина поля</param>
|
||||
/// <param name="height">Высота поля</param>
|
||||
public void SetData(IMoveableObject moveableObject, int width, int height)
|
||||
{
|
||||
if (moveableObject == null)
|
||||
{
|
||||
_state = StrategyStatus.NotInit;
|
||||
return;
|
||||
}
|
||||
_state = StrategyStatus.InProgress;
|
||||
_moveableObject = moveableObject;
|
||||
FieldWidth = width;
|
||||
FieldHeight = height;
|
||||
}
|
||||
/// <summary>
|
||||
/// Шаг перемещения
|
||||
/// </summary>
|
||||
public void MakeStep()
|
||||
{
|
||||
if (_state != StrategyStatus.InProgress)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (IsTargetDestinaion())
|
||||
{
|
||||
_state = StrategyStatus.Finish;
|
||||
return;
|
||||
}
|
||||
MoveToTarget();
|
||||
}
|
||||
/// <summary>
|
||||
/// Перемещение влево
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||
protected bool MoveLeft() => MoveTo(MovementDirection.Left);
|
||||
/// <summary>
|
||||
/// Перемещение вправо
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||
protected bool MoveRight() => MoveTo(MovementDirection.Right);
|
||||
/// <summary>
|
||||
/// Перемещение вверх
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
|
||||
protected bool MoveUp() => MoveTo(MovementDirection.Up);
|
||||
/// <summary>
|
||||
/// Перемещение вниз
|
||||
/// </summary>
|
||||
/// <returns>Результат перемещения (true - удалось переместиться, false -неудача)</returns>
|
||||
protected bool MoveDown() => MoveTo(MovementDirection.Down);
|
||||
/// <summary>
|
||||
/// Параметры объекта
|
||||
/// </summary>
|
||||
protected ObjectParameters? GetObjectParameters =>
|
||||
_moveableObject?.GetObjectPosition;
|
||||
/// <summary>
|
||||
/// Шаг объекта
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected int? GetStep()
|
||||
{
|
||||
if (_state != StrategyStatus.InProgress)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return _moveableObject?.GetStep;
|
||||
}
|
||||
/// <summary>
|
||||
/// Перемещение к цели
|
||||
/// </summary>
|
||||
protected abstract void MoveToTarget();
|
||||
/// <summary>
|
||||
/// Достигнута ли цель
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected abstract bool IsTargetDestinaion();
|
||||
/// <summary>
|
||||
/// Попытка перемещения в требуемом направлении
|
||||
/// </summary>
|
||||
/// <param name="movementDirection">Направление</param>
|
||||
/// <returns>Результат попытки (true - удалось переместиться, false - неудача)</returns>
|
||||
private bool MoveTo(MovementDirection movementDirection)
|
||||
{
|
||||
if (_state != StrategyStatus.InProgress)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return _moveableObject?.TryMoveObject(movementDirection) ?? false;
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
|
||||
public interface IMoveableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Получение координаты объекта
|
||||
/// </summary>
|
||||
ObjectParameters? GetObjectPosition { get; }
|
||||
/// <summary>
|
||||
/// Шаг объекта
|
||||
/// </summary>
|
||||
int GetStep { get; }
|
||||
/// <summary>
|
||||
/// Попытка переместить объект в указанном направлении
|
||||
/// </summary>
|
||||
/// <param name="direction">Направление</param>
|
||||
/// <returns>true - объект перемещен, false - перемещение невозможно</returns>
|
||||
bool TryMoveObject(MovementDirection direction);
|
||||
}
|
54
AccordionBus/AccordionBus/MovementStrategy/MoveToBorder.cs
Normal file
54
AccordionBus/AccordionBus/MovementStrategy/MoveToBorder.cs
Normal file
@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
|
||||
public class MoveToBorder : AbstractStrategy
|
||||
{
|
||||
protected override bool IsTargetDestinaion()
|
||||
{
|
||||
ObjectParameters? objParams = GetObjectParameters;
|
||||
if (objParams == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return objParams.RightBorder <= FieldWidth && objParams.RightBorder + GetStep() >= FieldWidth &&
|
||||
objParams.DownBorder <= FieldHeight && objParams.DownBorder + GetStep() >= FieldHeight;
|
||||
}
|
||||
protected override void MoveToTarget()
|
||||
{
|
||||
ObjectParameters? objParams = GetObjectParameters;
|
||||
if (objParams == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int diffX = objParams.ObjectMiddleHorizontal - FieldWidth;
|
||||
if (Math.Abs(diffX) > GetStep())
|
||||
{
|
||||
if (diffX > 0)
|
||||
{
|
||||
MoveLeft();
|
||||
}
|
||||
else
|
||||
{
|
||||
MoveRight();
|
||||
}
|
||||
}
|
||||
int diffY = objParams.ObjectMiddleVertical - FieldHeight;
|
||||
if (Math.Abs(diffY) > GetStep())
|
||||
{
|
||||
if (diffY > 0)
|
||||
{
|
||||
MoveUp();
|
||||
}
|
||||
else
|
||||
{
|
||||
MoveDown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
56
AccordionBus/AccordionBus/MovementStrategy/MoveToCenter.cs
Normal file
56
AccordionBus/AccordionBus/MovementStrategy/MoveToCenter.cs
Normal file
@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
|
||||
public class MoveToCenter : AbstractStrategy
|
||||
{
|
||||
protected override bool IsTargetDestinaion()
|
||||
{
|
||||
ObjectParameters? objParams = GetObjectParameters;
|
||||
if (objParams == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return objParams.ObjectMiddleHorizontal - GetStep() <= FieldWidth / 2
|
||||
&& objParams.ObjectMiddleHorizontal + GetStep() >= FieldWidth / 2 &&
|
||||
objParams.ObjectMiddleVertical - GetStep() <= FieldHeight / 2
|
||||
&& objParams.ObjectMiddleVertical + GetStep() >= FieldHeight / 2;
|
||||
}
|
||||
protected override void MoveToTarget()
|
||||
{
|
||||
ObjectParameters? objParams = GetObjectParameters;
|
||||
if (objParams == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int diffX = objParams.ObjectMiddleHorizontal - FieldWidth / 2;
|
||||
if (Math.Abs(diffX) > GetStep())
|
||||
{
|
||||
if (diffX > 0)
|
||||
{
|
||||
MoveLeft();
|
||||
}
|
||||
else
|
||||
{
|
||||
MoveRight();
|
||||
}
|
||||
}
|
||||
int diffY = objParams.ObjectMiddleVertical - FieldHeight / 2;
|
||||
if (Math.Abs(diffY) > GetStep())
|
||||
{
|
||||
if (diffY > 0)
|
||||
{
|
||||
MoveUp();
|
||||
}
|
||||
else
|
||||
{
|
||||
MoveDown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
62
AccordionBus/AccordionBus/MovementStrategy/MoveableBus.cs
Normal file
62
AccordionBus/AccordionBus/MovementStrategy/MoveableBus.cs
Normal file
@ -0,0 +1,62 @@
|
||||
using AccordionBus.Drawnings;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
|
||||
public class MoveableBus:IMoveableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Поле-объект класса DrawningBus или его наследника
|
||||
/// </summary>
|
||||
private readonly DrawningBus? _bus = null;
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="bus">Объект класса DrawningBus</param>
|
||||
public MoveableBus(DrawningBus bus)
|
||||
{
|
||||
_bus = bus;
|
||||
}
|
||||
public ObjectParameters? GetObjectPosition
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_bus == null || _bus.EntityBus == null ||
|
||||
!_bus.GetPosX.HasValue || !_bus.GetPosY.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new ObjectParameters(_bus.GetPosX.Value,
|
||||
_bus.GetPosY.Value, _bus.GetWidth, _bus.GetHeight);
|
||||
}
|
||||
}
|
||||
public int GetStep => (int)(_bus?.EntityBus?.Step ?? 0);
|
||||
public bool TryMoveObject(MovementDirection direction)
|
||||
{
|
||||
if (_bus == null || _bus.EntityBus == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return _bus.MoveTransport(GetDirectionType(direction));
|
||||
}
|
||||
/// <summary>
|
||||
/// Конвертация из MovementDirection в DirectionType
|
||||
/// </summary>
|
||||
/// <param name="direction">MovementDirection</param>
|
||||
/// <returns>DirectionType</returns>
|
||||
private static DirectionType GetDirectionType(MovementDirection direction)
|
||||
{
|
||||
return direction switch
|
||||
{
|
||||
MovementDirection.Left => DirectionType.Left,
|
||||
MovementDirection.Right => DirectionType.Right,
|
||||
MovementDirection.Up => DirectionType.Up,
|
||||
MovementDirection.Down => DirectionType.Down,
|
||||
_ => DirectionType.Unknow,
|
||||
};
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
|
||||
public enum MovementDirection
|
||||
{
|
||||
Up = 1, Down = 2, Left = 3, Right = 4
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
|
||||
public class ObjectParameters
|
||||
{
|
||||
/// <summary>
|
||||
/// Координата X
|
||||
/// </summary>
|
||||
private readonly int _x;
|
||||
/// <summary>
|
||||
/// Координата Y
|
||||
/// </summary>
|
||||
private readonly int _y;
|
||||
/// <summary>
|
||||
/// Ширина объекта
|
||||
/// </summary>
|
||||
private readonly int _width;
|
||||
/// <summary>
|
||||
/// Высота объекта
|
||||
/// </summary>
|
||||
private readonly int _height;
|
||||
/// <summary>
|
||||
/// Левая граница
|
||||
/// </summary>
|
||||
public int LeftBorder => _x;
|
||||
/// <summary>
|
||||
/// Верхняя граница
|
||||
/// </summary>
|
||||
public int TopBorder => _y;
|
||||
/// <summary>
|
||||
/// Правая граница
|
||||
/// </summary>
|
||||
public int RightBorder => _x + _width;
|
||||
/// <summary>
|
||||
/// Нижняя граница
|
||||
/// </summary>
|
||||
public int DownBorder => _y + _height;
|
||||
/// <summary>
|
||||
/// Середина объекта
|
||||
/// </summary>
|
||||
public int ObjectMiddleHorizontal => _x + _width / 2;
|
||||
/// <summary>
|
||||
/// Середина объекта
|
||||
/// </summary>
|
||||
public int ObjectMiddleVertical => _y + _height / 2;
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="x">Координата X</param>
|
||||
/// <param name="y">Координата Y</param>
|
||||
/// <param name="width">Ширина объекта</param>
|
||||
/// <param name="height">Высота объекта</param>
|
||||
public ObjectParameters(int x, int y, int width, int height)
|
||||
{
|
||||
_x = x;
|
||||
_y = y;
|
||||
_width = width;
|
||||
_height = height;
|
||||
}
|
||||
|
||||
}
|
25
AccordionBus/AccordionBus/MovementStrategy/StrategyStatus.cs
Normal file
25
AccordionBus/AccordionBus/MovementStrategy/StrategyStatus.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AccordionBus.MovementStrategy;
|
||||
|
||||
public enum StrategyStatus
|
||||
{
|
||||
///<summary>
|
||||
///Всё готово к началу
|
||||
///</summary>
|
||||
NotInit,
|
||||
|
||||
///<summary>
|
||||
///Выполняется
|
||||
///</summary>
|
||||
InProgress,
|
||||
|
||||
///<summary>
|
||||
///Завершено
|
||||
///</summary>
|
||||
Finish
|
||||
}
|
@ -1,17 +1,39 @@
|
||||
namespace AccordionBus
|
||||
using AccordionBus;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NLog.Extensions.Logging;
|
||||
|
||||
namespace ProjectAccordionBus;
|
||||
|
||||
|
||||
internal static class Program
|
||||
{
|
||||
internal static class Program
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
ServiceCollection services = new();
|
||||
ConfigureServices(services);
|
||||
using ServiceProvider serviceProvider =
|
||||
services.BuildServiceProvider();
|
||||
Application.Run(serviceProvider.GetRequiredService<FormBusCollection>());
|
||||
}
|
||||
/// <summary>
|
||||
/// Êîíôèãóðàöèÿ ñåðâèñà DI
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
private static void ConfigureServices(ServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<FormBusCollection>()
|
||||
.AddLogging(option =>
|
||||
{
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
Application.Run(new Form1());
|
||||
}
|
||||
option.SetMinimumLevel(LogLevel.Information);
|
||||
option.AddNLog("nlog.config");
|
||||
});
|
||||
}
|
||||
}
|
63
AccordionBus/AccordionBus/Properties/Resources.Designer.cs
generated
Normal file
63
AccordionBus/AccordionBus/Properties/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Этот код создан программой.
|
||||
// Исполняемая версия:4.0.30319.42000
|
||||
//
|
||||
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||
// повторной генерации кода.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace AccordionBus.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
|
||||
/// </summary>
|
||||
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
|
||||
// с помощью такого средства, как ResGen или Visual Studio.
|
||||
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
|
||||
// с параметром /str или перестройте свой проект VS.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AccordionBus.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
|
||||
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -18,11 +18,11 @@
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Color1" type="System.Dradoor.Color, System.Dradoor">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<data name="Icon1" type="System.Dradoor.Icon, System.Dradoor" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
14
AccordionBus/AccordionBus/nlog.config
Normal file
14
AccordionBus/AccordionBus/nlog.config
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
autoReload="true" internalLogLevel="Info">
|
||||
<targets>
|
||||
<target xsi:type="File" name="tofile" fileName="carlog-
|
||||
${shortdate}.log" />
|
||||
</targets>
|
||||
<rules>
|
||||
<logger name="*" minlevel="Debug" writeTo="tofile" />
|
||||
</rules>
|
||||
</nlog>
|
||||
</configuration>
|
Loading…
Reference in New Issue
Block a user