From cd4cf22b7ea17f39c51042f796581653dba0a4b4 Mon Sep 17 00:00:00 2001 From: "evasina2312@gmail.com" Date: Wed, 21 Dec 2022 10:10:47 +0400 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=80=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectMachine/DrawningObject.cs | 54 +++++++++++++++++++ .../ProjectMachine/IDrawningObject.cs | 4 +- .../ProjectMachine/MapWithSetTankGeneric.cs | 2 +- .../ProjectMachine/SetTankGeneric.cs | 4 +- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/ProjectMachine/ProjectMachine/DrawningObject.cs b/ProjectMachine/ProjectMachine/DrawningObject.cs index 6ebde9b..0e7e774 100644 --- a/ProjectMachine/ProjectMachine/DrawningObject.cs +++ b/ProjectMachine/ProjectMachine/DrawningObject.cs @@ -40,5 +40,59 @@ namespace ProjectMachine public string GetInfo() => _machine?.GetDataForSave(); public static IDrawningObject Create(string data) => new DrawningObject(data.CreateDrawningMachine()); + + public bool Equals(IDrawningObject? other) + { + if (other == null) + { + return false; + } + var otherMachine = other as DrawningObject; + if (otherMachine == null) + { + return false; + } + var machine = _machine.Machine; + var otherMachineMachine = otherMachine._machine.Machine; + if (machine.Speed != otherMachineMachine.Speed) + { + return false; + } + if (machine.Weight != otherMachineMachine.Weight) + { + return false; + } + if (machine.BodyColor != otherMachineMachine.BodyColor) + { + return false; + } + //проверка на то, что являются ли оба объекта продвинутыми + if (machine is EntityTank && otherMachineMachine is not EntityTank) + { + return false; + } + if (machine is not EntityTank && otherMachineMachine is EntityTank) + { + return false; + } + //если оба объекта являются продвинутыми, сравниваем дополнительные характеристики + if (machine is EntityTank tank && otherMachineMachine is EntityTank otherTank) + { + if (tank.DopColor != otherTank.DopColor) + { + return false; + } + if (tank.Gun != otherTank.Gun) + { + return false; + } + if (tank.Turret != otherTank.Turret) + { + return false; + } + } + return true; + } + } } diff --git a/ProjectMachine/ProjectMachine/IDrawningObject.cs b/ProjectMachine/ProjectMachine/IDrawningObject.cs index ceaf61f..4d1b112 100644 --- a/ProjectMachine/ProjectMachine/IDrawningObject.cs +++ b/ProjectMachine/ProjectMachine/IDrawningObject.cs @@ -9,8 +9,8 @@ namespace ProjectMachine /// /// Интерфейс для работы с объектом, прорисовываемым на форме /// - internal interface IDrawningObject - { + internal interface IDrawningObject : IEquatable + { /// /// Шаг перемещения объекта /// diff --git a/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs b/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs index 1e9a657..38c6253 100644 --- a/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs +++ b/ProjectMachine/ProjectMachine/MapWithSetTankGeneric.cs @@ -12,7 +12,7 @@ namespace ProjectMachine /// /// internal class MapWithSetTankGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// diff --git a/ProjectMachine/ProjectMachine/SetTankGeneric.cs b/ProjectMachine/ProjectMachine/SetTankGeneric.cs index 2cb1432..9d3a8d7 100644 --- a/ProjectMachine/ProjectMachine/SetTankGeneric.cs +++ b/ProjectMachine/ProjectMachine/SetTankGeneric.cs @@ -11,7 +11,7 @@ namespace ProjectMachine /// /// internal class SetTankGeneric - where T : class + where T : class, IEquatable { /// /// Список объектов, которые храним @@ -50,6 +50,8 @@ namespace ProjectMachine /// public int Insert(T tank, int position) { + if (_places.Contains(tank)) + throw new ArgumentException($"Объект {tank} уже есть"); if (Count >= _maxCount) throw new StorageOverflowException(Count); if (position < 0 || position >= _maxCount)