Шестая лабораторная работа

This commit is contained in:
10Г Егор Романов 2022-11-20 22:07:29 +04:00
parent c69dd461c0
commit 0b264223c2
5 changed files with 94 additions and 18 deletions

View File

@ -30,5 +30,7 @@ namespace HoistingCrane
{ {
_hoistingCrane?.DrawTransport(g); _hoistingCrane?.DrawTransport(g);
} }
public string GetInfo() => _hoistingCrane?.GetDataForSave();
public static IDrawingObject Create(string data) => new DrawingObjectHoistingCrane(data.CreateDrawingHoistingCrane());
} }
} }

View File

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HoistingCrane
{
internal static class ExtentionHoistingCrane
{
/// <summary>
/// Разделитель для записи информации по объекту в файл
/// </summary>
private static readonly char _separatorForObject = ':';
/// <summary>
/// Создание объекта из строки
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public static DrawingHoistingCrane CreateDrawingHoistingCrane(this string info)
{
string[] strs = info.Split(_separatorForObject);
if (strs.Length == 3)
{
return new DrawingHoistingCrane(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]), Color.FromName(strs[2]));
}
if (strs.Length == 6)
{
return new DrawingAdvancedHoistingCrane(Convert.ToInt32(strs[0]),
Convert.ToInt32(strs[1]), Color.FromName(strs[2]),
Color.FromName(strs[3]), Convert.ToBoolean(strs[4]),
Convert.ToBoolean(strs[5]));
}
return null;
}
/// <summary>
/// Получение данных для сохранения в файл
/// </summary>
/// <param name="DrawingHoistingCrane"></param>
/// <returns></returns>
public static string GetDataForSave(this DrawingHoistingCrane DrawingHoistingCrane)
{
var hoistingCrane = DrawingHoistingCrane.HoistingCrane;
var str = $"{hoistingCrane.Speed}{_separatorForObject}{hoistingCrane.Weight}{_separatorForObject}{hoistingCrane.BodyColor.Name}";
if (!(hoistingCrane is EntityAdvancedHoistingCrane HoistingCrane))
{
return str;
}
return $"{str}{_separatorForObject}{HoistingCrane.DopColor.Name}{_separatorForObject}{HoistingCrane.Crane}{_separatorForObject}{HoistingCrane.Сounterweight}";
}
}
}

View File

@ -13,5 +13,6 @@ namespace HoistingCrane
void MoveObject(Direction direction); void MoveObject(Direction direction);
void DrawingObject(Graphics g); void DrawingObject(Graphics g);
(float Left, float Right, float Top, float Bottom) GetCurrentPosition(); (float Left, float Right, float Top, float Bottom) GetCurrentPosition();
string GetInfo();
} }
} }

View File

@ -14,27 +14,27 @@ namespace HoistingCrane
private readonly int _pictureHeight; private readonly int _pictureHeight;
private readonly int _placeSizeWidth = 200; private readonly int _placeSizeWidth = 200;
private readonly int _placeSizeHeight = 120; private readonly int _placeSizeHeight = 120;
private readonly SetHoistingCraneGeneric<T> _setHoistingCrane; private readonly SetHoistingCraneGeneric<T> _setHoistingCranes;
private readonly U _map; private readonly U _map;
public MapWithSetHoistingCraneGeneric(int picWidth, int picHeight, U map) public MapWithSetHoistingCraneGeneric(int picWidth, int picHeight, U map)
{ {
int width = picWidth / _placeSizeWidth; int width = picWidth / _placeSizeWidth;
int height = picHeight / _placeSizeHeight; int height = picHeight / _placeSizeHeight;
_setHoistingCrane = new SetHoistingCraneGeneric<T>(width * height); _setHoistingCranes = new SetHoistingCraneGeneric<T>(width * height);
_pictureWidth = picWidth; _pictureWidth = picWidth;
_pictureHeight = picHeight; _pictureHeight = picHeight;
_map = map; _map = map;
} }
public static int operator +(MapWithSetHoistingCraneGeneric<T, U> map, T bulldozer) public static int operator +(MapWithSetHoistingCraneGeneric<T, U> map, T hoistingcrane)
{ {
return map._setHoistingCrane.Insert(bulldozer); return map._setHoistingCranes.Insert(hoistingcrane);
} }
public static T operator -(MapWithSetHoistingCraneGeneric<T, U> map, int position) public static T operator -(MapWithSetHoistingCraneGeneric<T, U> map, int position)
{ {
return map._setHoistingCrane.Remove(position); return map._setHoistingCranes.Remove(position);
} }
public Bitmap ShowSet() public Bitmap ShowSet()
@ -42,14 +42,14 @@ namespace HoistingCrane
Bitmap bmp = new(_pictureWidth, _pictureWidth); Bitmap bmp = new(_pictureWidth, _pictureWidth);
Graphics gr = Graphics.FromImage(bmp); Graphics gr = Graphics.FromImage(bmp);
DrawBackground(gr); DrawBackground(gr);
DrawBulldozers(gr); DrawHoistingCranes(gr);
return bmp; return bmp;
} }
public Bitmap ShowOnMap() public Bitmap ShowOnMap()
{ {
Shaking(); Shaking();
foreach (var hoistingCrane in _setHoistingCrane.GetHoistingCrane()) foreach (var hoistingCrane in _setHoistingCranes.GetHoistingCranes())
{ {
return _map.CreateMap(_pictureWidth, _pictureHeight, hoistingCrane); return _map.CreateMap(_pictureWidth, _pictureHeight, hoistingCrane);
} }
@ -67,18 +67,18 @@ namespace HoistingCrane
public void Shaking() public void Shaking()
{ {
int j = _setHoistingCrane.Count - 1; int j = _setHoistingCranes.Count - 1;
for (int i = 0; i < _setHoistingCrane.Count; i++) for (int i = 0; i < _setHoistingCranes.Count; i++)
{ {
if (_setHoistingCrane[i] == null) if (_setHoistingCranes[i] == null)
{ {
for (; j > i; j--) for (; j > i; j--)
{ {
var warship = _setHoistingCrane[j]; var warship = _setHoistingCranes[j];
if (warship != null) if (warship != null)
{ {
_setHoistingCrane.Insert(warship, i); _setHoistingCranes.Insert(warship, i);
_setHoistingCrane.Remove(j); _setHoistingCranes.Remove(j);
break; break;
} }
} }
@ -103,22 +103,22 @@ namespace HoistingCrane
} }
} }
private void DrawBulldozers(Graphics gr) private void DrawHoistingCranes(Graphics gr)
{ {
int heightEl = _pictureHeight / _placeSizeHeight; int heightEl = _pictureHeight / _placeSizeHeight;
int widthEl = _pictureWidth / _placeSizeWidth; int widthEl = _pictureWidth / _placeSizeWidth;
int curWidth = 3; int curWidth = 3;
int curHeight = 3; int curHeight = 3;
for (int i = 0; i < _setHoistingCrane.Count; i++) for (int i = 0; i < _setHoistingCranes.Count; i++)
{ {
if (curHeight < 0) if (curHeight < 0)
{ {
return; return;
} }
_setHoistingCrane[i]?.SetObject(curWidth * _placeSizeWidth + 10, _setHoistingCranes[i]?.SetObject(curWidth * _placeSizeWidth + 10,
curHeight * _placeSizeHeight + 10, _pictureWidth, _pictureHeight); curHeight * _placeSizeHeight + 10, _pictureWidth, _pictureHeight);
_setHoistingCrane[i]?.DrawingObject(gr); _setHoistingCranes[i]?.DrawingObject(gr);
if (curWidth == 0) if (curWidth == 0)
{ {
@ -129,5 +129,25 @@ namespace HoistingCrane
curWidth--; curWidth--;
} }
} }
public string GetData(char separatorType, char separatorData)
{
string data = $"{_map.GetType().Name}{separatorType}";
foreach (var Boat in _setHoistingCranes.GetHoistingCranes())
{
data += $"{Boat.GetInfo()}{separatorData}";
}
return data;
}
/// <summary>
/// Загрузка списка из массива строк
/// </summary>
/// <param name="records"></param>
public void LoadData(string[] records)
{
foreach (var rec in records)
{
_setHoistingCranes.Insert(DrawingObjectHoistingCrane.Create(rec) as T);
}
}
} }
} }

View File

@ -63,7 +63,7 @@ namespace HoistingCrane
Insert(value, position); Insert(value, position);
} }
} }
public IEnumerable<T> GetHoistingCrane() public IEnumerable<T> GetHoistingCranes()
{ {
foreach (var hoistingcrane in _places) foreach (var hoistingcrane in _places)
{ {