diff --git a/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DirectionType.cs b/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DirectionType.cs
index e569314..347c4b9 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DirectionType.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DirectionType.cs
@@ -1,8 +1,14 @@
namespace DoubleDeckerBus.Drawnings;
-
+///
+/// Направление перемещения
+///
public enum DirectionType
{
+ ///
+ /// Неизвестное направление
+ ///
Unknown = -1,
+
///
/// вверх
///
diff --git a/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingBus.cs b/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingBus.cs
index 1035a15..92599a0 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingBus.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingBus.cs
@@ -7,30 +7,69 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.Drawnings;
+///
+/// Класс, отвечающий за прорисовку и перемещение базового объекта-сущности
+///
public class DrawingBus
{
+ ///
+ /// Класс-сущность
+ ///
public EntityBus? EntityBus { get; protected set; }
+ ///
+ /// Ширина окна
+ ///
private int? _pictureWidth;
+ ///
+ /// Высота окна
+ ///
private int? _pictureHeight;
+ ///
+ /// Левая координата прорисовки автобуса
+ ///
protected int? _startPosX;
+ ///
+ /// Верхняя кооридната прорисовки автобуса
+ ///
protected int? _startPosY;
- private readonly int _drawingBusWidth = 105;
+ ///
+ /// Ширина прорисовки автобуса
+ ///
+ private readonly int _drawingBusWidth = 100;
- private readonly int _drawingBusHeight = 50;
+ ///
+ /// Высота прорисовки автобуса
+ ///
+ private readonly int _drawingBusHeight = 40;
+ ///
+ /// Координата X объекта
+ ///
public int? GetPosX => _startPosX;
+ ///
+ /// Координата Y объекта
+ ///
public int? GetPosY => _startPosY;
+ ///
+ /// Ширина объекта
+ ///
public int GetWidth => _drawingBusWidth;
+ ///
+ /// Высота объекта
+ ///
public int GetHeight => _drawingBusHeight;
+ ///
+ /// Пустой конструктор
+ ///
private DrawingBus()
{
_pictureWidth = null;
@@ -39,32 +78,44 @@ public class DrawingBus
_startPosY = null;
}
+ ///
+ /// Конструктор
+ ///
+ /// Скорость
+ /// Вес
+ /// Основной цвет
public DrawingBus(int speed, int weight, Color bodyColor) : this()
{
EntityBus = new EntityBus(speed, weight, bodyColor);
}
+ ///
+ /// Конструктор для наследников
+ ///
+ /// Ширина прорисовки автобуса
+ /// Высота прорисовки автобуса
protected DrawingBus(int drawingBusWidth, int drawingBusHeight) : this()
{
_drawingBusWidth = drawingBusWidth;
_drawingBusHeight = drawingBusHeight;
}
+
///
- /// размер окна
+ /// Установка границ поля
///
- ///
- ///
- ///
- public bool SetPictureSize(int width, int hight)
+ /// Ширина поля
+ /// Высота поля
+ /// true - границы заданы, false - проверка не пройдена, нельзя разместить объект в этих размерах
+ public bool SetPictureSize(int width, int height)
{
- if (_drawingBusWidth > width || _drawingBusHeight > hight)
+ if (_drawingBusWidth > width || _drawingBusHeight > height)
{
return false;
}
_pictureWidth = width;
- _pictureHeight = hight;
+ _pictureHeight = height;
if (_startPosX.HasValue && _startPosX.Value + _drawingBusWidth > _pictureWidth)
{
@@ -80,10 +131,10 @@ public class DrawingBus
}
///
- /// установить начальную позицию
+ /// Установка позиции
///
- ///
- ///
+ /// Координата X
+ /// Координа Y
public void SetPosition(int x, int y)
{
if (!_pictureHeight.HasValue || !_pictureWidth.HasValue)
@@ -119,6 +170,11 @@ public class DrawingBus
}
}
+ ///
+ /// Изменение направления перемещения
+ ///
+ /// Направление
+ /// true - перемещене выполнено, false - перемещение невозможно
public bool MoveTransport(DirectionType direction)
{
if (EntityBus == null || !_startPosX.HasValue || !_startPosY.HasValue)
@@ -159,6 +215,10 @@ public class DrawingBus
}
}
+ ///
+ /// Прорисовка объекта
+ ///
+ ///
public virtual void DrawTrasnport(Graphics g)
{
if (EntityBus == null || !_startPosX.HasValue || !_startPosY.HasValue)
diff --git a/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingDoubleDeckerBus.cs
index 6e24d22..f3f2f04 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingDoubleDeckerBus.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/Drawnings/DrawingDoubleDeckerBus.cs
@@ -2,10 +2,19 @@
namespace DoubleDeckerBus.Drawnings;
///
-///
+/// Класс, отвечающий за прорисовку и перемещение продвинутого объекта сущности
///
public class DrawingDoubleDeckerBus : DrawingBus
{
+ ///
+ /// Конструктор
+ ///
+ /// Скорость
+ /// Вес
+ /// Основной цвет
+ /// Доп цвет
+ /// Признак наличия второго этажа
+ /// Признак наличия полос на кузове
public DrawingDoubleDeckerBus(int speed, double weight, Color bodyColor, Color additionalColor, bool secondFloor, bool stripes) : base (115,55)
{
EntityBus = new EntityDoubleDeckerBus(speed, weight, bodyColor, additionalColor, secondFloor, stripes);
diff --git a/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityBus.cs b/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityBus.cs
index 3ab2f79..e1ae78c 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityBus.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityBus.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.Entities;
///
-/// Класс сущность автобус
+/// Класс сущность "Автобус"
///
public class EntityBus
{
@@ -14,24 +14,28 @@ public class EntityBus
/// Скорость
///
public int Speed { get; private set; }
+
///
/// Вес
///
public double Weight { get; private set; }
+
///
/// Основной цвет
///
public Color BodyColor { get; private set; }
+
///
/// Расстояние перемещения за раз
///
public double Step => Speed * 100 / Weight;
+
///
/// Конструктор базовой сущности
///
- ///
- ///
- ///
+ /// Скорость
+ /// Вес автобуса
+ /// Основной цвет
public EntityBus(int speed, double weight, Color bodyColor)
{
Speed = speed;
diff --git a/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityDoubleDeckerBus.cs b/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityDoubleDeckerBus.cs
index 5585664..d955e88 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityDoubleDeckerBus.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/Entities/EntityDoubleDeckerBus.cs
@@ -5,23 +5,26 @@ public class EntityDoubleDeckerBus : EntityBus
/// Дополнительный цвет
///
public Color AdditionalColor { get; private set; }
+
///
/// Признак (опция) наличия второго этажа
///
public bool SecondFloor { get; private set; }
+
///
/// Признак (опция) наличия полосок на автобусе
///
public bool Stripes { get; private set; }
///
- /// Конструктор наследуемого класса
+ /// Конструктор продвинутой сущности
///
- ///
- ///
- ///
- ///
- ///
+ /// Скорость
+ /// Вес
+ /// Основной цвет
+ /// Дополнительный цвет
+ /// Признак наличия второго этажа
+ /// Призна наличия полос на кузове
public EntityDoubleDeckerBus(int speed, double weight, Color bodyColor, Color additionalColor, bool secondFloor, bool stripes) : base(speed, weight, bodyColor)
{
AdditionalColor = additionalColor;
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/AbstractStrategy.cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/AbstractStrategy.cs
index 2fef05a..fd85537 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/AbstractStrategy.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/AbstractStrategy.cs
@@ -6,18 +6,42 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.MovementStrategy;
+///
+/// Класс-стратегия перемещения объекта
+///
public abstract class AbstractStrategy
{
+ ///
+ /// Перемещаемый объект
+ ///
private IMoveableObject? _moveableObject;
+ ///
+ /// Статус перемещения
+ ///
private StrategyStatus _state = StrategyStatus.NotInit;
+ ///
+ /// Ширина поля
+ ///
protected int FieldWidth { get; private set; }
+ ///
+ /// Высота поля
+ ///
protected int FieldHeight { get; private set; }
+ ///
+ /// Статус перемещения
+ ///
public StrategyStatus GetStatus() { return _state; }
-
+
+ ///
+ /// Установка данных
+ ///
+ /// Перемещаемый объект
+ /// Ширина поля
+ /// Высота поля
public void SetData(IMoveableObject movableObject, int width, int height)
{
if (movableObject == null)
@@ -31,7 +55,10 @@ public abstract class AbstractStrategy
FieldWidth = width;
FieldHeight = height;
}
-
+
+ ///
+ /// Шаг перемещения
+ ///
public void MakeStep()
{
if (_state != StrategyStatus.InProgress)
@@ -48,16 +75,39 @@ public abstract class AbstractStrategy
MoveToTarget();
}
+ ///
+ /// Перемещение влево
+ ///
+ /// Результат перемещения (true - удалось переместиться, false - неудача)
protected bool MoveLeft() => MoveTo(MovementDirection.Left);
+ ///
+ /// Перемещение вправо
+ ///
+ /// Результат перемещения (true - удалось переместиться, false - неудача)
protected bool MoveRight() => MoveTo(MovementDirection.Right);
+ ///
+ /// Перемещение вверх
+ ///
+ /// Результат перемещения (true - удалось переместиться, false - неудача)
protected bool MoveUp() => MoveTo(MovementDirection.Up);
+ ///
+ /// Перемещение вниз
+ ///
+ /// Результат перемещения (true - удалось переместиться, false - неудача)
protected bool MoveDown() => MoveTo(MovementDirection.Down);
+ ///
+ /// Параметры объекта
+ ///
protected ObjectParametrs? GetObjectParaments => _moveableObject?.GetObjectPosition;
+ ///
+ /// Шаг объекта
+ ///
+ ///
protected int? GetStep()
{
if (_state != StrategyStatus.InProgress)
@@ -68,10 +118,22 @@ public abstract class AbstractStrategy
return _moveableObject?.GetStep;
}
+ ///
+ /// Перемещение к цели
+ ///
protected abstract void MoveToTarget();
+ ///
+ /// Достигнута ли цель
+ ///
+ ///
protected abstract bool IsTargetDestination();
+ ///
+ /// Попытка перемещения в требуемом направлении
+ ///
+ /// Направление
+ /// Результат попытки (true - удалось переместиться, false - неудача)
private bool MoveTo(MovementDirection movementDirection)
{
if (_state != StrategyStatus.InProgress)
@@ -81,4 +143,4 @@ public abstract class AbstractStrategy
return _moveableObject?.TryMoveObject(movementDirection) ?? false;
}
-}
+}
\ No newline at end of file
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/IMoveableObject..cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/IMoveableObject..cs
index 5805ce2..b27cf22 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/IMoveableObject..cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/IMoveableObject..cs
@@ -6,11 +6,25 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.MovementStrategy;
+///
+/// Интерфейс для работы с перемещаемым объектом
+///
public interface IMoveableObject
{
+ ///
+ /// Получение координаты объекта
+ ///
ObjectParametrs? GetObjectPosition { get; }
+ ///
+ /// Шаг объекта
+ ///
int GetStep { get; }
+ ///
+ /// Попытка переместить объект в указанном направлении
+ ///
+ /// Направление
+ /// true - объект перемещен, false - перемещение невозможно
bool TryMoveObject(MovementDirection direction);
}
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveToCenter.cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveToCenter.cs
index 86cf34f..17f1a2d 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveToCenter.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveToCenter.cs
@@ -6,6 +6,9 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.MovementStrategy;
+///
+/// Стратегия перемещения объекта в центр экрана
+///
public class MoveToCenter : AbstractStrategy
{
protected override bool IsTargetDestination()
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveableBus.cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveableBus.cs
index 36006fd..3dc16bb 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveableBus.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MoveableBus.cs
@@ -7,16 +7,25 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.MovementStrategy;
-
+///
+/// Класс-реализация IMoveableObject с использованием DrawningBus
+///
public class MoveableBus : IMoveableObject
{
+ ///
+ /// Поле-объект класса DrawningBus или его наследника
+ ///
private DrawingBus? _bus = null;
-
+ ///
+ /// Конструктор
+ ///
+ /// Объект класса DrawningBus
public MoveableBus(DrawingBus bus)
{
_bus = bus;
}
+
public ObjectParametrs? GetObjectPosition
{
get
@@ -41,6 +50,11 @@ public class MoveableBus : IMoveableObject
return _bus.MoveTransport(GetDirectionType(direction));
}
+ ///
+ /// Конвертация из MovementDirection в DirectionType
+ ///
+ /// MovementDirection
+ /// DirectionType
private static DirectionType GetDirectionType(MovementDirection direction)
{
return direction switch
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovementDirection.cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovementDirection.cs
index 1ce4c9c..898f4c5 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovementDirection.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovementDirection.cs
@@ -6,6 +6,9 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.MovementStrategy;
+///
+/// Направление перемещения
+///
public enum MovementDirection
{
///
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovetoBorder.cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovetoBorder.cs
index f2edf42..e1eb81d 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovetoBorder.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/MovetoBorder.cs
@@ -5,7 +5,9 @@ using System.Text;
using System.Threading.Tasks;
namespace DoubleDeckerBus.MovementStrategy;
-
+///
+/// Стратегия перемещения объекта в правый нижний угол
+///
internal class MovetoBorder : AbstractStrategy
{
protected override bool IsTargetDestination()
@@ -15,7 +17,7 @@ internal class MovetoBorder : AbstractStrategy
{
return false;
}
- return objParams.DownBorder + GetStep() > FieldHeight - 5 && objParams.RightBorder + GetStep() > FieldWidth - 5;
+ return objParams.DownBorder + GetStep() >= FieldHeight && objParams.RightBorder + GetStep() >= FieldWidth;
}
protected override void MoveToTarget()
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/ObjectParametrs.cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/ObjectParametrs.cs
index 60610ba..0eb7c60 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/ObjectParametrs.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/ObjectParametrs.cs
@@ -8,26 +8,63 @@ namespace DoubleDeckerBus.MovementStrategy;
public class ObjectParametrs
{
+ ///
+ /// Координата X
+ ///
private readonly int _x;
+ ///
+ /// Координата Y
+ ///
private readonly int _y;
+ ///
+ /// Ширина объекта
+ ///
private readonly int _width;
+ ///
+ /// Высота объекта
+ ///
private readonly int _height;
+ ///
+ /// Левая граница
+ ///
public int LeftBorder => _x;
+ ///
+ /// Верхняя граница
+ ///
public int TopBorder => _y;
-
+
+ ///
+ /// Правая граница
+ ///
public int RightBorder => _x + _width;
+ ///
+ /// Нижняя граница
+ ///
public int DownBorder => _y + _height;
+ ///
+ /// Середина обхекта по горизонтали
+ ///
public int ObjectMiddleHorizontal => _x + _width / 2;
+ ///
+ /// Середина объекта по вертикали
+ ///
public int ObjectMiddleVertical => _y + _height / 2;
+ ///
+ /// Конструктор
+ ///
+ /// Координата X
+ /// Координата Y
+ /// Ширина объекта
+ /// Высота объекта
public ObjectParametrs(int x, int y, int width, int height)
{
_x = x;
diff --git a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/StrategyStatus.cs b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/StrategyStatus.cs
index 54d76ed..85556b7 100644
--- a/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/StrategyStatus.cs
+++ b/DoubleDeckerBus/DoubleDeckerBus/MovementStrategy/StrategyStatus.cs
@@ -6,16 +6,21 @@ using System.Threading.Tasks;
namespace DoubleDeckerBus.MovementStrategy;
+///
+/// Статус выполнения операции перемещения
+///
public enum StrategyStatus
{
///
/// Все готово к началу
///
NotInit,
+
///
/// Выполняется
///
InProgress,
+
///
/// Завершено
///