Compare commits
No commits in common. "LabWork07" and "main" have entirely different histories.
1
.gitignore
vendored
1
.gitignore
vendored
@ -412,4 +412,3 @@ FodyWeavers.xsd
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
/LocomativeProject/LocomativeProject/log.txt
|
||||
|
@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.32014.148
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocomotiveProject", "LocomativeProject\LocomotiveProject.csproj", "{31F7DD61-7F62-4B39-8543-7A917369587A}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocomativeProject", "LocomativeProject\LocomativeProject.csproj", "{31F7DD61-7F62-4B39-8543-7A917369587A}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
@ -1,113 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomotiveProject.CollectionGenericObjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects;
|
||||
/// <summary>
|
||||
/// Абстракция компании,хранящий коллекцию круизеров
|
||||
/// </summary>
|
||||
public abstract class AbstractCompany
|
||||
{
|
||||
/// <summary>
|
||||
/// Размер места(ширина)
|
||||
/// </summary>
|
||||
protected readonly int _placeSizeWidth = 210;
|
||||
/// <summary>
|
||||
/// Размер места(высота)
|
||||
/// </summary>
|
||||
protected readonly int _placeSizeHeight = 120;
|
||||
/// <summary>
|
||||
/// Ширина окна
|
||||
/// </summary>
|
||||
protected readonly int _pictureWidth;
|
||||
/// <summary>
|
||||
/// Высота окна
|
||||
/// </summary>
|
||||
protected readonly int _pictureHeight;
|
||||
/// <summary>
|
||||
/// Коллекцияя круизеров
|
||||
/// </summary>
|
||||
protected ICollectionGenericObjects<DrawningBaseLocomotive> _collection = null;
|
||||
/// <summary>
|
||||
/// Вычисление макс кол-ва элементов,который можно разместить в окне
|
||||
/// </summary>
|
||||
private int GetMaxCount => _pictureWidth / _placeSizeWidth * (_pictureHeight / _placeSizeHeight);
|
||||
/// <summary>
|
||||
/// конструктор
|
||||
/// </summary>
|
||||
/// <param name="picWidth">Ширина окна</param>
|
||||
/// <param name="pictureHeight">Высота окна</param>
|
||||
/// <param name="collection">коллекция</param>
|
||||
public AbstractCompany(int picWidth, int pictureHeight,ICollectionGenericObjects<DrawningBaseLocomotive> collection)
|
||||
{
|
||||
_pictureWidth = picWidth;
|
||||
_pictureHeight = pictureHeight;
|
||||
_collection = collection;
|
||||
_collection.MaxCount = GetMaxCount;
|
||||
}
|
||||
/// <summary>
|
||||
/// перегрузка оператора + для класса
|
||||
/// </summary>
|
||||
/// <param name="company">Компания</param>
|
||||
/// <param name="Locomotive">добавляемый объект</param>
|
||||
/// <returns></returns>
|
||||
public static int operator +(AbstractCompany company, DrawningBaseLocomotive Locomotive)
|
||||
{
|
||||
if (company._collection == null)
|
||||
return -1;
|
||||
return company._collection.Insert(Locomotive);
|
||||
}
|
||||
/// <summary>
|
||||
/// перегрузка оператора - для класса
|
||||
/// </summary>
|
||||
/// <param name="company">Компания</param>
|
||||
/// <param name="position">позиция удаления</param>
|
||||
/// <returns></returns>
|
||||
public static DrawningBaseLocomotive operator -(AbstractCompany company, int position)
|
||||
{
|
||||
if (company._collection == null)
|
||||
return null;
|
||||
|
||||
return company._collection.Remove(position);
|
||||
}
|
||||
/// <summary>
|
||||
/// получение случайног обьекта из коллекции
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public DrawningBaseLocomotive? GetRandomObject()
|
||||
{
|
||||
Random rnd = new Random();
|
||||
return _collection?.Get(rnd.Next(GetMaxCount));
|
||||
}
|
||||
/// <summary>
|
||||
/// вывод всей коллекции
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Bitmap? Show()
|
||||
{
|
||||
Bitmap? bitmap = new(_pictureWidth,_pictureHeight);
|
||||
Graphics graphics = Graphics.FromImage(bitmap);
|
||||
DrawBackground(graphics);
|
||||
|
||||
SetObjectPosition();
|
||||
for (int i = 0; i < (_collection?.Count ?? 0); ++i)
|
||||
{
|
||||
DrawningBaseLocomotive? obj = _collection?.Get(i);
|
||||
obj?.DrawTransport(graphics);
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
/// <summary>
|
||||
/// Вывод заднего фона
|
||||
/// </summary>
|
||||
/// <param name="graphics"></param>
|
||||
protected abstract void DrawBackground(Graphics graphics);
|
||||
/// <summary>
|
||||
/// Расстановка объектов
|
||||
/// </summary>
|
||||
protected abstract void SetObjectPosition();
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects;
|
||||
/// <summary>
|
||||
/// Тип коллекции
|
||||
/// </summary>
|
||||
public enum CollectionType
|
||||
{
|
||||
/// <summary>
|
||||
/// Неопределено
|
||||
/// </summary>
|
||||
None = 0,
|
||||
/// <summary>
|
||||
/// Массив
|
||||
/// </summary>
|
||||
Massive = 1,
|
||||
/// <summary>
|
||||
/// Список
|
||||
/// </summary>
|
||||
List = 2
|
||||
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects;
|
||||
|
||||
public interface ICollectionGenericObjects<T>
|
||||
where T : class
|
||||
{
|
||||
/// <summary>
|
||||
/// Кол-во объектов в коллекции
|
||||
/// </summary>
|
||||
int Count { get; }
|
||||
/// <summary>
|
||||
/// Установка макс. кол-ва элементов
|
||||
/// </summary>
|
||||
int MaxCount { get; set; }
|
||||
/// <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="positon">позиция</param>
|
||||
/// <returns>true-удаление прошло удачно,false- удаление не удалось</returns>
|
||||
T? Remove(int positon);
|
||||
/// <summary>
|
||||
/// получение объекта по позиции
|
||||
/// </summary>
|
||||
/// <param name="positon">позиция</param>
|
||||
/// <returns>Обьект</returns>
|
||||
T? Get(int positon);
|
||||
|
||||
/// <summary>
|
||||
/// Получение типа коллекции
|
||||
/// </summary>
|
||||
CollectionType GetCollectionType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Получение объектов коллекции по одному
|
||||
/// </summary>
|
||||
/// <returns>Поэлементный вывод элементов коллекции</returns>
|
||||
IEnumerable<T?> GetItems();
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects;
|
||||
/// <summary>
|
||||
/// Параметризованный набор объектов
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Параметр: ограничение - ссылочный тип</typeparam>
|
||||
public class ListGenericObjects<T> : ICollectionGenericObjects<T>
|
||||
where T : class
|
||||
{
|
||||
/// <summary>
|
||||
/// Список объектов, которые храним
|
||||
/// </summary>
|
||||
private readonly List<T?> _collection;
|
||||
|
||||
/// <summary>
|
||||
/// Максимально допустимое число объектов в списке
|
||||
/// </summary>
|
||||
private int _maxCount;
|
||||
|
||||
public int Count => _collection.Count;
|
||||
|
||||
public int MaxCount
|
||||
{
|
||||
get { return Count; }
|
||||
set { if (value > 0) { _maxCount = value; } }
|
||||
}
|
||||
public CollectionType GetCollectionType => CollectionType.List;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public ListGenericObjects()
|
||||
{
|
||||
_collection = new();
|
||||
}
|
||||
|
||||
public int Insert(T obj)
|
||||
{
|
||||
// TODO проверка, что не превышено максимальное количество элементов
|
||||
// TODO вставка в конец набора
|
||||
if (_collection.Count >= _maxCount) return -1;
|
||||
_collection.Add(obj);
|
||||
return Count;
|
||||
}
|
||||
|
||||
public int Insert(T obj, int position)
|
||||
{
|
||||
// TODO проверка, что не превышено максимальное количество элементов
|
||||
// TODO проверка позиции
|
||||
// TODO вставка по позиции
|
||||
if (_collection.Count >= _maxCount || _collection[position] == null || position < 0) { return -1; }
|
||||
_collection.Insert(position, obj);
|
||||
return Count;
|
||||
}
|
||||
|
||||
public T? Get(int position)
|
||||
{
|
||||
// TODO проверка позиции
|
||||
if (!_collection.Any()) { return null; }
|
||||
if (_collection.Count <= position || position < 0 || position >= _maxCount) { return null; }
|
||||
return _collection[position];
|
||||
}
|
||||
|
||||
public T? Remove(int position)
|
||||
{
|
||||
// TODO проверка позиции
|
||||
// TODO удаление объекта из списка
|
||||
if (position >= Count || position < 0) return null;
|
||||
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];
|
||||
}
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomotiveProject.CollectionGenericObjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects;
|
||||
|
||||
public class LocomotiveSharingService : AbstractCompany
|
||||
{
|
||||
public LocomotiveSharingService(int picWidth, int pictureHeight, ICollectionGenericObjects<DrawningBaseLocomotive> collection) : base(picWidth, pictureHeight, collection)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DrawBackground(Graphics g)
|
||||
{
|
||||
Pen pen = new Pen(Color.Black,2);
|
||||
int width = _pictureWidth / _placeSizeWidth;
|
||||
int height = _pictureHeight / _placeSizeHeight;
|
||||
for (int i = 0; i < width; i++)
|
||||
{
|
||||
for (int j = 0; j < height; j++)
|
||||
{
|
||||
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10);
|
||||
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120);
|
||||
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void SetObjectPosition()
|
||||
{
|
||||
int width = _pictureWidth / _placeSizeWidth;
|
||||
int height = _pictureHeight / _placeSizeHeight;
|
||||
|
||||
int curWidth = 0;
|
||||
int curHeight = 0;
|
||||
|
||||
for (int i = 0; i < (_collection?.Count ?? 0); i++)
|
||||
{
|
||||
if (_collection?.Get(i) != null)
|
||||
{
|
||||
_collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight);
|
||||
_collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35);
|
||||
}
|
||||
if (curHeight < height - 1)
|
||||
curHeight++;
|
||||
else
|
||||
{
|
||||
curHeight = 0;
|
||||
curWidth++;
|
||||
}
|
||||
if (curWidth > width - 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomotiveProject.CollectionGenericObjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects;
|
||||
|
||||
public class LocomotiveStation : AbstractCompany
|
||||
{
|
||||
public LocomotiveStation(int picWidth, int pictureHeight, ICollectionGenericObjects<DrawningBaseLocomotive> collection) : base(picWidth, pictureHeight, collection)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void DrawBackground(Graphics g)
|
||||
{
|
||||
Pen pen = new Pen(Color.Black,2);
|
||||
int width = _pictureWidth / _placeSizeWidth;
|
||||
int height = _pictureHeight / _placeSizeHeight;
|
||||
for (int i = 0; i < width; i++)
|
||||
{
|
||||
for (int j = 0; j < height; j++)
|
||||
{
|
||||
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 190, j * _placeSizeHeight + 10);
|
||||
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120, i * _placeSizeWidth + 190, j * _placeSizeHeight + 120);
|
||||
g.DrawLine(pen, i * _placeSizeWidth + 20, j * _placeSizeHeight + 10, i * _placeSizeWidth + 20, j * _placeSizeHeight + 120);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void SetObjectPosition()
|
||||
{
|
||||
int width = _pictureWidth / _placeSizeWidth;
|
||||
int height = _pictureHeight / _placeSizeHeight;
|
||||
|
||||
int curWidth = 0;
|
||||
int curHeight = 0;
|
||||
|
||||
for (int i = 0; i < (_collection?.Count ?? 0); i++)
|
||||
{
|
||||
if (_collection?.Get(i) != null)
|
||||
{
|
||||
_collection?.Get(i).SetPictureSize(_pictureWidth, _pictureHeight);
|
||||
_collection?.Get(i).SetPosition(_placeSizeWidth * curWidth + 30, curHeight * _placeSizeHeight + 35);
|
||||
}
|
||||
if (curHeight < height - 1)
|
||||
curHeight++;
|
||||
else
|
||||
{
|
||||
curHeight = 0;
|
||||
curWidth++;
|
||||
}
|
||||
if (curWidth > width - 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,122 +0,0 @@
|
||||
using LocomativeProject.Exceptions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects;
|
||||
|
||||
public class MassiveGenericObjects<T> : ICollectionGenericObjects<T>
|
||||
where T : class
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
_collection = new T?[value];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public CollectionType GetCollectionType => CollectionType.Massive;
|
||||
|
||||
/// <summary>
|
||||
/// конструктор
|
||||
/// </summary>
|
||||
public MassiveGenericObjects()
|
||||
{
|
||||
_collection = Array.Empty<T>();
|
||||
}
|
||||
|
||||
public T? Get(int positon)
|
||||
{
|
||||
if (positon <= Count || positon > 0)
|
||||
{
|
||||
return _collection[positon];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public int Insert(T obj)
|
||||
{
|
||||
// TODO вставка в свободное место набора
|
||||
for (int i = 0; i < Count; i++)
|
||||
{
|
||||
if (InsertingElementCollection(i, obj)) return i;
|
||||
}
|
||||
|
||||
throw new CollectionOverflowException("Превышение лимита Count");
|
||||
}
|
||||
|
||||
public int Insert(T obj, int position)
|
||||
{
|
||||
// TODO проверка позиции
|
||||
// TODO проверка, что элемент массива по этой позиции пустой, если нет, то
|
||||
// ищется свободное место после этой позиции и идет вставка туда
|
||||
// если нет после, ищем до
|
||||
// TODO вставка
|
||||
if (!(position >= 0 && position < Count)) throw new PositionOutOfCollectionException(position);
|
||||
if (InsertingElementCollection(position, obj)) return position;
|
||||
|
||||
for (int i = position + 1; i < Count; i++)
|
||||
{
|
||||
if (InsertingElementCollection(i, obj)) return i;
|
||||
}
|
||||
|
||||
for (int i = position - 1; i >= 0; i--)
|
||||
{
|
||||
if (InsertingElementCollection(i, obj)) return i;
|
||||
}
|
||||
|
||||
throw new CollectionOverflowException("Нет свободного места для вставки");
|
||||
}
|
||||
|
||||
public T? Remove(int position)
|
||||
{
|
||||
// TODO проверка позиции
|
||||
// TODO удаление объекта из массива, присвоив элементу массива значение null
|
||||
|
||||
if (!(position >= 0 && position < Count) || _collection[position] == null) throw new ObjectNotFoundException(position);
|
||||
|
||||
T obj = _collection[position];
|
||||
_collection[position] = null;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
private bool InsertingElementCollection(int index, T obj)
|
||||
{
|
||||
if (_collection[index] != null) return false;
|
||||
|
||||
_collection[index] = obj;
|
||||
return true;
|
||||
}
|
||||
|
||||
public IEnumerable<T?> GetItems()
|
||||
{
|
||||
for (int i = 0; i < _collection.Length; ++i)
|
||||
{
|
||||
yield return _collection[i];
|
||||
}
|
||||
}
|
||||
}
|
@ -1,235 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomativeProject.Exceptions;
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace LocomotiveProject.CollectionGenericObjects
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс-хранилище коллекций
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class StorageCollection<T>
|
||||
where T : DrawningBaseLocomotive
|
||||
{
|
||||
/// <summary>
|
||||
/// Словарь (хранилище) с коллекциями
|
||||
/// </summary>
|
||||
readonly Dictionary<string, ICollectionGenericObjects<T>> _storages;
|
||||
|
||||
/// <summary>
|
||||
/// Возвращение списка названий коллекций
|
||||
/// </summary>
|
||||
public List<string> Keys => _storages.Keys.ToList();
|
||||
|
||||
/// <summary>
|
||||
/// Ключевое слово, с которого должен начинаться файл
|
||||
/// </summary>
|
||||
private readonly string _collectionKey = "CollectionsStorage";
|
||||
|
||||
/// <summary>
|
||||
/// Разделитель для записи ключа и значения элемента словаря
|
||||
/// </summary>
|
||||
private readonly string _separatorForKeyValue = "|";
|
||||
|
||||
/// <summary>
|
||||
/// Разделитель для записей коллекции данных в файл
|
||||
/// </summary>
|
||||
private readonly string _separatorItems = ";";
|
||||
|
||||
/// <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)
|
||||
{
|
||||
// TODO проверка, что name не пустой и нет в словаре записи с таким ключом
|
||||
// TODO Прописать логику для добавления
|
||||
if (!_storages.ContainsKey(name))
|
||||
{
|
||||
ICollectionGenericObjects<T> collection;
|
||||
|
||||
switch (collectionType)
|
||||
{
|
||||
case CollectionType.List:
|
||||
collection = new ListGenericObjects<T>();
|
||||
break;
|
||||
case CollectionType.Massive:
|
||||
collection = new MassiveGenericObjects<T>();
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
_storages.Add(name, collection);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Удаление коллекции
|
||||
/// </summary>
|
||||
/// <param name="name">Название коллекции</param>
|
||||
public void DelCollection(string name)
|
||||
{
|
||||
// TODO Прописать логику для удаления коллекции
|
||||
|
||||
_storages.Remove(name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Доступ к коллекции
|
||||
/// </summary>
|
||||
/// <param name="name">Название коллекции</param>
|
||||
/// <returns></returns>
|
||||
public ICollectionGenericObjects<T>? this[string name]
|
||||
{
|
||||
get
|
||||
{
|
||||
// TODO Продумать логику получения
|
||||
|
||||
if (_storages.TryGetValue(name, out var value)) return value;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сохранение информации по автомобилям в хранилище в файл
|
||||
/// </summary>
|
||||
/// <param name="filename">Путь и имя файла</param>
|
||||
/// <returns>true - сохранение прошло успешно, false - ошибка при сохранении данных</returns>
|
||||
public bool SaveData(string filename)
|
||||
{
|
||||
if (_storages.Count == 0)
|
||||
{
|
||||
throw new Exception("Storage is empty");
|
||||
}
|
||||
if (File.Exists(filename))
|
||||
{
|
||||
File.Delete(filename);
|
||||
}
|
||||
using (StreamWriter writer = new StreamWriter(filename))
|
||||
{
|
||||
writer.Write(_collectionKey);
|
||||
foreach (KeyValuePair<string, ICollectionGenericObjects<T>> value in _storages)
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.Append(Environment.NewLine);
|
||||
|
||||
if (value.Value.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
stringBuilder.Append(value.Key);
|
||||
stringBuilder.Append(_separatorForKeyValue);
|
||||
stringBuilder.Append(value.Value.GetCollectionType);
|
||||
stringBuilder.Append(_separatorForKeyValue);
|
||||
stringBuilder.Append(value.Value.MaxCount);
|
||||
stringBuilder.Append(_separatorForKeyValue);
|
||||
|
||||
foreach (T? item in value.Value.GetItems())
|
||||
{
|
||||
string data = item?.GetDataForSave() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(data))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
stringBuilder.Append(data);
|
||||
stringBuilder.Append(_separatorItems);
|
||||
}
|
||||
writer.Write(stringBuilder);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Загрузка информации по автомобилям в хранилище из файла
|
||||
/// </summary>
|
||||
/// <param name="filename">Путь и имя файла</param>
|
||||
/// <returns>true - загрузка прошла успешно, false - ошибка при загрузке данных</returns>
|
||||
public void LoadData(string filename)
|
||||
{
|
||||
if (!File.Exists(filename))
|
||||
{
|
||||
throw new FileDoesNotExistException("Файл не существует " + filename);
|
||||
}
|
||||
|
||||
using (StreamReader streamRader = File.OpenText(filename))
|
||||
{
|
||||
string inputString = streamRader.ReadLine();
|
||||
|
||||
if (inputString == null || inputString.Length == 0)
|
||||
{
|
||||
throw new FileEmptyException("Файл пустой " + filename);
|
||||
}
|
||||
|
||||
if (!inputString.StartsWith(_collectionKey))
|
||||
{
|
||||
throw new ObjectNotFoundException();
|
||||
}
|
||||
|
||||
_storages.Clear();
|
||||
string strs = "";
|
||||
while ((strs = streamRader.ReadLine()) != null)
|
||||
{
|
||||
string[] record = strs.Split(_separatorForKeyValue, StringSplitOptions.RemoveEmptyEntries);
|
||||
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 ObjectNotFoundException();
|
||||
}
|
||||
collection.MaxCount = Convert.ToInt32(record[2]);
|
||||
string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (string elem in set)
|
||||
{
|
||||
if (elem?.CreateDrawingBaseLocomotive() is T ship)
|
||||
{
|
||||
if (collection.Insert(ship) == -1)
|
||||
{
|
||||
throw new PositionOutOfCollectionException();
|
||||
}
|
||||
}
|
||||
}
|
||||
_storages.Add(record[0], collection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static ICollectionGenericObjects<T>? CreateCollection(CollectionType collectionType)
|
||||
{
|
||||
return collectionType switch
|
||||
{
|
||||
CollectionType.Massive => new MassiveGenericObjects<T>(),
|
||||
CollectionType.List => new ListGenericObjects<T>(),
|
||||
_ => null,
|
||||
};
|
||||
}
|
||||
|
||||
public T? this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (index >= 0 && index < Keys.Count && Keys[index] != null)
|
||||
{
|
||||
return (T)_storages[Keys[index]];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
namespace LocomativeProject.Drawnings
|
||||
{
|
||||
/// <summary>
|
||||
/// Направление перемещения
|
||||
/// </summary>
|
||||
public enum DirectionType
|
||||
{
|
||||
/// <summary>
|
||||
/// Неизвестное направление
|
||||
/// </summary>
|
||||
Unknow = -1,
|
||||
/// <summary>
|
||||
/// Вверх
|
||||
/// </summary>
|
||||
Up = 1,
|
||||
/// <summary>
|
||||
/// Вниз
|
||||
/// </summary>
|
||||
Down,
|
||||
/// <summary>
|
||||
/// Влево
|
||||
/// </summary>
|
||||
Left,
|
||||
/// <summary>
|
||||
/// Вправо
|
||||
/// </summary>
|
||||
Right
|
||||
}
|
||||
}
|
@ -1,288 +0,0 @@
|
||||
using LocomativeProject.Entities;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace LocomativeProject.Drawnings
|
||||
{
|
||||
public class DrawningBaseLocomotive
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс-сущность
|
||||
/// </summary>
|
||||
public EntityBaseLocomotive? _EntityBaseLocomotive { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// Ширина окна
|
||||
/// </summary>
|
||||
protected int? _pictureWidth;
|
||||
|
||||
/// <summary>
|
||||
/// Высота окна
|
||||
/// </summary>
|
||||
protected int? _pictureHeight;
|
||||
|
||||
/// <summary>
|
||||
/// Левая координата прорисовки тепловоза
|
||||
/// </summary>
|
||||
protected int? _startPosX;
|
||||
|
||||
/// <summary>
|
||||
/// Верхняя кооридната прорисовки тепловоза
|
||||
/// </summary>
|
||||
protected int? _startPosY;
|
||||
|
||||
/// <summary>
|
||||
/// Ширина прорисовки тепловоза
|
||||
/// </summary>
|
||||
private readonly int _drawningBaseLocomotiveWidth = 150;
|
||||
|
||||
/// <summary>
|
||||
/// Высота прорисовки тепловоза
|
||||
/// </summary>
|
||||
private readonly int _drawningBaseLocomotiveHeight = 80;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Координата X объекта
|
||||
/// </summary>
|
||||
public int? GetPosX => _startPosX;
|
||||
|
||||
/// <summary>
|
||||
/// Координата Y объекта
|
||||
/// </summary>
|
||||
public int? GetPosY => _startPosY;
|
||||
|
||||
/// <summary>
|
||||
/// Ширина объекта
|
||||
/// </summary>
|
||||
public int GetWidth => _drawningBaseLocomotiveWidth;
|
||||
|
||||
/// <summary>
|
||||
/// Высота объекта
|
||||
/// </summary>
|
||||
public int GetHeight => _drawningBaseLocomotiveHeight;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Пустой конструктор
|
||||
/// </summary>
|
||||
private DrawningBaseLocomotive()
|
||||
{
|
||||
_pictureWidth = null;
|
||||
_pictureHeight = null;
|
||||
_startPosX = null;
|
||||
_startPosY = null;
|
||||
}
|
||||
/// <summary>
|
||||
/// Конструктор базового поезда
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
public DrawningBaseLocomotive(int speed, double weight, Color bodyColor) : this()
|
||||
{
|
||||
_EntityBaseLocomotive = new EntityBaseLocomotive(speed, weight, bodyColor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="entityMonorail"></param>
|
||||
public DrawningBaseLocomotive(EntityBaseLocomotive entityBaseLocomotive) : this()
|
||||
{
|
||||
Debug.WriteLine(entityBaseLocomotive.BodyColor.ToString() + " " + entityBaseLocomotive.Speed + " " + entityBaseLocomotive.Weight);
|
||||
_EntityBaseLocomotive = new EntityBaseLocomotive(entityBaseLocomotive.Speed, entityBaseLocomotive.Weight, entityBaseLocomotive.BodyColor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор для наследников
|
||||
/// </summary>
|
||||
/// <param name="drawningLocomotiveWidth">ширина</param>
|
||||
/// <param name="drawningLocomotiveHeight">высота</param>
|
||||
protected DrawningBaseLocomotive(int Width, int Height) : this()
|
||||
{
|
||||
_drawningBaseLocomotiveWidth = Width;
|
||||
_drawningBaseLocomotiveHeight = Height;
|
||||
}
|
||||
/// <summary>
|
||||
/// Установка границ поля
|
||||
/// </summary>
|
||||
/// <param name="width">Ширина поля</param>
|
||||
/// <param name="height">Высота поля</param>
|
||||
/// <returns>true - границы заданы, false - проверка не пройдена, нельзя
|
||||
///разместить объект в этих размерах</returns>
|
||||
public bool SetPictureSize(int width, int height)
|
||||
{
|
||||
if (width > _drawningBaseLocomotiveWidth || height > _drawningBaseLocomotiveHeight) // если ширина и высота окна больше чем объект
|
||||
{
|
||||
_pictureWidth = width;
|
||||
_pictureHeight = height;
|
||||
if (_startPosX + _drawningBaseLocomotiveWidth > width || _startPosX < 0) // если координаты выходят за пределы, корректируем
|
||||
{
|
||||
_startPosX = 0;
|
||||
}
|
||||
if (_startPosY + _drawningBaseLocomotiveHeight > height || _startPosY < 0)
|
||||
{
|
||||
_startPosY = 0;
|
||||
}
|
||||
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 + _drawningBaseLocomotiveWidth < _pictureWidth)
|
||||
{
|
||||
_startPosX = x;
|
||||
}
|
||||
if (y > 0 || y + _drawningBaseLocomotiveHeight < _pictureHeight)
|
||||
{
|
||||
_startPosY = y;
|
||||
}
|
||||
// если не лезет, но мог бы влезть
|
||||
if (x < 0 || x + _drawningBaseLocomotiveWidth > _pictureWidth)
|
||||
{
|
||||
_startPosX = 0;
|
||||
}
|
||||
if (y < 0 || y + _drawningBaseLocomotiveHeight > _pictureHeight)
|
||||
{
|
||||
_startPosY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Изменение направления перемещения
|
||||
/// </summary>
|
||||
/// <param name="direction">Направление</param>
|
||||
/// <returns>true - перемещене выполнено, false - перемещение
|
||||
/// невозможно</returns>
|
||||
public bool MoveTransport(DirectionType direction)
|
||||
{
|
||||
if (_EntityBaseLocomotive == null || !_startPosX.HasValue ||
|
||||
!_startPosY.HasValue)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
switch (direction)
|
||||
{
|
||||
//влево
|
||||
case DirectionType.Left:
|
||||
if (_startPosX.Value - _EntityBaseLocomotive.Step > 0)
|
||||
{
|
||||
_startPosX -= (int)_EntityBaseLocomotive.Step;
|
||||
}
|
||||
return true;
|
||||
//вверх
|
||||
case DirectionType.Up:
|
||||
if (_startPosY.Value - _EntityBaseLocomotive.Step > 0)
|
||||
{
|
||||
_startPosY -= (int)_EntityBaseLocomotive.Step;
|
||||
}
|
||||
return true;
|
||||
// вправо
|
||||
case DirectionType.Right:
|
||||
if (_startPosX.Value + _drawningBaseLocomotiveWidth + _EntityBaseLocomotive.Step < _pictureWidth)
|
||||
{
|
||||
_startPosX += (int)_EntityBaseLocomotive.Step;
|
||||
}
|
||||
return true;
|
||||
//вниз
|
||||
case DirectionType.Down:
|
||||
if (_startPosY.Value + _drawningBaseLocomotiveHeight + _EntityBaseLocomotive.Step < _pictureHeight)
|
||||
{
|
||||
_startPosY += (int)_EntityBaseLocomotive.Step;
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ОТрисовка полигона
|
||||
/// </summary>
|
||||
/// <param name="g">Graphics</param>
|
||||
private void DrawPolygon(Graphics g, Pen pen, Brush brush, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
|
||||
{
|
||||
Point point1 = new Point(x1, y1);
|
||||
Point point2 = new Point(x2, y2);
|
||||
Point point3 = new Point(x3, y3);
|
||||
Point point4 = new Point(x4, y4);
|
||||
Point[] PolygponPoints =
|
||||
{
|
||||
point1,
|
||||
point2,
|
||||
point3,
|
||||
point4
|
||||
};
|
||||
g.FillPolygon(brush, PolygponPoints);
|
||||
g.DrawPolygon(pen, PolygponPoints);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Прорисовка объекта
|
||||
/// </summary>
|
||||
/// <param name="g"></param>
|
||||
public virtual void DrawTransport(Graphics g)
|
||||
{
|
||||
if (_EntityBaseLocomotive == null || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Pen pen = new(Color.Black);
|
||||
Brush bodyBrush = new SolidBrush(_EntityBaseLocomotive.BodyColor);
|
||||
Brush blackBrush = new SolidBrush(Color.Black);
|
||||
Brush whiteBrush = new SolidBrush(Color.White);
|
||||
//границы тепловоза
|
||||
DrawPolygon(g, pen, bodyBrush,
|
||||
_startPosX.Value + 5, _startPosY.Value + 10,
|
||||
_startPosX.Value + 105, _startPosY.Value + 10,
|
||||
_startPosX.Value + 115, _startPosY.Value + 20 + 10,
|
||||
_startPosX.Value + 5, _startPosY.Value + 20 + 10
|
||||
);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20);
|
||||
g.FillRectangle(blackBrush, _startPosX.Value, _startPosY.Value + 5 + 10, 5, 30);
|
||||
//шасси
|
||||
DrawPolygon(g, pen, blackBrush,
|
||||
_startPosX.Value, _startPosY.Value + 45 + 10,
|
||||
_startPosX.Value + 10, _startPosY.Value + 40 + 10,
|
||||
_startPosX.Value + 50, _startPosY.Value + 40 + 10,
|
||||
_startPosX.Value + 50, _startPosY.Value + 45 + 10
|
||||
);
|
||||
DrawPolygon(g, pen, blackBrush,
|
||||
_startPosX.Value + 70, _startPosY.Value + 40 + 10,
|
||||
_startPosX.Value + 110, _startPosY.Value + 40 + 10,
|
||||
_startPosX.Value + 120, _startPosY.Value + 45 + 10,
|
||||
_startPosX.Value + 70, _startPosY.Value + 45 + 10
|
||||
);
|
||||
//колеса
|
||||
g.DrawEllipse(pen, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10);
|
||||
g.FillEllipse(whiteBrush, _startPosX.Value + 15, _startPosY.Value + 40 + 10, 10, 10);
|
||||
g.DrawEllipse(pen, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10);
|
||||
g.FillEllipse(whiteBrush, _startPosX.Value + 30, _startPosY.Value + 40 + 10, 10, 10);
|
||||
g.DrawEllipse(pen, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10);
|
||||
g.FillEllipse(whiteBrush, _startPosX.Value + 80, _startPosY.Value + 40 + 10, 10, 10);
|
||||
g.DrawEllipse(pen, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10);
|
||||
g.FillEllipse(whiteBrush, _startPosX.Value + 95, _startPosY.Value + 40 + 10, 10, 10);
|
||||
//дверь
|
||||
g.FillRectangle(bodyBrush, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 50, _startPosY.Value + 10 + 10, 10, 20);
|
||||
//окна
|
||||
pen = new(Color.Blue);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 85, _startPosY.Value + 5 + 10, 10, 10);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 70, _startPosY.Value + 5 + 10, 10, 10);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 10, _startPosY.Value + 5 + 10, 10, 10);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomotiveProject.Entities;
|
||||
|
||||
namespace LocomotiveProject.Drawnings
|
||||
{
|
||||
public class DrawningLocomotive : DrawningBaseLocomotive
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="entityModernLocomotive"></param>
|
||||
public DrawningLocomotive(EntityLocomotive entityLocomotive) : base(120, 60)
|
||||
{
|
||||
_EntityBaseLocomotive = new EntityLocomotive(entityLocomotive.Speed, entityLocomotive.Weight, entityLocomotive.BodyColor, entityLocomotive.AdditionalColor, entityLocomotive.FuelCompartment, entityLocomotive.ExehaustPipe);
|
||||
}
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес тепловоза</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||
/// <param name="exehaustPipe">Признак наличия трубы</param>
|
||||
/// <param name="fuelCompartment">Признак наличия топливного отсека</param>
|
||||
public DrawningLocomotive(int speed, double weight, Color bodyColor, Color additionalColor, bool exehaustPipe, bool fuelCompartment) : base(120, 60)
|
||||
{
|
||||
_EntityBaseLocomotive = new EntityLocomotive(speed, weight, bodyColor, additionalColor, exehaustPipe, fuelCompartment);
|
||||
}
|
||||
|
||||
public override void DrawTransport(Graphics g)
|
||||
{
|
||||
if (_EntityBaseLocomotive == null || _EntityBaseLocomotive is not EntityLocomotive entityLocomotive || !_startPosX.HasValue || !_startPosY.HasValue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Pen pen = new(Color.Black);
|
||||
Brush additionalBrush = new SolidBrush(entityLocomotive.AdditionalColor);
|
||||
Brush bodyBrush = new SolidBrush(entityLocomotive.BodyColor);
|
||||
//Brush blackBrush = new SolidBrush(Color.Black);
|
||||
//Brush whiteBrush = new SolidBrush(Color.White);
|
||||
//g.FillRectangle(additionalBrush, _startPosX.Value + 5, _startPosY.Value + +10 + 20, 110, 20);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 5, _startPosY.Value + 20 + 10, 110, 20);
|
||||
base.DrawTransport(g);
|
||||
if (entityLocomotive.ExehaustPipe)
|
||||
{
|
||||
Brush greyBrush = new SolidBrush(Color.Gray);
|
||||
g.FillRectangle(additionalBrush, _startPosX.Value + 80, _startPosY.Value, 5, 10);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 80, _startPosY.Value, 5, 10);
|
||||
}
|
||||
// отсек для топлива
|
||||
if (entityLocomotive.FuelCompartment)
|
||||
{
|
||||
g.FillRectangle(additionalBrush, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20);
|
||||
g.DrawRectangle(pen, _startPosX.Value + 25, _startPosY.Value + 10 + 10, 10, 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomativeProject.Entities;
|
||||
using LocomotiveProject.Drawnings;
|
||||
using LocomotiveProject.Entities;
|
||||
|
||||
namespace LocomativeProject.Drawnings
|
||||
{
|
||||
/// <summary>
|
||||
/// Расширение для класса EntityMonorail
|
||||
/// </summary>
|
||||
public static class ExtentionDrawningMonorail
|
||||
{
|
||||
/// <summary>
|
||||
/// Разделитель для записи информации по объекту в файл
|
||||
/// </summary>
|
||||
private static readonly string _separatorForObject = ":";
|
||||
|
||||
public static DrawningBaseLocomotive? CreateDrawingBaseLocomotive(this string info)
|
||||
{
|
||||
string[] args = info.Split(_separatorForObject);
|
||||
EntityBaseLocomotive? locomotive = EntityLocomotive.CreateEntityLocomotive(args);
|
||||
|
||||
if (locomotive != null) return new DrawningLocomotive((EntityLocomotive)locomotive);
|
||||
|
||||
locomotive = EntityBaseLocomotive.CreateEntityBaseLocomotive(args);
|
||||
|
||||
if (locomotive != null) return new DrawningBaseLocomotive(locomotive);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение данных для сохранения в файл
|
||||
/// </summary>
|
||||
/// <param name="drawingMonorail"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetDataForSave(this DrawningBaseLocomotive drawningBaseLocomotive)
|
||||
{
|
||||
string[]? array = drawningBaseLocomotive?._EntityBaseLocomotive?.GetStringRepresention();
|
||||
|
||||
if (array == null)
|
||||
return string.Empty;
|
||||
|
||||
return string.Join(_separatorForObject, array);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
namespace LocomativeProject.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс-сущность базовый тепловоз
|
||||
/// </summary>
|
||||
public class EntityBaseLocomotive
|
||||
{
|
||||
/// <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>
|
||||
/// <param name="bodyColor"></param>
|
||||
public void setBodyColor(Color bodyColor) { BodyColor = bodyColor; }
|
||||
|
||||
/// <summary>
|
||||
/// Шаг перемещения тепловоза
|
||||
/// </summary>
|
||||
public double Step => Speed * 100 / Weight;
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес тепловоза</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
public EntityBaseLocomotive(int speed, double weight, Color bodyColor)
|
||||
{
|
||||
Speed = speed;
|
||||
Weight = weight;
|
||||
BodyColor = bodyColor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строк с значениями свойств объекта класса-сущности
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public virtual string[] GetStringRepresention()
|
||||
{
|
||||
return new string[] { nameof(EntityBaseLocomotive), Speed.ToString(), Weight.ToString(), BodyColor.Name.ToString() };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание объекта из массива строк
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
/// <returns></returns>
|
||||
public static EntityBaseLocomotive? CreateEntityBaseLocomotive(string[] args)
|
||||
{
|
||||
if (args.Length == 0 || args[0] != nameof(EntityBaseLocomotive)) return null;
|
||||
|
||||
return new EntityBaseLocomotive(Convert.ToInt32(args[1]), Convert.ToDouble(args[2]), Color.FromName(args[3]));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
using LocomativeProject.Entities;
|
||||
|
||||
namespace LocomotiveProject.Entities
|
||||
{
|
||||
public class EntityLocomotive : EntityBaseLocomotive
|
||||
{
|
||||
/// <summary>
|
||||
/// Дополнительный цвет
|
||||
/// </summary>
|
||||
public Color AdditionalColor { get; private set; }
|
||||
/// <summary>
|
||||
/// Задать доп цвет
|
||||
/// </summary>
|
||||
/// <param name="color"></param>
|
||||
public void setAdditionalColor(Color color) { AdditionalColor = color; }
|
||||
/// <summary>
|
||||
/// Признак (опция) наличие трубы
|
||||
/// </summary>
|
||||
public bool ExehaustPipe { get; private set; }
|
||||
/// <summary>
|
||||
/// Признак (опция) наличие топливного отсека
|
||||
/// </summary>
|
||||
public bool FuelCompartment { get; private set; }
|
||||
/// <summary>
|
||||
/// Конструктор сущности
|
||||
/// </summary>
|
||||
/// <param name="speed">Скорость</param>
|
||||
/// <param name="weight">Вес тепловоза</param>
|
||||
/// <param name="bodyColor">Основной цвет</param>
|
||||
/// <param name="additionalColor">Дополнительный цвет</param>
|
||||
/// <param name="exehaustPipe">Признак наличия трубы</param>
|
||||
/// <param name="fuelCompartment">Признак наличия топливного отсека</param>
|
||||
public EntityLocomotive(int speed, double weight, Color bodyColor, Color additionalColor, bool exehaustPipe, bool fuelCompartment) : base(speed, weight, bodyColor)
|
||||
{
|
||||
AdditionalColor = additionalColor;
|
||||
ExehaustPipe = exehaustPipe;
|
||||
FuelCompartment = fuelCompartment;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение строк с значениями свойств объекта класса-сущности
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override string[] GetStringRepresention()
|
||||
{
|
||||
return new string[] { nameof(EntityLocomotive), Speed.ToString(), Weight.ToString(), BodyColor.Name.ToString(), AdditionalColor.Name.ToString(), FuelCompartment.ToString(), ExehaustPipe.ToString() };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание объекта из массива строк
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
/// <returns></returns>
|
||||
public static EntityLocomotive? CreateEntityLocomotive(string[] args)
|
||||
{
|
||||
if (args.Length == 0 || args[0] != nameof(EntityLocomotive)) return null;
|
||||
|
||||
return new EntityLocomotive(Convert.ToInt32(args[1]), Convert.ToDouble(args[2]), Color.FromName(args[3]), Color.FromName(args[4]), Convert.ToBoolean(args[5]), Convert.ToBoolean(args[6]));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace LocomativeProject.Exceptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс, описывающий ошибку переполнения коллекции
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
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) { }
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace LocomativeProject.Exceptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс, описывающий ошибку, что файл пустой
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class FileDoesNotExistException : ApplicationException
|
||||
{
|
||||
public FileDoesNotExistException() : base() { }
|
||||
public FileDoesNotExistException(string message) : base(message) { }
|
||||
public FileDoesNotExistException(string message, Exception exception) : base(message, exception) { }
|
||||
protected FileDoesNotExistException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace LocomativeProject.Exceptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс, описывающий ошибку, что по указанной позиции нет элемента
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class FileEmptyException : ApplicationException
|
||||
{
|
||||
public FileEmptyException() : base() { }
|
||||
public FileEmptyException(string message) : base(message) { }
|
||||
public FileEmptyException(string message, Exception exception) : base(message, exception) { }
|
||||
protected FileEmptyException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace LocomativeProject.Exceptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс, описывающий ошибку, что по указанной позиции нет элемента
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
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) { }
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace LocomativeProject.Exceptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс, описывающий ошибку выхода за границы коллекции
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public 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
LocomativeProject/LocomativeProject/Form1.Designer.cs
generated
Normal file
39
LocomativeProject/LocomativeProject/Form1.Designer.cs
generated
Normal file
@ -0,0 +1,39 @@
|
||||
namespace LocomativeProject
|
||||
{
|
||||
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
|
||||
}
|
||||
}
|
10
LocomativeProject/LocomativeProject/Form1.cs
Normal file
10
LocomativeProject/LocomativeProject/Form1.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace LocomativeProject
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
@ -117,8 +117,4 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="up-arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\up-arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
@ -1,356 +0,0 @@
|
||||
namespace LocomotiveProject
|
||||
{
|
||||
partial class FormLocomotiveCollection
|
||||
{
|
||||
/// <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();
|
||||
buttonAddMonorail = new Button();
|
||||
maskedTextBox = new MaskedTextBox();
|
||||
buttonRefresh = new Button();
|
||||
buttonRemoveMonorail = new Button();
|
||||
buttonGoToCheck = new Button();
|
||||
buttonCreateCompany = new Button();
|
||||
panelStorage = new Panel();
|
||||
buttonCollectionDelete = 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();
|
||||
menuStrip = new MenuStrip();
|
||||
файлToolStripMenuItem = new ToolStripMenuItem();
|
||||
saveToolStripMenuItem = new ToolStripMenuItem();
|
||||
loadToolStripMenuItem = new ToolStripMenuItem();
|
||||
saveFileDialog = new SaveFileDialog();
|
||||
openFileDialog = 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(970, 24);
|
||||
groupBoxTools.Name = "groupBoxTools";
|
||||
groupBoxTools.Size = new Size(241, 638);
|
||||
groupBoxTools.TabIndex = 0;
|
||||
groupBoxTools.TabStop = false;
|
||||
groupBoxTools.Text = "Инструменты";
|
||||
//
|
||||
// panelCompanyTools
|
||||
//
|
||||
panelCompanyTools.Controls.Add(buttonAddMonorail);
|
||||
panelCompanyTools.Controls.Add(maskedTextBox);
|
||||
panelCompanyTools.Controls.Add(buttonRefresh);
|
||||
panelCompanyTools.Controls.Add(buttonRemoveMonorail);
|
||||
panelCompanyTools.Controls.Add(buttonGoToCheck);
|
||||
panelCompanyTools.Dock = DockStyle.Bottom;
|
||||
panelCompanyTools.Enabled = false;
|
||||
panelCompanyTools.Location = new Point(3, 313);
|
||||
panelCompanyTools.Margin = new Padding(3, 2, 3, 2);
|
||||
panelCompanyTools.Name = "panelCompanyTools";
|
||||
panelCompanyTools.Size = new Size(235, 322);
|
||||
panelCompanyTools.TabIndex = 8;
|
||||
//
|
||||
// buttonAddMonorail
|
||||
//
|
||||
buttonAddMonorail.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonAddMonorail.Location = new Point(8, 32);
|
||||
buttonAddMonorail.Name = "buttonAddMonorail";
|
||||
buttonAddMonorail.RightToLeft = RightToLeft.Yes;
|
||||
buttonAddMonorail.Size = new Size(221, 48);
|
||||
buttonAddMonorail.TabIndex = 1;
|
||||
buttonAddMonorail.Text = "Добавление локомотива";
|
||||
buttonAddMonorail.UseVisualStyleBackColor = true;
|
||||
buttonAddMonorail.Click += ButtonAddLocomotive_Click;
|
||||
//
|
||||
// maskedTextBox
|
||||
//
|
||||
maskedTextBox.Location = new Point(5, 130);
|
||||
maskedTextBox.Mask = "00";
|
||||
maskedTextBox.Name = "maskedTextBox";
|
||||
maskedTextBox.Size = new Size(223, 23);
|
||||
maskedTextBox.TabIndex = 3;
|
||||
maskedTextBox.ValidatingType = typeof(int);
|
||||
//
|
||||
// buttonRefresh
|
||||
//
|
||||
buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonRefresh.Location = new Point(8, 267);
|
||||
buttonRefresh.Name = "buttonRefresh";
|
||||
buttonRefresh.Size = new Size(219, 48);
|
||||
buttonRefresh.TabIndex = 6;
|
||||
buttonRefresh.Text = "Обновить";
|
||||
buttonRefresh.UseVisualStyleBackColor = true;
|
||||
buttonRefresh.Click += ButtonRefresh_Click;
|
||||
//
|
||||
// buttonRemoveMonorail
|
||||
//
|
||||
buttonRemoveMonorail.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonRemoveMonorail.Location = new Point(8, 159);
|
||||
buttonRemoveMonorail.Name = "buttonRemoveMonorail";
|
||||
buttonRemoveMonorail.Size = new Size(221, 48);
|
||||
buttonRemoveMonorail.TabIndex = 4;
|
||||
buttonRemoveMonorail.Text = "Удалить локомотив";
|
||||
buttonRemoveMonorail.UseVisualStyleBackColor = true;
|
||||
buttonRemoveMonorail.Click += buttonRemoveLocomotive_Click;
|
||||
//
|
||||
// buttonGoToCheck
|
||||
//
|
||||
buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonGoToCheck.Location = new Point(8, 213);
|
||||
buttonGoToCheck.Name = "buttonGoToCheck";
|
||||
buttonGoToCheck.Size = new Size(220, 48);
|
||||
buttonGoToCheck.TabIndex = 5;
|
||||
buttonGoToCheck.Text = "Передать на тесты";
|
||||
buttonGoToCheck.UseVisualStyleBackColor = true;
|
||||
buttonGoToCheck.Click += ButtonGoToCheck_Click;
|
||||
//
|
||||
// buttonCreateCompany
|
||||
//
|
||||
buttonCreateCompany.Location = new Point(6, 291);
|
||||
buttonCreateCompany.Margin = new Padding(3, 2, 3, 2);
|
||||
buttonCreateCompany.Name = "buttonCreateCompany";
|
||||
buttonCreateCompany.Size = new Size(222, 22);
|
||||
buttonCreateCompany.TabIndex = 7;
|
||||
buttonCreateCompany.Text = "Создать компанию";
|
||||
buttonCreateCompany.UseVisualStyleBackColor = true;
|
||||
buttonCreateCompany.Click += ButtonCreateCompany_Click;
|
||||
//
|
||||
// panelStorage
|
||||
//
|
||||
panelStorage.Controls.Add(buttonCollectionDelete);
|
||||
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.Margin = new Padding(3, 2, 3, 2);
|
||||
panelStorage.Name = "panelStorage";
|
||||
panelStorage.Size = new Size(235, 242);
|
||||
panelStorage.TabIndex = 7;
|
||||
//
|
||||
// buttonCollectionDelete
|
||||
//
|
||||
buttonCollectionDelete.Location = new Point(5, 206);
|
||||
buttonCollectionDelete.Margin = new Padding(3, 2, 3, 2);
|
||||
buttonCollectionDelete.Name = "buttonCollectionDelete";
|
||||
buttonCollectionDelete.Size = new Size(222, 22);
|
||||
buttonCollectionDelete.TabIndex = 6;
|
||||
buttonCollectionDelete.Text = "Удалить коллекцию";
|
||||
buttonCollectionDelete.UseVisualStyleBackColor = true;
|
||||
buttonCollectionDelete.Click += ButtonCollectionDelete_Click;
|
||||
//
|
||||
// listBoxCollection
|
||||
//
|
||||
listBoxCollection.FormattingEnabled = true;
|
||||
listBoxCollection.ItemHeight = 15;
|
||||
listBoxCollection.Location = new Point(5, 123);
|
||||
listBoxCollection.Margin = new Padding(3, 2, 3, 2);
|
||||
listBoxCollection.Name = "listBoxCollection";
|
||||
listBoxCollection.Size = new Size(223, 79);
|
||||
listBoxCollection.TabIndex = 5;
|
||||
//
|
||||
// buttonCollectionAdd
|
||||
//
|
||||
buttonCollectionAdd.Location = new Point(5, 97);
|
||||
buttonCollectionAdd.Margin = new Padding(3, 2, 3, 2);
|
||||
buttonCollectionAdd.Name = "buttonCollectionAdd";
|
||||
buttonCollectionAdd.Size = new Size(222, 22);
|
||||
buttonCollectionAdd.TabIndex = 4;
|
||||
buttonCollectionAdd.Text = "Добавить коллекцию";
|
||||
buttonCollectionAdd.UseVisualStyleBackColor = true;
|
||||
buttonCollectionAdd.Click += ButtonCollectionAdd_Click;
|
||||
//
|
||||
// radioButtonList
|
||||
//
|
||||
radioButtonList.AutoSize = true;
|
||||
radioButtonList.Location = new Point(113, 67);
|
||||
radioButtonList.Margin = new Padding(3, 2, 3, 2);
|
||||
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(20, 67);
|
||||
radioButtonMassive.Margin = new Padding(3, 2, 3, 2);
|
||||
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(5, 28);
|
||||
textBoxCollectionName.Margin = new Padding(3, 2, 3, 2);
|
||||
textBoxCollectionName.Name = "textBoxCollectionName";
|
||||
textBoxCollectionName.Size = new Size(223, 23);
|
||||
textBoxCollectionName.TabIndex = 1;
|
||||
//
|
||||
// labelCollectionName
|
||||
//
|
||||
labelCollectionName.AutoSize = true;
|
||||
labelCollectionName.Location = new Point(47, 10);
|
||||
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(3, 265);
|
||||
comboBoxSelectorCompany.Name = "comboBoxSelectorCompany";
|
||||
comboBoxSelectorCompany.Size = new Size(229, 23);
|
||||
comboBoxSelectorCompany.TabIndex = 0;
|
||||
comboBoxSelectorCompany.SelectedIndexChanged += ComboBoxSelectorCompany_SelectedIndexChanged;
|
||||
//
|
||||
// pictureBox
|
||||
//
|
||||
pictureBox.Dock = DockStyle.Fill;
|
||||
pictureBox.Location = new Point(0, 24);
|
||||
pictureBox.Name = "pictureBox";
|
||||
pictureBox.Size = new Size(970, 638);
|
||||
pictureBox.TabIndex = 1;
|
||||
pictureBox.TabStop = false;
|
||||
//
|
||||
// menuStrip
|
||||
//
|
||||
menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem });
|
||||
menuStrip.Location = new Point(0, 0);
|
||||
menuStrip.Name = "menuStrip";
|
||||
menuStrip.Size = new Size(1211, 24);
|
||||
menuStrip.TabIndex = 2;
|
||||
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.ShortcutKeys = Keys.Control | Keys.S;
|
||||
saveToolStripMenuItem.Size = new Size(184, 22);
|
||||
saveToolStripMenuItem.Text = "Сохранение ";
|
||||
saveToolStripMenuItem.Click += SaveToolStripMenuItem_Click;
|
||||
//
|
||||
// loadToolStripMenuItem
|
||||
//
|
||||
loadToolStripMenuItem.Name = "loadToolStripMenuItem";
|
||||
loadToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.L;
|
||||
loadToolStripMenuItem.Size = new Size(184, 22);
|
||||
loadToolStripMenuItem.Text = "Загрузка";
|
||||
loadToolStripMenuItem.Click += LoadToolStripMenuItem_Click;
|
||||
//
|
||||
// saveFileDialog
|
||||
//
|
||||
saveFileDialog.Filter = "txt file | *.txt";
|
||||
//
|
||||
// openFileDialog
|
||||
//
|
||||
openFileDialog.Filter = "txt file | *.txt";
|
||||
//
|
||||
// FormLocomotiveCollection
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(1211, 662);
|
||||
Controls.Add(pictureBox);
|
||||
Controls.Add(groupBoxTools);
|
||||
Controls.Add(menuStrip);
|
||||
MainMenuStrip = menuStrip;
|
||||
Name = "FormLocomotiveCollection";
|
||||
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 buttonRemoveMonorail;
|
||||
private MaskedTextBox maskedTextBox;
|
||||
private Button buttonAddMonorail;
|
||||
private PictureBox pictureBox;
|
||||
private Button buttonGoToCheck;
|
||||
private Button buttonRefresh;
|
||||
private Panel panelStorage;
|
||||
private Label labelCollectionName;
|
||||
private TextBox textBoxCollectionName;
|
||||
private Button buttonCollectionAdd;
|
||||
private RadioButton radioButtonList;
|
||||
private RadioButton radioButtonMassive;
|
||||
private Button buttonCollectionDelete;
|
||||
private ListBox listBoxCollection;
|
||||
private Button buttonCreateCompany;
|
||||
private Panel panelCompanyTools;
|
||||
private MenuStrip menuStrip;
|
||||
private ToolStripMenuItem файлToolStripMenuItem;
|
||||
private ToolStripMenuItem saveToolStripMenuItem;
|
||||
private ToolStripMenuItem loadToolStripMenuItem;
|
||||
private SaveFileDialog saveFileDialog;
|
||||
private OpenFileDialog openFileDialog;
|
||||
}
|
||||
}
|
@ -1,321 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomativeProject.Exceptions;
|
||||
using LocomotiveProject.CollectionGenericObjects;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace LocomotiveProject
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public partial class FormLocomotiveCollection : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Хранилище коллекций
|
||||
/// </summary>
|
||||
private readonly StorageCollection<DrawningBaseLocomotive> _storageCollection;
|
||||
|
||||
/// <summary>
|
||||
/// Логер
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Компания
|
||||
/// </summary>
|
||||
private AbstractCompany? _company = null;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public FormLocomotiveCollection(ILogger<FormLocomotiveCollection> logger)
|
||||
{
|
||||
InitializeComponent();
|
||||
_storageCollection = new StorageCollection<DrawningBaseLocomotive>();
|
||||
_logger = logger;
|
||||
_logger.LogInformation("Форма загрузилась");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ComboBoxSelectorCompany_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
switch (comboBoxSelectorCompany.Text)
|
||||
{
|
||||
case "Хранилище":
|
||||
_company = new LocomotiveSharingService(pictureBox.Width, pictureBox.Height, new MassiveGenericObjects<DrawningBaseLocomotive>());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonAddLocomotive_Click(object sender, EventArgs e)
|
||||
{
|
||||
FormLocomotiveConfig form = new FormLocomotiveConfig();
|
||||
form.Show();
|
||||
form.AddEventListener_Locomotive(SetLocomotive);
|
||||
}
|
||||
|
||||
private void SetLocomotive(DrawningBaseLocomotive locomotive)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (locomotive == null || _company == null) return;
|
||||
|
||||
if (_company + locomotive != -1)
|
||||
{
|
||||
MessageBox.Show("Объект добавлен");
|
||||
pictureBox.Image = _company.Show();
|
||||
_logger.LogInformation("Объект добавлен");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Не удалось добавить объект");
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void LogException(Exception ex)
|
||||
{
|
||||
if (ex is CollectionOverflowException)
|
||||
{
|
||||
_logger.LogError("Ошибка {Message}", ((CollectionOverflowException)ex).Message);
|
||||
}
|
||||
else if (ex is FileEmptyException)
|
||||
{
|
||||
_logger.LogError("Ошибка {Message}", ((FileEmptyException)ex).Message);
|
||||
}
|
||||
else if (ex is FileDoesNotExistException)
|
||||
{
|
||||
_logger.LogError("Ошибка {Message}", ((FileDoesNotExistException)ex).Message);
|
||||
}
|
||||
else if (ex is ObjectNotFoundException)
|
||||
{
|
||||
_logger.LogError("Ошибка {Message}", ((ObjectNotFoundException)ex).Message);
|
||||
}
|
||||
else if (ex is PositionOutOfCollectionException)
|
||||
{
|
||||
_logger.LogError("Ошибка {Message}", ((PositionOutOfCollectionException)ex).Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogError("Ошибка {Message}", ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonRemoveLocomotive_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) throw new Exception("Входные дынне пустые");
|
||||
|
||||
if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
|
||||
|
||||
int position = Convert.ToInt32(maskedTextBox.Text);
|
||||
|
||||
if (_company - position != null)
|
||||
{
|
||||
MessageBox.Show("Объект удален");
|
||||
pictureBox.Image = _company.Show();
|
||||
_logger.LogInformation("Объект удален");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Не удалось удалить объект");
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonGoToCheck_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_company == null) return;
|
||||
|
||||
DrawningBaseLocomotive? Locomotive = null;
|
||||
int coutner = 100;
|
||||
|
||||
while (Locomotive == null && coutner-- > 0)
|
||||
{
|
||||
Locomotive = _company.GetRandomObject();
|
||||
}
|
||||
|
||||
if (Locomotive == null) return;
|
||||
|
||||
LocomotiveProjectForm form = new LocomotiveProjectForm()
|
||||
{
|
||||
SetLocomotive = Locomotive
|
||||
};
|
||||
form.ShowDialog();
|
||||
}
|
||||
|
||||
private void ButtonRefresh_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_company == null) return;
|
||||
pictureBox.Image = _company.Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обновление списка в listBoxCollection
|
||||
/// </summary>
|
||||
private void RerfreshListBoxItems()
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление коллекции
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonCollectionAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked))
|
||||
{
|
||||
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
throw new Exception("Не все данные заполнены");
|
||||
}
|
||||
CollectionType collectionType = CollectionType.None;
|
||||
if (radioButtonMassive.Checked)
|
||||
{
|
||||
collectionType = CollectionType.Massive;
|
||||
}
|
||||
else if (radioButtonList.Checked)
|
||||
{
|
||||
collectionType = CollectionType.List;
|
||||
}
|
||||
_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType);
|
||||
_logger.LogInformation("Коллекция добавлена " + textBoxCollectionName.Text);
|
||||
RerfreshListBoxItems();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Удаление коллекции
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonCollectionDelete_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
// TODO прописать логику удаления элемента из коллекции
|
||||
// нужно убедиться, что есть выбранная коллекция
|
||||
// спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись
|
||||
// удалить и обновить ListBox
|
||||
if (listBoxCollection.SelectedItem == null || listBoxCollection.SelectedIndex < 0)
|
||||
{
|
||||
MessageBox.Show("Коллекция для удаления не выбрана");
|
||||
return;
|
||||
}
|
||||
if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
|
||||
_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString());
|
||||
_logger.LogInformation("Коллекция с название: " + listBoxCollection.SelectedItem.ToString() + " удалена");
|
||||
RerfreshListBoxItems();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создание компании
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonCreateCompany_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null)
|
||||
{
|
||||
MessageBox.Show("Коллекция не выбрана");
|
||||
throw new Exception("Коллекция не выбрана");
|
||||
}
|
||||
ICollectionGenericObjects<DrawningBaseLocomotive>? collection =
|
||||
_storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty];
|
||||
if (collection == null)
|
||||
{
|
||||
MessageBox.Show("Коллекция не проинициализирована");
|
||||
throw new Exception("Коллекция не проинициализирована");
|
||||
}
|
||||
switch (comboBoxSelectorCompany.Text)
|
||||
{
|
||||
case "Хранилище":
|
||||
_company = new LocomotiveSharingService(pictureBox.Width, pictureBox.Height, collection);
|
||||
break;
|
||||
}
|
||||
panelCompanyTools.Enabled = true;
|
||||
RerfreshListBoxItems();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработка нажатия "Сохранения"
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void SaveToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
_storageCollection.SaveData(saveFileDialog.FileName);
|
||||
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
_logger.LogInformation("Сохранение прошло успешно в файл {filename}", saveFileDialog.FileName);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработка нажатия "Загрузки"
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void LoadToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
_storageCollection.LoadData(openFileDialog.FileName);
|
||||
MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
RerfreshListBoxItems();
|
||||
_logger.LogInformation("Загрузка успешна завершена");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,129 +0,0 @@
|
||||
<?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="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>126, 17</value>
|
||||
</metadata>
|
||||
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>261, 17</value>
|
||||
</metadata>
|
||||
</root>
|
@ -1,353 +0,0 @@
|
||||
namespace LocomotiveProject
|
||||
{
|
||||
partial class FormLocomotiveConfig
|
||||
{
|
||||
/// <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();
|
||||
panelYellow = new Panel();
|
||||
panelBlack = new Panel();
|
||||
panelBlue = new Panel();
|
||||
panelGray = new Panel();
|
||||
panelRed = new Panel();
|
||||
panelGreen = new Panel();
|
||||
panelWhite = new Panel();
|
||||
checkBoxHelipad = new CheckBox();
|
||||
checkBoxRocketMine = new CheckBox();
|
||||
numericUpDownWeight = new NumericUpDown();
|
||||
labelWeight = new Label();
|
||||
numericUpDownSpeed = new NumericUpDown();
|
||||
labelSpeed = new Label();
|
||||
labelModifiedObject = new Label();
|
||||
labelSimpleObject = new Label();
|
||||
pictureBoxObject = new PictureBox();
|
||||
buttonAdd = new Button();
|
||||
buttonCancel = new Button();
|
||||
panelObject = new Panel();
|
||||
labelAdditionalColor = new Label();
|
||||
labelBodyColor = new Label();
|
||||
groupBoxConfig.SuspendLayout();
|
||||
groupBoxColors.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxObject).BeginInit();
|
||||
panelObject.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// groupBoxConfig
|
||||
//
|
||||
groupBoxConfig.Controls.Add(groupBoxColors);
|
||||
groupBoxConfig.Controls.Add(checkBoxHelipad);
|
||||
groupBoxConfig.Controls.Add(checkBoxRocketMine);
|
||||
groupBoxConfig.Controls.Add(numericUpDownWeight);
|
||||
groupBoxConfig.Controls.Add(labelWeight);
|
||||
groupBoxConfig.Controls.Add(numericUpDownSpeed);
|
||||
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(581, 213);
|
||||
groupBoxConfig.TabIndex = 0;
|
||||
groupBoxConfig.TabStop = false;
|
||||
groupBoxConfig.Text = "Параметры";
|
||||
//
|
||||
// groupBoxColors
|
||||
//
|
||||
groupBoxColors.Controls.Add(panelPurple);
|
||||
groupBoxColors.Controls.Add(panelYellow);
|
||||
groupBoxColors.Controls.Add(panelBlack);
|
||||
groupBoxColors.Controls.Add(panelBlue);
|
||||
groupBoxColors.Controls.Add(panelGray);
|
||||
groupBoxColors.Controls.Add(panelRed);
|
||||
groupBoxColors.Controls.Add(panelGreen);
|
||||
groupBoxColors.Controls.Add(panelWhite);
|
||||
groupBoxColors.Location = new Point(402, 44);
|
||||
groupBoxColors.Name = "groupBoxColors";
|
||||
groupBoxColors.Size = new Size(142, 109);
|
||||
groupBoxColors.TabIndex = 8;
|
||||
groupBoxColors.TabStop = false;
|
||||
groupBoxColors.Text = "Цвета";
|
||||
//
|
||||
// panelPurple
|
||||
//
|
||||
panelPurple.BackColor = Color.Purple;
|
||||
panelPurple.Location = new Point(102, 67);
|
||||
panelPurple.Name = "panelPurple";
|
||||
panelPurple.Size = new Size(26, 27);
|
||||
panelPurple.TabIndex = 1;
|
||||
//
|
||||
// panelYellow
|
||||
//
|
||||
panelYellow.BackColor = Color.Yellow;
|
||||
panelYellow.Location = new Point(102, 22);
|
||||
panelYellow.Name = "panelYellow";
|
||||
panelYellow.Size = new Size(26, 27);
|
||||
panelYellow.TabIndex = 1;
|
||||
//
|
||||
// panelBlack
|
||||
//
|
||||
panelBlack.BackColor = Color.Black;
|
||||
panelBlack.Location = new Point(70, 67);
|
||||
panelBlack.Name = "panelBlack";
|
||||
panelBlack.Size = new Size(26, 27);
|
||||
panelBlack.TabIndex = 1;
|
||||
//
|
||||
// panelBlue
|
||||
//
|
||||
panelBlue.BackColor = Color.Blue;
|
||||
panelBlue.Location = new Point(70, 22);
|
||||
panelBlue.Name = "panelBlue";
|
||||
panelBlue.Size = new Size(26, 27);
|
||||
panelBlue.TabIndex = 1;
|
||||
//
|
||||
// panelGray
|
||||
//
|
||||
panelGray.BackColor = Color.Gray;
|
||||
panelGray.Location = new Point(38, 67);
|
||||
panelGray.Name = "panelGray";
|
||||
panelGray.Size = new Size(26, 27);
|
||||
panelGray.TabIndex = 1;
|
||||
//
|
||||
// panelRed
|
||||
//
|
||||
panelRed.BackColor = Color.Red;
|
||||
panelRed.Location = new Point(6, 22);
|
||||
panelRed.Name = "panelRed";
|
||||
panelRed.Size = new Size(26, 27);
|
||||
panelRed.TabIndex = 1;
|
||||
//
|
||||
// panelGreen
|
||||
//
|
||||
panelGreen.BackColor = Color.Green;
|
||||
panelGreen.Location = new Point(38, 22);
|
||||
panelGreen.Name = "panelGreen";
|
||||
panelGreen.Size = new Size(26, 27);
|
||||
panelGreen.TabIndex = 1;
|
||||
//
|
||||
// panelWhite
|
||||
//
|
||||
panelWhite.BackColor = Color.White;
|
||||
panelWhite.Location = new Point(6, 67);
|
||||
panelWhite.Name = "panelWhite";
|
||||
panelWhite.Size = new Size(26, 27);
|
||||
panelWhite.TabIndex = 0;
|
||||
//
|
||||
// checkBoxHelipad
|
||||
//
|
||||
checkBoxHelipad.AutoSize = true;
|
||||
checkBoxHelipad.Location = new Point(6, 119);
|
||||
checkBoxHelipad.Name = "checkBoxHelipad";
|
||||
checkBoxHelipad.Size = new Size(230, 19);
|
||||
checkBoxHelipad.TabIndex = 7;
|
||||
checkBoxHelipad.Text = "Признак наличия топливного отсека";
|
||||
checkBoxHelipad.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoxRocketMine
|
||||
//
|
||||
checkBoxRocketMine.AutoSize = true;
|
||||
checkBoxRocketMine.Location = new Point(6, 94);
|
||||
checkBoxRocketMine.Name = "checkBoxRocketMine";
|
||||
checkBoxRocketMine.Size = new Size(226, 19);
|
||||
checkBoxRocketMine.TabIndex = 6;
|
||||
checkBoxRocketMine.Text = "Признак наличия выхлопной трубы";
|
||||
checkBoxRocketMine.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// numericUpDownWeight
|
||||
//
|
||||
numericUpDownWeight.Location = new Point(76, 55);
|
||||
numericUpDownWeight.Name = "numericUpDownWeight";
|
||||
numericUpDownWeight.Size = new Size(97, 23);
|
||||
numericUpDownWeight.TabIndex = 5;
|
||||
numericUpDownWeight.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||
//
|
||||
// labelWeight
|
||||
//
|
||||
labelWeight.AutoSize = true;
|
||||
labelWeight.Location = new Point(27, 57);
|
||||
labelWeight.Name = "labelWeight";
|
||||
labelWeight.Size = new Size(26, 15);
|
||||
labelWeight.TabIndex = 4;
|
||||
labelWeight.Text = "Вес";
|
||||
//
|
||||
// numericUpDownSpeed
|
||||
//
|
||||
numericUpDownSpeed.Location = new Point(76, 22);
|
||||
numericUpDownSpeed.Name = "numericUpDownSpeed";
|
||||
numericUpDownSpeed.Size = new Size(97, 23);
|
||||
numericUpDownSpeed.TabIndex = 3;
|
||||
numericUpDownSpeed.Value = new decimal(new int[] { 100, 0, 0, 0 });
|
||||
//
|
||||
// labelSpeed
|
||||
//
|
||||
labelSpeed.AutoSize = true;
|
||||
labelSpeed.Location = new Point(11, 24);
|
||||
labelSpeed.Name = "labelSpeed";
|
||||
labelSpeed.Size = new Size(59, 15);
|
||||
labelSpeed.TabIndex = 2;
|
||||
labelSpeed.Text = "Скорость";
|
||||
//
|
||||
// labelModifiedObject
|
||||
//
|
||||
labelModifiedObject.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelModifiedObject.Location = new Point(475, 181);
|
||||
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(369, 181);
|
||||
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(3, 33);
|
||||
pictureBoxObject.Name = "pictureBoxObject";
|
||||
pictureBoxObject.Size = new Size(198, 125);
|
||||
pictureBoxObject.TabIndex = 1;
|
||||
pictureBoxObject.TabStop = false;
|
||||
//
|
||||
// buttonAdd
|
||||
//
|
||||
buttonAdd.Location = new Point(604, 178);
|
||||
buttonAdd.Name = "buttonAdd";
|
||||
buttonAdd.Size = new Size(75, 23);
|
||||
buttonAdd.TabIndex = 2;
|
||||
buttonAdd.Text = "Добавить";
|
||||
buttonAdd.UseVisualStyleBackColor = true;
|
||||
buttonAdd.Click += ButtonAdd_Click;
|
||||
//
|
||||
// buttonCancel
|
||||
//
|
||||
buttonCancel.Location = new Point(713, 178);
|
||||
buttonCancel.Name = "buttonCancel";
|
||||
buttonCancel.Size = new Size(75, 23);
|
||||
buttonCancel.TabIndex = 3;
|
||||
buttonCancel.Text = "Отменить";
|
||||
buttonCancel.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panelObject
|
||||
//
|
||||
panelObject.AllowDrop = true;
|
||||
panelObject.Controls.Add(labelAdditionalColor);
|
||||
panelObject.Controls.Add(labelBodyColor);
|
||||
panelObject.Controls.Add(pictureBoxObject);
|
||||
panelObject.Location = new Point(587, 11);
|
||||
panelObject.Name = "panelObject";
|
||||
panelObject.Size = new Size(205, 161);
|
||||
panelObject.TabIndex = 4;
|
||||
panelObject.DragDrop += PanelObject_DragDrop;
|
||||
panelObject.DragEnter += PanelObject_DragEnter;
|
||||
//
|
||||
// labelAdditionalColor
|
||||
//
|
||||
labelAdditionalColor.AllowDrop = true;
|
||||
labelAdditionalColor.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelAdditionalColor.Location = new Point(133, 5);
|
||||
labelAdditionalColor.Name = "labelAdditionalColor";
|
||||
labelAdditionalColor.Size = new Size(69, 23);
|
||||
labelAdditionalColor.TabIndex = 3;
|
||||
labelAdditionalColor.Text = "Доп.Цвет";
|
||||
labelAdditionalColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelAdditionalColor.DragDrop += LabelAdditionalColor_DragDrop;
|
||||
labelAdditionalColor.DragEnter += LabelAdditionalColor_DragEnter;
|
||||
//
|
||||
// labelBodyColor
|
||||
//
|
||||
labelBodyColor.AllowDrop = true;
|
||||
labelBodyColor.BorderStyle = BorderStyle.FixedSingle;
|
||||
labelBodyColor.Location = new Point(3, 5);
|
||||
labelBodyColor.Name = "labelBodyColor";
|
||||
labelBodyColor.Size = new Size(69, 23);
|
||||
labelBodyColor.TabIndex = 2;
|
||||
labelBodyColor.Text = "Цвет";
|
||||
labelBodyColor.TextAlign = ContentAlignment.MiddleCenter;
|
||||
labelBodyColor.DragDrop += LabelBodyColor_DragDrop;
|
||||
labelBodyColor.DragEnter += LabelBodyColor_DragEnter;
|
||||
//
|
||||
// FormLocomotiveConfig
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(800, 213);
|
||||
Controls.Add(panelObject);
|
||||
Controls.Add(buttonCancel);
|
||||
Controls.Add(buttonAdd);
|
||||
Controls.Add(groupBoxConfig);
|
||||
Name = "FormLocomotiveConfig";
|
||||
Text = "Создание объекта";
|
||||
groupBoxConfig.ResumeLayout(false);
|
||||
groupBoxConfig.PerformLayout();
|
||||
groupBoxColors.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownWeight).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericUpDownSpeed).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxObject).EndInit();
|
||||
panelObject.ResumeLayout(false);
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private GroupBox groupBoxConfig;
|
||||
private Label labelModifiedObject;
|
||||
private Label labelSimpleObject;
|
||||
private CheckBox checkBoxRocketMine;
|
||||
private NumericUpDown numericUpDownWeight;
|
||||
private Label labelWeight;
|
||||
private NumericUpDown numericUpDownSpeed;
|
||||
private Label labelSpeed;
|
||||
private CheckBox checkBoxHelipad;
|
||||
private GroupBox groupBoxColors;
|
||||
private Panel panelPurple;
|
||||
private Panel panelYellow;
|
||||
private Panel panelBlack;
|
||||
private Panel panelBlue;
|
||||
private Panel panelGray;
|
||||
private Panel panelRed;
|
||||
private Panel panelGreen;
|
||||
private Panel panelWhite;
|
||||
private PictureBox pictureBoxObject;
|
||||
private Button buttonAdd;
|
||||
private Button buttonCancel;
|
||||
private Panel panelObject;
|
||||
private Label labelAdditionalColor;
|
||||
private Label labelBodyColor;
|
||||
}
|
||||
}
|
@ -1,178 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomotiveProject.Drawnings;
|
||||
using LocomotiveProject.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;
|
||||
|
||||
namespace LocomotiveProject;
|
||||
/// <summary>
|
||||
/// Форма конфигурации объекта
|
||||
/// </summary>
|
||||
public partial class FormLocomotiveConfig : Form
|
||||
{
|
||||
#region Events & Delegates
|
||||
private event Action<DrawningBaseLocomotive> OnSendEvent_Locomotive;
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// объект - прорисовка локомотива
|
||||
/// </summary>
|
||||
private DrawningBaseLocomotive? _BaseLocomotive;
|
||||
/// <summary>
|
||||
/// событе для передачи объекта
|
||||
/// </summary>
|
||||
public event LocomotiveDelegate? _LocomotiveDelegate;
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
public FormLocomotiveConfig()
|
||||
{
|
||||
InitializeComponent();
|
||||
panelRed.MouseDown += Panel_MouseDown;
|
||||
panelGreen.MouseDown += Panel_MouseDown;
|
||||
panelBlue.MouseDown += Panel_MouseDown;
|
||||
panelYellow.MouseDown += Panel_MouseDown;
|
||||
panelGray.MouseDown += Panel_MouseDown;
|
||||
panelBlack.MouseDown += Panel_MouseDown;
|
||||
panelPurple.MouseDown += Panel_MouseDown;
|
||||
panelWhite.MouseDown += Panel_MouseDown;
|
||||
buttonCancel.Click += (sender, e) => Close();
|
||||
}
|
||||
|
||||
public void AddEventListener_Locomotive(Action<DrawningBaseLocomotive> method)
|
||||
{
|
||||
OnSendEvent_Locomotive += method;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// привязка метода к событию
|
||||
/// </summary>
|
||||
/// <param name="LocomotiveDelegate"></param>
|
||||
public void AddEvent(LocomotiveDelegate LocomotiveDelegate)
|
||||
{
|
||||
_LocomotiveDelegate += LocomotiveDelegate;
|
||||
}
|
||||
/// <summary>
|
||||
/// Прорисовка обьекта
|
||||
/// </summary>
|
||||
public void DrawObject()
|
||||
{
|
||||
Bitmap bmp = new(pictureBoxObject.Width, pictureBoxObject.Height);
|
||||
Graphics g = Graphics.FromImage(bmp);
|
||||
_BaseLocomotive?.SetPictureSize(pictureBoxObject.Width, pictureBoxObject.Height);
|
||||
_BaseLocomotive?.SetPosition(5, 5);
|
||||
_BaseLocomotive?.DrawTransport(g);
|
||||
pictureBoxObject.Image = bmp;
|
||||
}
|
||||
/// <summary>
|
||||
/// Передаем информацию при нажатии на Label
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void LabelObject_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
(sender as Label)?.DoDragDrop((sender as Label)?.Name ?? string.Empty, DragDropEffects.Move | DragDropEffects.Copy);
|
||||
}
|
||||
/// <summary>
|
||||
/// Действия при приеме перетаскиваемой информации
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void PanelObject_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (e.Data?.GetDataPresent(DataFormats.Text) ?? false)
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Проверка получаемой информации (ее типо на соответсие требуемому)
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void PanelObject_DragDrop(object? sender, DragEventArgs e)
|
||||
{
|
||||
switch (e.Data?.GetData(DataFormats.Text).ToString())
|
||||
{
|
||||
case "labelSimpleObject":
|
||||
_BaseLocomotive = new DrawningBaseLocomotive((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White);
|
||||
break;
|
||||
case "labelModifiedObject":
|
||||
_BaseLocomotive = new DrawningLocomotive((int)numericUpDownSpeed.Value, (double)numericUpDownWeight.Value, Color.White, Color.Black,
|
||||
checkBoxRocketMine.Checked, checkBoxHelipad.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 LabelBodyColor_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_BaseLocomotive != null)
|
||||
{
|
||||
_BaseLocomotive._EntityBaseLocomotive.setBodyColor((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_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_BaseLocomotive._EntityBaseLocomotive is EntityLocomotive entityLocomotive)
|
||||
{
|
||||
entityLocomotive.setAdditionalColor((Color)e.Data.GetData(typeof(Color)));
|
||||
}
|
||||
DrawObject();
|
||||
}
|
||||
|
||||
private void LabelAdditionalColor_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
if (_BaseLocomotive is DrawningBaseLocomotive)
|
||||
{
|
||||
if (e.Data.GetDataPresent(typeof(Color)))
|
||||
{
|
||||
e.Effect = DragDropEffects.Copy;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Передача объекта
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonAdd_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_BaseLocomotive != null) OnSendEvent_Locomotive?.Invoke(_BaseLocomotive);
|
||||
Close();
|
||||
}
|
||||
}
|
@ -1,120 +0,0 @@
|
||||
<?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>
|
11
LocomativeProject/LocomativeProject/LocomativeProject.csproj
Normal file
11
LocomativeProject/LocomativeProject/LocomativeProject.csproj
Normal file
@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
@ -1,13 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomotiveProject;
|
||||
/// <summary>
|
||||
/// Делегат передачи объекта класса-прорисовки
|
||||
/// </summary>
|
||||
/// <param name="Locomotive"></param>
|
||||
public delegate void LocomotiveDelegate(DrawningBaseLocomotive Locomotive);
|
@ -1,36 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net8.0-windows7.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.11" />
|
||||
<PackageReference Include="Serilog" Version="3.1.1" />
|
||||
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
||||
</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>
|
||||
|
||||
</Project>
|
@ -1,160 +0,0 @@
|
||||
namespace LocomotiveProject
|
||||
{
|
||||
partial class LocomotiveProjectForm
|
||||
{
|
||||
/// <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(LocomotiveProjectForm));
|
||||
pictureBox1 = new PictureBox();
|
||||
pictureBoxLocomotive = new PictureBox();
|
||||
buttonUp = new Button();
|
||||
buttonDown = new Button();
|
||||
buttonLeft = new Button();
|
||||
buttonRight = new Button();
|
||||
comboBox1 = new ComboBox();
|
||||
buttonStrategyStep = new Button();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).BeginInit();
|
||||
SuspendLayout();
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
pictureBox1.Location = new Point(0, 0);
|
||||
pictureBox1.Name = "pictureBox1";
|
||||
pictureBox1.Size = new Size(100, 50);
|
||||
pictureBox1.TabIndex = 0;
|
||||
pictureBox1.TabStop = false;
|
||||
//
|
||||
// pictureBoxLocomotive
|
||||
//
|
||||
pictureBoxLocomotive.Dock = DockStyle.Fill;
|
||||
pictureBoxLocomotive.Location = new Point(0, 0);
|
||||
pictureBoxLocomotive.Name = "pictureBoxLocomotive";
|
||||
pictureBoxLocomotive.Size = new Size(880, 561);
|
||||
pictureBoxLocomotive.TabIndex = 1;
|
||||
pictureBoxLocomotive.TabStop = false;
|
||||
//
|
||||
// buttonUp
|
||||
//
|
||||
buttonUp.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonUp.BackgroundImage = (Image)resources.GetObject("buttonUp.BackgroundImage");
|
||||
buttonUp.BackgroundImageLayout = ImageLayout.Stretch;
|
||||
buttonUp.Location = new Point(771, 473);
|
||||
buttonUp.Name = "buttonUp";
|
||||
buttonUp.Size = new Size(35, 35);
|
||||
buttonUp.TabIndex = 3;
|
||||
buttonUp.UseVisualStyleBackColor = true;
|
||||
buttonUp.Click += ButtonMove_Click;
|
||||
//
|
||||
// buttonDown
|
||||
//
|
||||
buttonDown.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonDown.BackgroundImage = (Image)resources.GetObject("buttonDown.BackgroundImage");
|
||||
buttonDown.BackgroundImageLayout = ImageLayout.Stretch;
|
||||
buttonDown.Location = new Point(771, 514);
|
||||
buttonDown.Name = "buttonDown";
|
||||
buttonDown.Size = new Size(35, 35);
|
||||
buttonDown.TabIndex = 4;
|
||||
buttonDown.UseVisualStyleBackColor = true;
|
||||
buttonDown.Click += ButtonMove_Click;
|
||||
//
|
||||
// buttonLeft
|
||||
//
|
||||
buttonLeft.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonLeft.BackgroundImage = (Image)resources.GetObject("buttonLeft.BackgroundImage");
|
||||
buttonLeft.BackgroundImageLayout = ImageLayout.Stretch;
|
||||
buttonLeft.Location = new Point(730, 514);
|
||||
buttonLeft.Name = "buttonLeft";
|
||||
buttonLeft.Size = new Size(35, 35);
|
||||
buttonLeft.TabIndex = 5;
|
||||
buttonLeft.UseVisualStyleBackColor = true;
|
||||
buttonLeft.Click += ButtonMove_Click;
|
||||
//
|
||||
// buttonRight
|
||||
//
|
||||
buttonRight.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonRight.BackgroundImage = (Image)resources.GetObject("buttonRight.BackgroundImage");
|
||||
buttonRight.BackgroundImageLayout = ImageLayout.Stretch;
|
||||
buttonRight.Location = new Point(812, 514);
|
||||
buttonRight.Name = "buttonRight";
|
||||
buttonRight.Size = new Size(35, 35);
|
||||
buttonRight.TabIndex = 6;
|
||||
buttonRight.UseVisualStyleBackColor = true;
|
||||
buttonRight.Click += ButtonMove_Click;
|
||||
//
|
||||
// comboBox1
|
||||
//
|
||||
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBox1.FormattingEnabled = true;
|
||||
comboBox1.Items.AddRange(new object[] { "К центру", "К краю" });
|
||||
comboBox1.Location = new Point(667, 12);
|
||||
comboBox1.Name = "comboBox1";
|
||||
comboBox1.Size = new Size(121, 23);
|
||||
comboBox1.TabIndex = 8;
|
||||
//
|
||||
// buttonStrategyStep
|
||||
//
|
||||
buttonStrategyStep.Location = new Point(713, 41);
|
||||
buttonStrategyStep.Name = "buttonStrategyStep";
|
||||
buttonStrategyStep.Size = new Size(75, 23);
|
||||
buttonStrategyStep.TabIndex = 9;
|
||||
buttonStrategyStep.Text = "Шаг";
|
||||
buttonStrategyStep.UseVisualStyleBackColor = true;
|
||||
buttonStrategyStep.Click += buttonStrategyStep_Click;
|
||||
//
|
||||
// LocomotiveProject
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(880, 561);
|
||||
Controls.Add(buttonStrategyStep);
|
||||
Controls.Add(comboBox1);
|
||||
Controls.Add(buttonRight);
|
||||
Controls.Add(buttonLeft);
|
||||
Controls.Add(buttonDown);
|
||||
Controls.Add(buttonUp);
|
||||
Controls.Add(pictureBoxLocomotive);
|
||||
Controls.Add(pictureBox1);
|
||||
Name = "LocomotiveProject";
|
||||
Text = "Тепловоз";
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBoxLocomotive).EndInit();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private PictureBox pictureBox1;
|
||||
private PictureBox pictureBoxLocomotive;
|
||||
private Button buttonUp;
|
||||
private Button buttonDown;
|
||||
private Button buttonLeft;
|
||||
private Button buttonRight;
|
||||
private ComboBox comboBox1;
|
||||
private Button buttonStrategyStep;
|
||||
}
|
||||
}
|
@ -1,172 +0,0 @@
|
||||
using LocomotiveProject;
|
||||
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 LocomotiveProject.Entities;
|
||||
using LocomotiveProject.Drawnings;
|
||||
using LocomativeProject.Drawnings;
|
||||
using LocomativeProject.MovementStrategy;
|
||||
|
||||
namespace LocomotiveProject
|
||||
{
|
||||
public partial class LocomotiveProjectForm : Form
|
||||
{
|
||||
private DrawningBaseLocomotive? _drawningLocomotive;
|
||||
|
||||
private AbstractStrategy? _strategy;
|
||||
|
||||
public DrawningBaseLocomotive SetLocomotive
|
||||
{
|
||||
set
|
||||
{
|
||||
_drawningLocomotive = value;
|
||||
_drawningLocomotive.SetPictureSize(pictureBox1.Width, pictureBox1.Height);
|
||||
comboBox1.Enabled = true;
|
||||
_strategy = null;
|
||||
Draw();
|
||||
}
|
||||
}
|
||||
|
||||
public LocomotiveProjectForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
_strategy = null;
|
||||
}
|
||||
|
||||
private void Draw()
|
||||
{
|
||||
if (_drawningLocomotive == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Bitmap bmp = new(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
|
||||
Graphics gr = Graphics.FromImage(bmp);
|
||||
_drawningLocomotive.DrawTransport(gr);
|
||||
pictureBoxLocomotive.Image = bmp;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Создание объекта класса-перемещения
|
||||
/// </summary>
|
||||
/// <param name="type">Тип создаваемого объекта</param>
|
||||
private void CreateObject(string type)
|
||||
{
|
||||
Random random = new();
|
||||
switch (type)
|
||||
{
|
||||
case nameof(DrawningBaseLocomotive):
|
||||
_drawningLocomotive = new DrawningBaseLocomotive(random.Next(100, 300), random.Next(1000, 3000),
|
||||
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)));
|
||||
break;
|
||||
case nameof(DrawningLocomotive):
|
||||
_drawningLocomotive = new DrawningLocomotive(random.Next(100, 300), random.Next(1000, 3000),
|
||||
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
|
||||
Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256)),
|
||||
Convert.ToBoolean(random.Next(0, 2)), Convert.ToBoolean(random.Next(0, 2)));
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
_drawningLocomotive.SetPictureSize(pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
|
||||
_drawningLocomotive.SetPosition(random.Next(10, 100), random.Next(10, 100));
|
||||
_strategy = null;
|
||||
comboBox1.Enabled = true;
|
||||
Draw();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Обработка нажатия кнопки "Создать базовый поезд"
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonCreateBaseLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningBaseLocomotive));
|
||||
|
||||
/// <summary>
|
||||
/// Обработка нажатия кнопки "Создать продвинутый поезд"
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonCreateLocomotive_Click(object sender, EventArgs e) => CreateObject(nameof(DrawningLocomotive));
|
||||
|
||||
|
||||
private void ButtonMove_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (_drawningLocomotive == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string name = ((Button)sender)?.Name ?? string.Empty;
|
||||
bool result = false;
|
||||
switch (name)
|
||||
{
|
||||
case "buttonUp":
|
||||
result = _drawningLocomotive.MoveTransport(DirectionType.Up);
|
||||
break;
|
||||
case "buttonDown":
|
||||
result = _drawningLocomotive.MoveTransport(DirectionType.Down);
|
||||
break;
|
||||
case "buttonLeft":
|
||||
result = _drawningLocomotive.MoveTransport(DirectionType.Left);
|
||||
break;
|
||||
case "buttonRight":
|
||||
result = _drawningLocomotive.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 (_drawningLocomotive == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (comboBox1.Enabled)
|
||||
{
|
||||
_strategy = comboBox1.SelectedIndex switch
|
||||
{
|
||||
0 => new MoveToCenter(),
|
||||
1 => new MoveToBorder(),
|
||||
_ => null,
|
||||
};
|
||||
if (_strategy == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_strategy.SetData(new MoveableLocomotive(_drawningLocomotive), pictureBoxLocomotive.Width, pictureBoxLocomotive.Height);
|
||||
}
|
||||
|
||||
if (_strategy == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
comboBox1.Enabled = false;
|
||||
_strategy.MakeStep();
|
||||
Draw();
|
||||
|
||||
if (_strategy.GetStatus() == StrategyStatus.Finish)
|
||||
{
|
||||
comboBox1.Enabled = true;
|
||||
_strategy = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,649 +0,0 @@
|
||||
<?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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
|
||||
</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="buttonLeft.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
AABJRU5ErkJggg==
|
||||
</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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
|
||||
AAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
@ -1,140 +0,0 @@
|
||||
namespace LocomativeProject.MovementStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс-стратегия перемещения объекта
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
namespace LocomativeProject.MovementStrategy;
|
||||
/// <summary>
|
||||
/// Интерфейс для работы с перемещаемым объектом
|
||||
/// </summary>
|
||||
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);
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LocomativeProject.MovementStrategy;
|
||||
|
||||
public class MoveToBorder : AbstractStrategy
|
||||
{
|
||||
protected override bool IsTargetDestinaion()
|
||||
{
|
||||
ObjectParameters? objParams = GetObjectParameters;
|
||||
if (objParams == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return objParams.RightBorder - GetStep() <= FieldWidth && objParams.DownBorder - GetStep() < FieldHeight &&
|
||||
objParams.RightBorder + GetStep() >= FieldWidth && objParams.DownBorder + GetStep() >= FieldHeight;
|
||||
}
|
||||
|
||||
protected override void MoveToTarget()
|
||||
{
|
||||
ObjectParameters? objParams = GetObjectParameters;
|
||||
if (objParams == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (objParams.RightBorder + GetStep() <= FieldWidth)
|
||||
{
|
||||
MoveRight();
|
||||
}
|
||||
if (objParams.DownBorder + GetStep() <= FieldHeight)
|
||||
{
|
||||
MoveDown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,54 +0,0 @@
|
||||
namespace LocomativeProject.MovementStrategy;
|
||||
|
||||
/// <summary>
|
||||
/// Стратегия перемещения объекта в центр экрана
|
||||
/// </summary>
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
using LocomativeProject.Drawnings;
|
||||
namespace LocomativeProject.MovementStrategy;
|
||||
|
||||
/// <summary>
|
||||
/// Класс-реализация IMoveableObject с использованием DrawningLocomotive
|
||||
/// </summary>
|
||||
public class MoveableLocomotive : IMoveableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Поле-объект класса DrawningBaseLocomotive или его наследника
|
||||
/// </summary>
|
||||
private readonly DrawningBaseLocomotive? _locomotive = null;
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="_locomotive">Объект класса DrawningBaseLocomotive</param>
|
||||
public MoveableLocomotive(DrawningBaseLocomotive locomotive)
|
||||
{
|
||||
_locomotive = locomotive;
|
||||
}
|
||||
|
||||
public ObjectParameters? GetObjectPosition
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_locomotive == null || _locomotive._EntityBaseLocomotive == null || !_locomotive.GetPosX.HasValue || !_locomotive.GetPosY.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new ObjectParameters(_locomotive.GetPosX.Value, _locomotive.GetPosY.Value, _locomotive.GetWidth, _locomotive.GetHeight);
|
||||
}
|
||||
}
|
||||
|
||||
public int GetStep => (int)(_locomotive?._EntityBaseLocomotive?.Step ?? 0);
|
||||
|
||||
public bool TryMoveObject(MovementDirection direction)
|
||||
{
|
||||
if (_locomotive == null || _locomotive._EntityBaseLocomotive == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return _locomotive.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,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,26 +0,0 @@
|
||||
namespace LocomativeProject.MovementStrategy;
|
||||
/// <summary>
|
||||
/// Направление перемещения
|
||||
/// </summary>
|
||||
public enum MovementDirection : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Вверх
|
||||
/// </summary>
|
||||
Up = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Вниз
|
||||
/// </summary>
|
||||
Down,
|
||||
|
||||
/// <summary>
|
||||
/// Влево
|
||||
/// </summary>
|
||||
Left,
|
||||
|
||||
/// <summary>
|
||||
/// Вправо
|
||||
/// </summary>
|
||||
Right
|
||||
}
|
@ -1,71 +0,0 @@
|
||||
namespace LocomativeProject.MovementStrategy;
|
||||
/// <summary>
|
||||
/// Параметры-координаты объекта
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
namespace LocomativeProject.MovementStrategy;
|
||||
/// <summary>
|
||||
/// Статус выполнения операции перемещения
|
||||
/// </summary>
|
||||
public enum StrategyStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// Все готово к началу
|
||||
/// </summary>
|
||||
NotInit,
|
||||
|
||||
/// <summary>
|
||||
/// Выполняется
|
||||
/// </summary>
|
||||
InProgress,
|
||||
|
||||
/// <summary>
|
||||
/// Завершено
|
||||
/// </summary>
|
||||
Finish
|
||||
}
|
@ -1,9 +1,4 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NLog.Extensions.Logging;
|
||||
using Serilog;
|
||||
|
||||
namespace LocomotiveProject
|
||||
namespace LocomativeProject
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
@ -11,28 +6,12 @@ namespace LocomotiveProject
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
private static void Main()
|
||||
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 ServiceCollection();
|
||||
ConfigureServices(services);
|
||||
using ServiceProvider serviceProvider = services.BuildServiceProvider();
|
||||
|
||||
Application.Run(serviceProvider.GetRequiredService<FormLocomotiveCollection>());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Êîíôèãóðàöèÿ ñåðâèñà DI
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
private static void ConfigureServices(ServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<FormLocomotiveCollection>()
|
||||
.AddLogging(option => option.AddSerilog(dispose: true));
|
||||
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.MinimumLevel.Debug().WriteTo.File("C:\\Users\\79603\\Desktop\\ÎÎÏ Êèðèëèí ÏÈáä11 (2)\\ÎÎÏ Êèðèëèí ÏÈáä11\\LocomativeProject\\LocomativeProject\\log.txt").CreateLogger();
|
||||
Application.Run(new Form1());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,73 +0,0 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Этот код создан программой.
|
||||
// Исполняемая версия:4.0.30319.42000
|
||||
//
|
||||
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||
// повторной генерации кода.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace LocomotiveProject.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("LocomotiveProject.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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap up_arrow {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("up-arrow", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB |
@ -1,2 +0,0 @@
|
||||
[.ShellClassInfo]
|
||||
LocalizedResourceName=ÎÎÏ Êèðèëèí ÏÈáä11(final version)
|
Binary file not shown.
Before Width: | Height: | Size: 9.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 8.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.5 KiB |
Loading…
Reference in New Issue
Block a user