diff --git a/AirFighter/AirFighter/AirFighterCompareByColor .cs b/AirFighter/AirFighter/AirFighterCompareByColor .cs index 642f89c..895e91a 100644 --- a/AirFighter/AirFighter/AirFighterCompareByColor .cs +++ b/AirFighter/AirFighter/AirFighterCompareByColor .cs @@ -14,35 +14,42 @@ namespace AirFighter public int Compare(DrawningAirFighter? x, DrawningAirFighter? y) { if (x == null || x.EntityAirFighter == null) + { throw new ArgumentNullException(nameof(x)); + } if (y == null || y.EntityAirFighter == null) + { throw new ArgumentNullException(nameof(y)); + } - if (x.EntityAirFighter.BodyColor.Name != y.EntityAirFighter.BodyColor.Name) + var bodyColorCompare = x.EntityAirFighter.BodyColor.Name.CompareTo(y.EntityAirFighter.BodyColor.Name); + + if (bodyColorCompare != 0) { - return x.EntityAirFighter.BodyColor.Name.CompareTo(y.EntityAirFighter.BodyColor.Name); + return bodyColorCompare; } - if (x.GetType().Name != y.GetType().Name) + + if (x.EntityAirFighter is EntityAirFighterMilitary xEntitySailCatamaran && y.EntityAirFighter is EntityAirFighterMilitary yEntitySailCatamaran) { - if (x is EntityAirFighter) - return -1; - else - return 1; - } - if (x.GetType().Name == y.GetType().Name && x is DrawningAirFighterMilitary) - { - EntityAirFighterMilitary EntityX = (EntityAirFighterMilitary)x.EntityAirFighter; - EntityAirFighterMilitary EntityY = (EntityAirFighterMilitary)y.EntityAirFighter; - if (EntityX.AdditionalColor.Name != EntityY.AdditionalColor.Name) + var BodyColorCompare = xEntitySailCatamaran.BodyColor.Name.CompareTo(yEntitySailCatamaran.BodyColor.Name); + if (BodyColorCompare != 0) { - return EntityX.AdditionalColor.Name.CompareTo(EntityY.AdditionalColor.Name); + return BodyColorCompare; + } + var AdditionalColorCompare = xEntitySailCatamaran.AdditionalColor.Name.CompareTo(yEntitySailCatamaran.AdditionalColor.Name); + if (AdditionalColorCompare != 0) + { + return AdditionalColorCompare; } } + var speedCompare = x.EntityAirFighter.Speed.CompareTo(y.EntityAirFighter.Speed); if (speedCompare != 0) + { return speedCompare; + } return x.EntityAirFighter.Weight.CompareTo(y.EntityAirFighter.Weight); } diff --git a/AirFighter/AirFighter/AirFighterGenericStorage.cs b/AirFighter/AirFighter/AirFighterGenericStorage.cs index 3922efc..95321c2 100644 --- a/AirFighter/AirFighter/AirFighterGenericStorage.cs +++ b/AirFighter/AirFighter/AirFighterGenericStorage.cs @@ -3,82 +3,69 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; - -using AirFighter.Drawnings; -using AirFighter.MovementStrategy; using AirFighter.DrawningObjects; +using AirFighter.MovementStrategy; +using AirFighter.Generics; +using System.IO; using AirFighter.Exceptions; -using AirFighter.Exceptions; + namespace AirFighter.Generics - { internal class AirFighterGenericStorage { - readonly Dictionary> _lincornStorages; - public List Keys => _lincornStorages.Keys.ToList(); + readonly Dictionary> _fighterStorages; + + public List Keys => _fighterStorages.Keys.ToList(); + private readonly int _pictureWidth; private readonly int _pictureHeight; - private static readonly char _separatorForKeyValue = '|'; - private readonly char _separatorRecords = ';'; - private static readonly char _separatorForObject = ':'; public AirFighterGenericStorage(int pictureWidth, int pictureHeight) { - _lincornStorages = new Dictionary>(); + _fighterStorages = new Dictionary>(); _pictureWidth = pictureWidth; _pictureHeight = pictureHeight; } - /// - /// Добавление набора - /// - /// Название набора public void AddSet(string name) { // TODO Прописать логику для добавления - if (!_lincornStorages.ContainsKey(new AirFighterCollectionInfo(name, string.Empty))) + if (!_fighterStorages.ContainsKey(new AirFighterCollectionInfo(name, string.Empty))) { - var lincornCollection = new AirFighterGenericCollection(_pictureWidth, _pictureHeight); - _lincornStorages.Add(new AirFighterCollectionInfo(name, string.Empty), lincornCollection); + var fighterCollection = new AirFighterGenericCollection(_pictureWidth, _pictureHeight); + _fighterStorages.Add(new AirFighterCollectionInfo(name, string.Empty), fighterCollection); } } - /// - /// Удаление набора - /// - /// Название набора + public void DelSet(string name) { // TODO Прописать логику для удаления - if (_lincornStorages.ContainsKey(new AirFighterCollectionInfo(name, string.Empty))) + if (_fighterStorages.ContainsKey(new AirFighterCollectionInfo(name, string.Empty))) { - _lincornStorages.Remove(new AirFighterCollectionInfo(name, string.Empty)); + _fighterStorages.Remove(new AirFighterCollectionInfo(name, string.Empty)); } } - /// - /// Доступ к набору - /// - /// - /// - public AirFighterGenericCollection? this[string ind] + + public AirFighterGenericCollection? + this[string ind] { get { AirFighterCollectionInfo indObj = new AirFighterCollectionInfo(ind, string.Empty); // TODO Продумать логику получения набора - if (_lincornStorages.ContainsKey(indObj)) + if (_fighterStorages.ContainsKey(indObj)) { - return _lincornStorages[indObj]; + return _fighterStorages[indObj]; } return null; } } - /// - /// Сохранение информации по установкам в хранилище в файл - /// - /// Путь и имя файла - /// true - сохранение прошло успешно, false - ошибка при сохранении данных + + private static readonly char _separatorForKeyValue = '|'; + + private readonly char _separatorRecords = ';'; + + private static readonly char _separatorForObject = ':'; public void SaveData(string filename) { if (File.Exists(filename)) @@ -86,7 +73,7 @@ namespace AirFighter.Generics File.Delete(filename); } StringBuilder data = new(); - foreach (KeyValuePair> record in _lincornStorages) + foreach (KeyValuePair> record in _fighterStorages) { StringBuilder records = new(); foreach (DrawningAirFighter? elem in record.Value.GetAirFighter) @@ -102,22 +89,15 @@ namespace AirFighter.Generics using (StreamWriter writer = new StreamWriter(filename)) { - writer.Write($"lincornStorage{Environment.NewLine}{data}"); + writer.Write($"shipStorage{Environment.NewLine}{data}"); } } - - // - /// Загрузка информации по установкам в хранилище из файла - /// - /// Путь и имя файла - /// true - загрузка прошла успешно, false - ошибка при загрузке данных public void LoadData(string filename) { if (!File.Exists(filename)) { throw new Exception("Файл не найден"); } - using (StreamReader reader = new StreamReader(filename)) { string cheker = reader.ReadLine(); @@ -125,11 +105,11 @@ namespace AirFighter.Generics { throw new Exception("Нет данных для загрузки"); } - if (!cheker.StartsWith("lincornStorage")) + if (!cheker.StartsWith("fighterStorage")) { throw new Exception("Неверный формат ввода"); } - _lincornStorages.Clear(); + _fighterStorages.Clear(); string strs; bool firstinit = true; while ((strs = reader.ReadLine()) != null) @@ -147,11 +127,11 @@ namespace AirFighter.Generics AirFighterGenericCollection collection = new(_pictureWidth, _pictureHeight); foreach (string data in strs.Split(_separatorForKeyValue)[1].Split(_separatorRecords)) { - DrawningAirFighter? lincorn = + DrawningAirFighter? fighter = data?.CreateDrawningAirFighter(_separatorForObject, _pictureWidth, _pictureHeight); - if (lincorn != null) + if (fighter != null) { - try { _ = collection + lincorn; } + try { _ = collection + fighter; } catch (AirFighterNotFoundException e) { throw e; @@ -162,10 +142,9 @@ namespace AirFighter.Generics } } } - _lincornStorages.Add(new AirFighterCollectionInfo(name, string.Empty), collection); + _fighterStorages.Add(new AirFighterCollectionInfo(name, string.Empty), collection); } } } } } -