Tomasheva_Lab_№8 #9
@ -1,6 +1,6 @@
|
||||
namespace RoadTrain
|
||||
{
|
||||
internal abstract class AbstractMap
|
||||
internal abstract class AbstractMap : IEquatable<AbstractMap>
|
||||
{
|
||||
private IDrawningObject _drawningObject = null;
|
||||
protected int[,] _map = null;
|
||||
@ -110,6 +110,32 @@
|
||||
_drawningObject.DrawningObject(gr);
|
||||
return bmp;
|
||||
}
|
||||
|
||||
public bool Equals(AbstractMap? other)
|
||||
{
|
||||
if (other == null)
|
||||
return false;
|
||||
|
||||
if (_width != other._width)
|
||||
return false;
|
||||
|
||||
if (_height != other._height)
|
||||
return false;
|
||||
|
||||
if (_size_x != other._size_x)
|
||||
return false;
|
||||
|
||||
if (_size_y != other._size_y)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < _map.GetLength(0); i++)
|
||||
for (int j = 0; j < _map.GetLength(1); j++)
|
||||
if (_map[i, j] != other._map[i, j])
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected abstract void GenerateMap();
|
||||
protected abstract void DrawRoadPart(Graphics g, int i, int j);
|
||||
protected abstract void DrawBarrierPart(Graphics g, int i, int j);
|
||||
|
@ -1,9 +1,13 @@
|
||||
namespace RoadTrain
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace RoadTrain
|
||||
{
|
||||
internal class DrawningObjectRoadTrain : IDrawningObject
|
||||
{
|
||||
private DrawningRoadTrain _roadTrain = null;
|
||||
|
||||
public DrawningRoadTrain GetRoadTrain => _roadTrain;
|
||||
|
||||
public DrawningObjectRoadTrain(DrawningRoadTrain roadTrain)
|
||||
{
|
||||
_roadTrain = roadTrain;
|
||||
@ -34,5 +38,52 @@
|
||||
public string GetInfo() => _roadTrain?.GetDataForSave();
|
||||
|
||||
public static IDrawningObject Create(string data) => new DrawningObjectRoadTrain(data.CreateDrawningRoadTrain());
|
||||
|
||||
public bool Equals(IDrawningObject? other)
|
||||
{
|
||||
if (other == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
var otherRoadTrain = other as DrawningObjectRoadTrain;
|
||||
if (otherRoadTrain == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
var roadTrain = _roadTrain.RoadTrain;
|
||||
var otherRoadTrainRoadTrain = otherRoadTrain._roadTrain.RoadTrain;
|
||||
if (roadTrain.GetType() != otherRoadTrainRoadTrain.GetType())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (roadTrain.Speed != otherRoadTrainRoadTrain.Speed)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (roadTrain.Weight != otherRoadTrainRoadTrain.Weight)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (roadTrain.BodyColor != otherRoadTrainRoadTrain.BodyColor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (roadTrain is EntitySweeperRoadTrain srt && otherRoadTrainRoadTrain is EntitySweeperRoadTrain otherSrt)
|
||||
{
|
||||
if (srt.DopColor != otherSrt.DopColor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (srt.WaterTank!= otherSrt.WaterTank)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (srt.SweepingBush != otherSrt.SweepingBush)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,8 @@
|
||||
{
|
||||
this.pictureBox = new System.Windows.Forms.PictureBox();
|
||||
this.groupBox = new System.Windows.Forms.GroupBox();
|
||||
this.ButtonSortByType = new System.Windows.Forms.Button();
|
||||
this.ButtonSortByColor = new System.Windows.Forms.Button();
|
||||
this.groupBoxMaps = new System.Windows.Forms.GroupBox();
|
||||
this.textBoxNewMapName = new System.Windows.Forms.TextBox();
|
||||
this.buttonAddMap = new System.Windows.Forms.Button();
|
||||
@ -60,12 +62,14 @@
|
||||
//
|
||||
this.pictureBox.Location = new System.Drawing.Point(3, 27);
|
||||
this.pictureBox.Name = "pictureBox";
|
||||
this.pictureBox.Size = new System.Drawing.Size(644, 421);
|
||||
this.pictureBox.Size = new System.Drawing.Size(644, 480);
|
||||
this.pictureBox.TabIndex = 0;
|
||||
this.pictureBox.TabStop = false;
|
||||
//
|
||||
// groupBox
|
||||
//
|
||||
this.groupBox.Controls.Add(this.ButtonSortByType);
|
||||
this.groupBox.Controls.Add(this.ButtonSortByColor);
|
||||
this.groupBox.Controls.Add(this.groupBoxMaps);
|
||||
this.groupBox.Controls.Add(this.buttonRight);
|
||||
this.groupBox.Controls.Add(this.buttonShowOnMap);
|
||||
@ -78,11 +82,31 @@
|
||||
this.groupBox.Controls.Add(this.buttonAddRoadTrain);
|
||||
this.groupBox.Location = new System.Drawing.Point(653, 3);
|
||||
this.groupBox.Name = "groupBox";
|
||||
this.groupBox.Size = new System.Drawing.Size(175, 445);
|
||||
this.groupBox.Size = new System.Drawing.Size(175, 504);
|
||||
this.groupBox.TabIndex = 1;
|
||||
this.groupBox.TabStop = false;
|
||||
this.groupBox.Text = "Инструменты";
|
||||
//
|
||||
// ButtonSortByType
|
||||
//
|
||||
this.ButtonSortByType.Location = new System.Drawing.Point(6, 230);
|
||||
this.ButtonSortByType.Name = "ButtonSortByType";
|
||||
this.ButtonSortByType.Size = new System.Drawing.Size(160, 25);
|
||||
this.ButtonSortByType.TabIndex = 16;
|
||||
this.ButtonSortByType.Text = "Сортировать по типу";
|
||||
this.ButtonSortByType.UseVisualStyleBackColor = true;
|
||||
this.ButtonSortByType.Click += new System.EventHandler(this.ButtonSortByType_Click);
|
||||
//
|
||||
// ButtonSortByColor
|
||||
//
|
||||
this.ButtonSortByColor.Location = new System.Drawing.Point(6, 258);
|
||||
this.ButtonSortByColor.Name = "ButtonSortByColor";
|
||||
this.ButtonSortByColor.Size = new System.Drawing.Size(160, 25);
|
||||
this.ButtonSortByColor.TabIndex = 15;
|
||||
this.ButtonSortByColor.Text = "Сортировать по цвету";
|
||||
this.ButtonSortByColor.UseVisualStyleBackColor = true;
|
||||
this.ButtonSortByColor.Click += new System.EventHandler(this.ButtonSortByColor_Click);
|
||||
//
|
||||
// groupBoxMaps
|
||||
//
|
||||
this.groupBoxMaps.Controls.Add(this.textBoxNewMapName);
|
||||
@ -92,7 +116,7 @@
|
||||
this.groupBoxMaps.Controls.Add(this.comboBoxSelectorMap);
|
||||
this.groupBoxMaps.Location = new System.Drawing.Point(6, 22);
|
||||
this.groupBoxMaps.Name = "groupBoxMaps";
|
||||
this.groupBoxMaps.Size = new System.Drawing.Size(163, 211);
|
||||
this.groupBoxMaps.Size = new System.Drawing.Size(163, 200);
|
||||
this.groupBoxMaps.TabIndex = 14;
|
||||
this.groupBoxMaps.TabStop = false;
|
||||
this.groupBoxMaps.Text = "Карты";
|
||||
@ -116,7 +140,7 @@
|
||||
//
|
||||
// buttonRemoveMap
|
||||
//
|
||||
this.buttonRemoveMap.Location = new System.Drawing.Point(6, 180);
|
||||
this.buttonRemoveMap.Location = new System.Drawing.Point(6, 165);
|
||||
this.buttonRemoveMap.Name = "buttonRemoveMap";
|
||||
this.buttonRemoveMap.Size = new System.Drawing.Size(151, 25);
|
||||
this.buttonRemoveMap.TabIndex = 15;
|
||||
@ -130,7 +154,7 @@
|
||||
this.listBoxMaps.ItemHeight = 15;
|
||||
this.listBoxMaps.Location = new System.Drawing.Point(6, 110);
|
||||
this.listBoxMaps.Name = "listBoxMaps";
|
||||
this.listBoxMaps.Size = new System.Drawing.Size(151, 64);
|
||||
this.listBoxMaps.Size = new System.Drawing.Size(151, 49);
|
||||
this.listBoxMaps.TabIndex = 1;
|
||||
this.listBoxMaps.Click += new System.EventHandler(this.ListBoxMaps_SelectedIndexChanged);
|
||||
//
|
||||
@ -152,7 +176,7 @@
|
||||
this.buttonRight.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonRight.BackgroundImage = global::RoadTrain.Properties.Resources.arrowRight;
|
||||
this.buttonRight.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
||||
this.buttonRight.Location = new System.Drawing.Point(103, 418);
|
||||
this.buttonRight.Location = new System.Drawing.Point(103, 477);
|
||||
this.buttonRight.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.buttonRight.Name = "buttonRight";
|
||||
this.buttonRight.Size = new System.Drawing.Size(26, 22);
|
||||
@ -162,7 +186,7 @@
|
||||
//
|
||||
// buttonShowOnMap
|
||||
//
|
||||
this.buttonShowOnMap.Location = new System.Drawing.Point(6, 357);
|
||||
this.buttonShowOnMap.Location = new System.Drawing.Point(6, 420);
|
||||
this.buttonShowOnMap.Name = "buttonShowOnMap";
|
||||
this.buttonShowOnMap.Size = new System.Drawing.Size(160, 25);
|
||||
this.buttonShowOnMap.TabIndex = 4;
|
||||
@ -175,7 +199,7 @@
|
||||
this.buttonUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonUp.BackgroundImage = global::RoadTrain.Properties.Resources.arrowUp;
|
||||
this.buttonUp.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
||||
this.buttonUp.Location = new System.Drawing.Point(74, 390);
|
||||
this.buttonUp.Location = new System.Drawing.Point(74, 449);
|
||||
this.buttonUp.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.buttonUp.Name = "buttonUp";
|
||||
this.buttonUp.Size = new System.Drawing.Size(26, 22);
|
||||
@ -188,7 +212,7 @@
|
||||
this.buttonDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonDown.BackgroundImage = global::RoadTrain.Properties.Resources.arrowDown;
|
||||
this.buttonDown.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
||||
this.buttonDown.Location = new System.Drawing.Point(74, 417);
|
||||
this.buttonDown.Location = new System.Drawing.Point(74, 476);
|
||||
this.buttonDown.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.buttonDown.Name = "buttonDown";
|
||||
this.buttonDown.Size = new System.Drawing.Size(26, 22);
|
||||
@ -201,7 +225,7 @@
|
||||
this.buttonLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonLeft.BackgroundImage = global::RoadTrain.Properties.Resources.arrowLeft;
|
||||
this.buttonLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
||||
this.buttonLeft.Location = new System.Drawing.Point(43, 417);
|
||||
this.buttonLeft.Location = new System.Drawing.Point(43, 476);
|
||||
this.buttonLeft.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.buttonLeft.Name = "buttonLeft";
|
||||
this.buttonLeft.Size = new System.Drawing.Size(26, 22);
|
||||
@ -211,14 +235,14 @@
|
||||
//
|
||||
// maskedTextBoxPosition
|
||||
//
|
||||
this.maskedTextBoxPosition.Location = new System.Drawing.Point(6, 268);
|
||||
this.maskedTextBoxPosition.Location = new System.Drawing.Point(6, 328);
|
||||
this.maskedTextBoxPosition.Name = "maskedTextBoxPosition";
|
||||
this.maskedTextBoxPosition.Size = new System.Drawing.Size(160, 23);
|
||||
this.maskedTextBoxPosition.TabIndex = 5;
|
||||
//
|
||||
// buttonShowStorage
|
||||
//
|
||||
this.buttonShowStorage.Location = new System.Drawing.Point(6, 330);
|
||||
this.buttonShowStorage.Location = new System.Drawing.Point(6, 393);
|
||||
this.buttonShowStorage.Name = "buttonShowStorage";
|
||||
this.buttonShowStorage.Size = new System.Drawing.Size(160, 25);
|
||||
this.buttonShowStorage.TabIndex = 3;
|
||||
@ -228,7 +252,7 @@
|
||||
//
|
||||
// buttonRemoveRoadTrain
|
||||
//
|
||||
this.buttonRemoveRoadTrain.Location = new System.Drawing.Point(6, 295);
|
||||
this.buttonRemoveRoadTrain.Location = new System.Drawing.Point(6, 355);
|
||||
this.buttonRemoveRoadTrain.Name = "buttonRemoveRoadTrain";
|
||||
this.buttonRemoveRoadTrain.Size = new System.Drawing.Size(160, 27);
|
||||
this.buttonRemoveRoadTrain.TabIndex = 2;
|
||||
@ -238,7 +262,7 @@
|
||||
//
|
||||
// buttonAddRoadTrain
|
||||
//
|
||||
this.buttonAddRoadTrain.Location = new System.Drawing.Point(6, 239);
|
||||
this.buttonAddRoadTrain.Location = new System.Drawing.Point(6, 299);
|
||||
this.buttonAddRoadTrain.Name = "buttonAddRoadTrain";
|
||||
this.buttonAddRoadTrain.Size = new System.Drawing.Size(160, 25);
|
||||
this.buttonAddRoadTrain.TabIndex = 1;
|
||||
@ -284,7 +308,7 @@
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(831, 450);
|
||||
this.ClientSize = new System.Drawing.Size(831, 519);
|
||||
this.Controls.Add(this.groupBox);
|
||||
this.Controls.Add(this.pictureBox);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
@ -327,5 +351,7 @@
|
||||
private MenuStrip menuStrip1;
|
||||
private ToolStripMenuItem SaveToolStripMenuItem;
|
||||
private ToolStripMenuItem LoadToolStripMenuItem;
|
||||
private Button ButtonSortByType;
|
||||
private Button ButtonSortByColor;
|
||||
}
|
||||
}
|
@ -165,6 +165,11 @@ namespace RoadTrain
|
||||
MessageBox.Show($"Ошибка переполнения хранилища: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
_logger.LogWarning($"Ошибка переполнения хранилища: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"Такой объект уже есть на карте", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
_logger.LogWarning($"Ошибка переполнения хранилища: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -321,5 +326,37 @@ namespace RoadTrain
|
||||
}
|
||||
ReloadMaps();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка по типу
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonSortByType_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (listBoxMaps.SelectedIndex == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].Sort(new RoadTrainCompareByType());
|
||||
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
|
||||
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка по цвету
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ButtonSortByColor_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (listBoxMaps.SelectedIndex == -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].Sort(new RoadTrainCompareByColor());
|
||||
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
|
||||
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
namespace RoadTrain
|
||||
{
|
||||
internal interface IDrawningObject
|
||||
/// <summary>
|
||||
/// Интерфейс для работы с объектом, прорисовываемым на форме
|
||||
/// </summary>
|
||||
internal interface IDrawningObject : IEquatable<IDrawningObject>
|
||||
{
|
||||
/// <summary>
|
||||
/// Шаг перемещения объекта
|
||||
|
@ -6,7 +6,7 @@
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <typeparam name="U"></typeparam>
|
||||
internal class MapWithSetRoadTrainsGeneric<T, U>
|
||||
where T : class, IDrawningObject
|
||||
where T : class, IDrawningObject, IEquatable<T>
|
||||
where U : AbstractMap
|
||||
{
|
||||
/// <summary>
|
||||
@ -146,6 +146,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка
|
||||
/// </summary>
|
||||
/// <param name="comparer"></param>
|
||||
public void Sort(IComparer<T> comparer)
|
||||
{
|
||||
_setRoadTrains.SortSet(comparer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Метод отрисовки фона
|
||||
/// </summary>
|
||||
|
@ -90,17 +90,6 @@ namespace RoadTrain
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Метод записи информации в файл
|
||||
/// </summary>
|
||||
/// <param name="text">Строка, которую следует записать</param>
|
||||
/// <param name="stream">Поток для записи</param>
|
||||
private static void WriteToFile(string text, FileStream stream)
|
||||
{
|
||||
byte[] info = new UTF8Encoding(true).GetBytes(text);
|
||||
stream.Write(info, 0, info.Length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сохранение информации по грузовикам хранилища в файл
|
||||
@ -134,7 +123,6 @@ namespace RoadTrain
|
||||
{
|
||||
throw new Exception("Файл не найден");
|
||||
}
|
||||
string bufferTextFromFile = "";
|
||||
using (StreamReader sr = new(filename))
|
||||
{
|
||||
string str = "";
|
||||
|
@ -17,6 +17,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="GitForWindows" Version="2.39.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
|
||||
|
58
RoadTrain/RoadTrain/RoadTrainCompareByColor.cs
Normal file
58
RoadTrain/RoadTrain/RoadTrainCompareByColor.cs
Normal file
@ -0,0 +1,58 @@
|
||||
namespace RoadTrain
|
||||
{
|
||||
internal class RoadTrainCompareByColor : IComparer<IDrawningObject>
|
||||
{
|
||||
public int Compare(IDrawningObject? x, IDrawningObject? y)
|
||||
{
|
||||
if (x == null && y == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (x == null && y != null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (x != null && y == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
var xRoadTrain = x as DrawningObjectRoadTrain;
|
||||
var yRoadTrain = y as DrawningObjectRoadTrain;
|
||||
if (xRoadTrain == null && yRoadTrain == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (xRoadTrain == null && yRoadTrain != null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (xRoadTrain != null && yRoadTrain == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
int xColor = xRoadTrain.GetRoadTrain.RoadTrain.BodyColor.ToArgb();
|
||||
int yColor = yRoadTrain.GetRoadTrain.RoadTrain.BodyColor.ToArgb();
|
||||
|
||||
if (xColor != yColor)
|
||||
return xColor.CompareTo(yColor);
|
||||
|
||||
if (xRoadTrain.GetRoadTrain.RoadTrain is EntitySweeperRoadTrain xSweeper && yRoadTrain.GetRoadTrain.RoadTrain is EntitySweeperRoadTrain ySweeper)
|
||||
{
|
||||
xColor = xSweeper.DopColor.ToArgb();
|
||||
yColor = ySweeper.DopColor.ToArgb();
|
||||
|
||||
if (xColor != yColor)
|
||||
return xColor.CompareTo(yColor);
|
||||
|
||||
}
|
||||
|
||||
var speedCompare = xRoadTrain.GetRoadTrain.RoadTrain.Speed.CompareTo(yRoadTrain.GetRoadTrain.RoadTrain.Speed);
|
||||
if (speedCompare != 0)
|
||||
{
|
||||
return speedCompare;
|
||||
}
|
||||
return xRoadTrain.GetRoadTrain.RoadTrain.Weight.CompareTo(yRoadTrain.GetRoadTrain.RoadTrain.Weight);
|
||||
}
|
||||
}
|
||||
}
|
49
RoadTrain/RoadTrain/RoadTrainCompareByType.cs
Normal file
49
RoadTrain/RoadTrain/RoadTrainCompareByType.cs
Normal file
@ -0,0 +1,49 @@
|
||||
namespace RoadTrain
|
||||
{
|
||||
internal class RoadTrainCompareByType : IComparer<IDrawningObject>
|
||||
{
|
||||
public int Compare(IDrawningObject? x, IDrawningObject? y)
|
||||
{
|
||||
if (x == null && y == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (x == null && y != null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (x != null && y == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
var xRoadTrain = x as DrawningObjectRoadTrain;
|
||||
var yRoadTrain = y as DrawningObjectRoadTrain;
|
||||
if (xRoadTrain == null && yRoadTrain == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (xRoadTrain == null && yRoadTrain != null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (xRoadTrain != null && yRoadTrain == null)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if (xRoadTrain.GetRoadTrain.GetType().Name != yRoadTrain.GetRoadTrain.GetType().Name)
|
||||
{
|
||||
if (xRoadTrain.GetRoadTrain.GetType().Name == "DrawningRoadTrain")
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
var speedCompare = xRoadTrain.GetRoadTrain.RoadTrain.Speed.CompareTo(yRoadTrain.GetRoadTrain.RoadTrain.Speed);
|
||||
if (speedCompare != 0)
|
||||
{
|
||||
return speedCompare;
|
||||
}
|
||||
return xRoadTrain.GetRoadTrain.RoadTrain.Weight.CompareTo(yRoadTrain.GetRoadTrain.RoadTrain.Weight);
|
||||
}
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class SetRoadTrainsGeneric<T>
|
||||
where T : class
|
||||
where T : class, IEquatable<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// Массив объектов, которые храним
|
||||
@ -39,7 +39,7 @@
|
||||
// проверка на _maxCount
|
||||
if (_places.Count + 1 >= _maxCount)
|
||||
throw new StorageOverflowException(_maxCount);
|
||||
_places.Insert(0, roadTrain);
|
||||
Insert(roadTrain, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -51,6 +51,10 @@
|
||||
/// <returns></returns>
|
||||
public int Insert(T roadTrain, int position)
|
||||
{
|
||||
// проверка на уникальность
|
||||
if (_places.Contains(roadTrain))
|
||||
throw new Exception("Такой объект уже есть на карте");
|
||||
|
||||
// проверка позиции
|
||||
if (position < 0 || position >= _maxCount)
|
||||
return -1;
|
||||
@ -60,7 +64,7 @@
|
||||
throw new StorageOverflowException(_maxCount);
|
||||
|
||||
// вставка по позиции
|
||||
_places[position] = roadTrain;
|
||||
_places.Insert(position, roadTrain);
|
||||
return position;
|
||||
}
|
||||
|
||||
@ -133,5 +137,18 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Сортировка набора объектов
|
||||
/// </summary>
|
||||
/// <param name="comparer"></param>
|
||||
public void SortSet(IComparer<T> comparer)
|
||||
{
|
||||
if (comparer == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_places.Sort(comparer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user