From 0b264223c2f7c206527a0b6a61484e8fba52b6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?10=D0=93=20=D0=95=D0=B3=D0=BE=D1=80=20=D0=A0=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Sun, 20 Nov 2022 22:07:29 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=B5=D1=81=D1=82=D0=B0=D1=8F=20=D0=BB?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DrawingObjectHoistingCrane.cs | 2 + .../HoistingCrane/ExtentionHoistingCrane.cs | 53 ++++++++++++++++++ HoistingCrane/HoistingCrane/IDrawingObject.cs | 1 + .../MapWithSetHoistingCraneGeneric.cs | 54 +++++++++++++------ .../HoistingCrane/SetHoistingCraneGeneric.cs | 2 +- 5 files changed, 94 insertions(+), 18 deletions(-) create mode 100644 HoistingCrane/HoistingCrane/ExtentionHoistingCrane.cs diff --git a/HoistingCrane/HoistingCrane/DrawingObjectHoistingCrane.cs b/HoistingCrane/HoistingCrane/DrawingObjectHoistingCrane.cs index 22138d0..2648791 100644 --- a/HoistingCrane/HoistingCrane/DrawingObjectHoistingCrane.cs +++ b/HoistingCrane/HoistingCrane/DrawingObjectHoistingCrane.cs @@ -30,5 +30,7 @@ namespace HoistingCrane { _hoistingCrane?.DrawTransport(g); } + public string GetInfo() => _hoistingCrane?.GetDataForSave(); + public static IDrawingObject Create(string data) => new DrawingObjectHoistingCrane(data.CreateDrawingHoistingCrane()); } } diff --git a/HoistingCrane/HoistingCrane/ExtentionHoistingCrane.cs b/HoistingCrane/HoistingCrane/ExtentionHoistingCrane.cs new file mode 100644 index 0000000..89f1b80 --- /dev/null +++ b/HoistingCrane/HoistingCrane/ExtentionHoistingCrane.cs @@ -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 + { + /// + /// Разделитель для записи информации по объекту в файл + /// + private static readonly char _separatorForObject = ':'; + /// + /// Создание объекта из строки + /// + /// + /// + 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; + } + /// + /// Получение данных для сохранения в файл + /// + /// + /// + 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}"; + } + } +} diff --git a/HoistingCrane/HoistingCrane/IDrawingObject.cs b/HoistingCrane/HoistingCrane/IDrawingObject.cs index cbdd2ac..9c0c409 100644 --- a/HoistingCrane/HoistingCrane/IDrawingObject.cs +++ b/HoistingCrane/HoistingCrane/IDrawingObject.cs @@ -13,5 +13,6 @@ namespace HoistingCrane void MoveObject(Direction direction); void DrawingObject(Graphics g); (float Left, float Right, float Top, float Bottom) GetCurrentPosition(); + string GetInfo(); } } diff --git a/HoistingCrane/HoistingCrane/MapWithSetHoistingCraneGeneric.cs b/HoistingCrane/HoistingCrane/MapWithSetHoistingCraneGeneric.cs index 4b1fb1d..d598f56 100644 --- a/HoistingCrane/HoistingCrane/MapWithSetHoistingCraneGeneric.cs +++ b/HoistingCrane/HoistingCrane/MapWithSetHoistingCraneGeneric.cs @@ -14,27 +14,27 @@ namespace HoistingCrane private readonly int _pictureHeight; private readonly int _placeSizeWidth = 200; private readonly int _placeSizeHeight = 120; - private readonly SetHoistingCraneGeneric _setHoistingCrane; + private readonly SetHoistingCraneGeneric _setHoistingCranes; private readonly U _map; public MapWithSetHoistingCraneGeneric(int picWidth, int picHeight, U map) { int width = picWidth / _placeSizeWidth; int height = picHeight / _placeSizeHeight; - _setHoistingCrane = new SetHoistingCraneGeneric(width * height); + _setHoistingCranes = new SetHoistingCraneGeneric(width * height); _pictureWidth = picWidth; _pictureHeight = picHeight; _map = map; } - public static int operator +(MapWithSetHoistingCraneGeneric map, T bulldozer) + public static int operator +(MapWithSetHoistingCraneGeneric map, T hoistingcrane) { - return map._setHoistingCrane.Insert(bulldozer); + return map._setHoistingCranes.Insert(hoistingcrane); } public static T operator -(MapWithSetHoistingCraneGeneric map, int position) { - return map._setHoistingCrane.Remove(position); + return map._setHoistingCranes.Remove(position); } public Bitmap ShowSet() @@ -42,14 +42,14 @@ namespace HoistingCrane Bitmap bmp = new(_pictureWidth, _pictureWidth); Graphics gr = Graphics.FromImage(bmp); DrawBackground(gr); - DrawBulldozers(gr); + DrawHoistingCranes(gr); return bmp; } public Bitmap ShowOnMap() { Shaking(); - foreach (var hoistingCrane in _setHoistingCrane.GetHoistingCrane()) + foreach (var hoistingCrane in _setHoistingCranes.GetHoistingCranes()) { return _map.CreateMap(_pictureWidth, _pictureHeight, hoistingCrane); } @@ -67,18 +67,18 @@ namespace HoistingCrane public void Shaking() { - int j = _setHoistingCrane.Count - 1; - for (int i = 0; i < _setHoistingCrane.Count; i++) + int j = _setHoistingCranes.Count - 1; + for (int i = 0; i < _setHoistingCranes.Count; i++) { - if (_setHoistingCrane[i] == null) + if (_setHoistingCranes[i] == null) { for (; j > i; j--) { - var warship = _setHoistingCrane[j]; + var warship = _setHoistingCranes[j]; if (warship != null) { - _setHoistingCrane.Insert(warship, i); - _setHoistingCrane.Remove(j); + _setHoistingCranes.Insert(warship, i); + _setHoistingCranes.Remove(j); break; } } @@ -103,22 +103,22 @@ namespace HoistingCrane } } - private void DrawBulldozers(Graphics gr) + private void DrawHoistingCranes(Graphics gr) { int heightEl = _pictureHeight / _placeSizeHeight; int widthEl = _pictureWidth / _placeSizeWidth; int curWidth = 3; int curHeight = 3; - for (int i = 0; i < _setHoistingCrane.Count; i++) + for (int i = 0; i < _setHoistingCranes.Count; i++) { if (curHeight < 0) { return; } - _setHoistingCrane[i]?.SetObject(curWidth * _placeSizeWidth + 10, + _setHoistingCranes[i]?.SetObject(curWidth * _placeSizeWidth + 10, curHeight * _placeSizeHeight + 10, _pictureWidth, _pictureHeight); - _setHoistingCrane[i]?.DrawingObject(gr); + _setHoistingCranes[i]?.DrawingObject(gr); if (curWidth == 0) { @@ -129,5 +129,25 @@ namespace HoistingCrane 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; + } + /// + /// Загрузка списка из массива строк + /// + /// + public void LoadData(string[] records) + { + foreach (var rec in records) + { + _setHoistingCranes.Insert(DrawingObjectHoistingCrane.Create(rec) as T); + } + } } } diff --git a/HoistingCrane/HoistingCrane/SetHoistingCraneGeneric.cs b/HoistingCrane/HoistingCrane/SetHoistingCraneGeneric.cs index d44591d..bc14a0d 100644 --- a/HoistingCrane/HoistingCrane/SetHoistingCraneGeneric.cs +++ b/HoistingCrane/HoistingCrane/SetHoistingCraneGeneric.cs @@ -63,7 +63,7 @@ namespace HoistingCrane Insert(value, position); } } - public IEnumerable GetHoistingCrane() + public IEnumerable GetHoistingCranes() { foreach (var hoistingcrane in _places) {