ISEbd-12 Platonov_A.M. LabWork02 Simple #2
@ -1,9 +1,13 @@
|
||||
namespace ProjectGasMachine.Drawnings;
|
||||
namespace ProjectGasMachine.Drawnings;
|
||||
/// <summary>
|
||||
/// Направление перемещения
|
||||
/// </summary>
|
||||
public enum DirectionType
|
||||
{
|
||||
/// <summary>
|
||||
/// неизвестное направление
|
||||
/// </summary>
|
||||
Unknow = -1,
|
||||
/// <summary>
|
||||
/// Вверх
|
||||
/// </summary>
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
70
ProjectCar/ProjectCar/MovementStrategy/MoveableMachine.cs
Normal file
70
ProjectCar/ProjectCar/MovementStrategy/MoveableMachine.cs
Normal 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,
|
||||
};
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
namespace ProjectCar
|
||||
namespace ProjectGasMachine
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user