ISEbd-12 Platonov_A.M. LabWork02 Simple #2

Closed
cyxaruk wants to merge 7 commits from LabWork02 into LabWork01
5 changed files with 166 additions and 2 deletions
Showing only changes of commit e3268bf2a9 - Show all commits

View File

@ -1,9 +1,13 @@
namespace ProjectGasMachine.Drawnings;
 namespace ProjectGasMachine.Drawnings;
/// <summary>
/// Направление перемещения
/// </summary>
public enum DirectionType
{
/// <summary>
/// неизвестное направление
/// </summary>
Unknow = -1,
/// <summary>
/// Вверх
/// </summary>

View File

@ -39,6 +39,29 @@ public class DrawningMachine
/// </summary>
private readonly int _drawningMachineHeight = 70;
/// <summary>
/// координата X объекта
/// </summary>
public int? GetPosX => _startPosX;
/// <summary>
/// координата Y объекта
/// </summary>
public int? GetPosY => _startPosY;
/// <summary>
/// ширина объекта
/// </summary>
public int GetWidth => _drawningMachineWidth;
/// <summary>
/// высота объекта
/// </summary>
public int GetHeight => _drawningMachineHeight;
/// <summary>
/// пустой конструктор
/// </summary>

View File

@ -65,5 +65,72 @@ public abstract class AbstractStrategy
MoveToTarget();
}
/// <summary>
/// Перемещение влево
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
protected bool MoveLeft() => MoveTo(MovementDirection.Left);
/// <summary>
/// Перемещение вправо
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
protected bool MoveRight() => MoveTo(MovementDirection.Right);
/// <summary>
/// Перемещение вверх
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
protected bool MoveUp() => MoveTo(MovementDirection.Up);
/// <summary>
/// Перемещение вниз
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
protected bool MoveDown() => MoveTo(MovementDirection.Down);
/// <summary>
/// Параметры объекта
/// </summary>
protected ObjectParameters? GetObjectParameters => _moveableObject?.GetObjectPosition;
/// <summary>
/// Шаг объекта
/// </summary>
/// <returns></returns>
protected int? GetStep()
{
if (_state != StrategyStatus.InProgress)
{
return null;
}
return _moveableObject?.GetStep;
}
/// <summary>
/// Перемещение к цели
/// </summary>
protected abstract void MoveToTarget();
/// <summary>
/// Достигнута ли цель
/// </summary>
/// <returns></returns>
protected abstract bool IsTargetDestination();
/// <summary>
/// Попытка перемещения в требуемом направлении
/// </summary>
/// <param name="movementDirection">Направление</param>
/// <returns>Результат попытки (true - удалось переместиться, false - неудача)</returns>
private bool MoveTo(MovementDirection movementDirection)
{
if (_state != StrategyStatus.InProgress)
{
return false;
}
return _moveableObject?.TryMoveObject(movementDirection) ?? false;
}
}

View File

@ -0,0 +1,70 @@
using ProjectGasMachine.Drawnings;
using System.Reflection.PortableExecutable;
namespace ProjectGasMachine.MovementStrategy;
/// <summary>
/// класс-реализация IMoveableObjects с использованием DrawningMachine
/// </summary>
public class MoveableMachine : IMoveableObjects
{
/// <summary>
/// поле-объект класса DrawningMachine или его наследника
/// </summary>
private readonly DrawningMachine? _machine = null;
/// <summary>
/// конструктор
/// </summary>
/// <param name="machine">объект класса DrawningMachine</param>
public MoveableMachine(DrawningMachine machine)
{
_machine = machine;
}
public ObjectParameters? GetObjectPosition
{
get
{
if (_machine == null || _machine.EntityGas == null || !_machine.GetPosX.HasValue || !_machine.GetPosY.HasValue)
{
return null;
}
return new ObjectParameters(_machine.GetPosX.Value, _machine.GetPosY.Value, _machine.GetWidth, _machine.GetHeight);
}
}
public int GetStep => (int)(_machine?.EntityGas?.Step ?? 0);
public bool TryMoveObject(MovementDirection direction)
{
if (_machine == null || _machine.EntityGas == null)
{
return false;
}
return _machine.MoveTransport(GetDirectionType(direction));
}
/// <summary>
/// конвертация из MovementDirection в DirectionType
/// </summary>
/// <param name="direction"></param>
/// <returns></returns>
private static DirectionType GetDirectionType(MovementDirection direction)
{
return direction switch
{
MovementDirection.Left => DirectionType.Left,
MovementDirection.Right => DirectionType.Right,
MovementDirection.Up => DirectionType.Up,
MovementDirection.Down => DirectionType.Down,
_ => DirectionType.Unknow,
};
}
}

View File

@ -1,4 +1,4 @@
namespace ProjectCar
namespace ProjectGasMachine
{
internal static class Program
{