From fdba620e54e4c72e7f2ac312a44edf62b36ff2dd Mon Sep 17 00:00:00 2001 From: "DozorovaA.A" Date: Sat, 19 Nov 2022 18:32:34 +0400 Subject: [PATCH] comparison of object --- ArmoredVehicle/DrawningObject.cs | 40 ++++++++++++++++++++++ ArmoredVehicle/IDrawningObject.cs | 2 +- ArmoredVehicle/MapWithSetMachineGeneric.cs | 2 +- ArmoredVehicle/SetMachineGeneric.cs | 10 +++--- 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/ArmoredVehicle/DrawningObject.cs b/ArmoredVehicle/DrawningObject.cs index ed7906e..0881d5e 100644 --- a/ArmoredVehicle/DrawningObject.cs +++ b/ArmoredVehicle/DrawningObject.cs @@ -33,5 +33,45 @@ public string GetInfo() => _machine?.GetDataForSave(); public static IDrawningObject Create(string data) => new DrawningObject(data.CreateDrawningCar()); + + public bool Equals(IDrawningObject? other) + { + if (other == null) + { + return false; + } + var otheMachine = other as DrawningObject; + if (otheMachine == null) + { + return false; + } + var machine = _machine.ArmoredVehicle; + var otherMachineMachine = otheMachine._machine.ArmoredVehicle; + if (machine.Speed != otherMachineMachine.Speed) + { + return false; + } + if (machine.Weight != otherMachineMachine.Weight) + { + return false; + } + if (machine.BodyColor != otherMachineMachine.BodyColor) + { + return false; + } + + if (machine is TankEnity && otherMachineMachine is TankEnity) + { + var tank = machine as TankEnity; + var otherMachineTank = otherMachineMachine as TankEnity; + if (tank.DopColor != otherMachineTank.DopColor || tank.Tower != otherMachineTank.Tower || + tank.MachineGun != otherMachineTank.MachineGun) + { + return false; + } + } + + return true; + } } } \ No newline at end of file diff --git a/ArmoredVehicle/IDrawningObject.cs b/ArmoredVehicle/IDrawningObject.cs index 38cdcd2..a13818e 100644 --- a/ArmoredVehicle/IDrawningObject.cs +++ b/ArmoredVehicle/IDrawningObject.cs @@ -3,7 +3,7 @@ /// /// Интерфейс для работы с объектом, прорисовываемым на форме /// - internal interface IDrawningObject + internal interface IDrawningObject : IEquatable { /// /// Шаг перемещения объекта diff --git a/ArmoredVehicle/MapWithSetMachineGeneric.cs b/ArmoredVehicle/MapWithSetMachineGeneric.cs index de88146..0f369f0 100644 --- a/ArmoredVehicle/MapWithSetMachineGeneric.cs +++ b/ArmoredVehicle/MapWithSetMachineGeneric.cs @@ -6,7 +6,7 @@ /// /// internal class MapWithSetMachineGeneric - where T : class, IDrawningObject + where T : class, IDrawningObject, IEquatable where U : AbstractMap { /// diff --git a/ArmoredVehicle/SetMachineGeneric.cs b/ArmoredVehicle/SetMachineGeneric.cs index f455bde..037a7d7 100644 --- a/ArmoredVehicle/SetMachineGeneric.cs +++ b/ArmoredVehicle/SetMachineGeneric.cs @@ -5,7 +5,7 @@ /// /// internal class SetMachineGeneric - where T : class + where T : class, IEquatable { /// /// Список объектов, которые храним @@ -16,7 +16,6 @@ /// Количество объектов в списке /// public int Count => _places.Count; - private int BusyPlaces = 0; /// /// Конструктор /// @@ -45,9 +44,12 @@ /// public int Insert(T machine, int position) { - if(position >= _maxCount) throw new StorageOverflowException(_maxCount); + if(_places.All(p => p.Equals(machine) == false)) + { + if (position >= _maxCount) throw new StorageOverflowException(_maxCount); - _places.Insert(position, machine); + _places.Insert(position, machine); + } return position; }