часть Movement
This commit is contained in:
parent
7feba0a042
commit
9ae3816169
@ -16,14 +16,13 @@ public class DrawingSeaplane : DrawningPlane
|
||||
/// <param name="bodyKit">Наличие обвеса</param>
|
||||
/// <param name="floats">Наличие поплавков</param>
|
||||
/// <param name="inflatableBoat">Наличие надувной лодки</param>
|
||||
public DrawingSeaplane(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool wing, bool sportLine) : base(110, 60)
|
||||
public DrawingSeaplane(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool floats, bool inflatableBoat) : base(110, 60)
|
||||
{
|
||||
EntityPlane = new EntitySeaplane(speed, weight, bodyColor, additionalColor, bodyKit, wing, sportLine);
|
||||
EntityPlane = new EntitySeaplane(speed, weight, bodyColor, additionalColor, bodyKit, floats, inflatableBoat);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public override void DrawTransport(Graphics g)
|
||||
{
|
||||
if (EntityPlane == null || EntityPlane is not EntitySeaplane seaplane || !_startPosX.HasValue! || _startPosY.HasValue )
|
||||
@ -31,24 +30,13 @@ public class DrawingSeaplane : DrawningPlane
|
||||
return;
|
||||
}
|
||||
|
||||
base.DrawTransport(g);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Прорисовка объекта
|
||||
/// </summary>
|
||||
/// <param name="g"></param>
|
||||
public void DrawTransport(Graphics g)
|
||||
{
|
||||
|
||||
|
||||
Pen pen = new(Color.Black);
|
||||
Pen additionalpen = new(EntitySeaplane.AdditionalColor);
|
||||
Pen additionalpen = new(EntityPlane.AdditionalColor);
|
||||
|
||||
|
||||
|
||||
//корпус гидросамолета
|
||||
Brush br = new SolidBrush(EntitySeaplane.BodyColor);
|
||||
Brush br = new SolidBrush(EntityPlane.BodyColor);
|
||||
g.FillRectangle(br, _startPosX.Value, _startPosY.Value + 20, 100, 20);
|
||||
g.DrawRectangle(pen, _startPosX.Value, _startPosY.Value + 20, 100, 20);
|
||||
|
||||
@ -61,7 +49,7 @@ public class DrawingSeaplane : DrawningPlane
|
||||
g.DrawLine(pen, _startPosX.Value, _startPosY.Value, _startPosX.Value + 20, _startPosY.Value + 20);
|
||||
|
||||
//заднее поперечное крыло
|
||||
Brush additionalBrush = new SolidBrush(EntitySeaplane.AdditionalColor);
|
||||
Brush additionalBrush = new SolidBrush(EntityPlane.AdditionalColor);
|
||||
g.FillEllipse(darkBrush, _startPosX.Value - 7, _startPosY.Value + 15, 20, 5);
|
||||
|
||||
//нос самолёта
|
||||
@ -79,19 +67,20 @@ public class DrawingSeaplane : DrawningPlane
|
||||
g.FillEllipse(darkBrush, _startPosX.Value + 87, _startPosY.Value + 45, 6, 6);
|
||||
|
||||
// поплавки
|
||||
if (EntitySeaplane.Floats)
|
||||
if (EntityPlane.Floats)
|
||||
{
|
||||
Brush br2 = new SolidBrush(Color.Red);
|
||||
g.FillRectangle(br2, _startPosX.Value + 10, _startPosY.Value + 48, 90, 5);
|
||||
}
|
||||
|
||||
// надувная лодка
|
||||
if (EntitySeaplane.InflatableBoat)
|
||||
if (EntityPlane.InflatableBoat)
|
||||
{
|
||||
g.FillRectangle(additionalBrush, _startPosX.Value + 38, _startPosY.Value + 38, 22, 8);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -57,6 +57,7 @@ public class DrawningPlane
|
||||
{
|
||||
EntityPlane = new EntityPlane(speed, weight, bodyColor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор для наследников
|
||||
/// </summary>
|
||||
@ -67,6 +68,7 @@ public class DrawningPlane
|
||||
_drawningPlaneWidth = drawningPlaneWidth;
|
||||
_drawningPlaneHeight = drawningPlaneHeight;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Установка границ поля
|
||||
/// </summary>
|
||||
|
@ -20,10 +20,7 @@ public class EntitySeaplane : EntityPlane
|
||||
/// Наличие надувной лодки
|
||||
/// </summary>
|
||||
public bool InflatableBoat { get; private set; }
|
||||
/// <summary>
|
||||
/// Шаг перемещения гидросамолета
|
||||
/// </summary>
|
||||
public double Step => Speed * 100 / Weight;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализация полей объекта-класса гидросамолета
|
||||
/// </summary>
|
||||
@ -34,7 +31,7 @@ public class EntitySeaplane : EntityPlane
|
||||
/// <param name="bodyKit">Наличие обвеса</param>
|
||||
/// <param name="floats">Наличие поплавков</param>
|
||||
/// <param name="inflatableBoat">Наличие надувной лодки</param>
|
||||
public void Init(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool floats, bool inflatableBoat)
|
||||
public EntitySeaPlane(int speed, double weight, Color bodyColor, Color additionalColor, bool bodyKit, bool floats, bool inflatableBoat) : base(0,0,Color.Black)
|
||||
{
|
||||
AdditionalColor = additionalColor;
|
||||
BodyKit = bodyKit;
|
||||
|
139
Seaplane/MovementStrategy/AbstractStrategy.cs
Normal file
139
Seaplane/MovementStrategy/AbstractStrategy.cs
Normal file
@ -0,0 +1,139 @@
|
||||
namespace ProjectSeaplane.MovementStrategy;
|
||||
|
||||
/// <summary>
|
||||
/// Класс-стратегия перемещения объекта
|
||||
/// </summary>
|
||||
public abstract class AbstractStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// Перемещаемый объект
|
||||
/// </summary>
|
||||
private IMoveableObject? _moveableObject;
|
||||
|
||||
/// <summary>
|
||||
/// Статус перемещения
|
||||
/// </summary>
|
||||
private StrategyStatus _state = StrategyStatus.NotInit;
|
||||
|
||||
/// <summary>
|
||||
/// Ширина поля
|
||||
/// </summary>
|
||||
protected int FieldWidth { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Высота поля
|
||||
/// </summary>
|
||||
protected int FieldHeight { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Статус перемещения
|
||||
/// </summary>
|
||||
public StrategyStatus GetStatus() { return _state; }
|
||||
|
||||
/// <summary>
|
||||
/// Установка данных
|
||||
/// </summary>
|
||||
/// <param name="moveableObject">Перемещаемый объект</param>
|
||||
/// <param name="width">Ширина поля</param>
|
||||
/// <param name="height">Высота поля</param>
|
||||
public void SetData(IMoveableObject moveableObject, int width, int height)
|
||||
{
|
||||
if (moveableObject == null)
|
||||
{
|
||||
_state = StrategyStatus.NotInit;
|
||||
return;
|
||||
}
|
||||
|
||||
_state = StrategyStatus.InProgress;
|
||||
_moveableObject = moveableObject;
|
||||
FieldWidth = width;
|
||||
FieldHeight = height;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Шаг перемещения
|
||||
/// </summary>
|
||||
public void MakeStep()
|
||||
{
|
||||
if (_state != StrategyStatus.InProgress)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsTargetDestinaion())
|
||||
{
|
||||
_state = StrategyStatus.Finish;
|
||||
return;
|
||||
}
|
||||
|
||||
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 IsTargetDestinaion();
|
||||
|
||||
/// <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;
|
||||
}
|
||||
}
|
24
Seaplane/MovementStrategy/IMoveableObjects.cs
Normal file
24
Seaplane/MovementStrategy/IMoveableObjects.cs
Normal file
@ -0,0 +1,24 @@
|
||||
namespace ProjectSportCar.MovementStrategy;
|
||||
|
||||
/// <summary>
|
||||
/// Интерфейс для работы с перемещаемым объектом
|
||||
/// </summary>
|
||||
public interface IMoveableObject
|
||||
{
|
||||
/// <summary>
|
||||
/// Получение координаты объекта
|
||||
/// </summary>
|
||||
ObjectParameters? GetObjectPosition { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Шаг объекта
|
||||
/// </summary>
|
||||
int GetStep { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Попытка переместить объект в указанном направлении
|
||||
/// </summary>
|
||||
/// <param name="direction">Направление</param>
|
||||
/// <returns>true - объект перемещен, false - перемещение невозможно</returns>
|
||||
bool TryMoveObject(MovementDirection direction);
|
||||
}
|
Loading…
Reference in New Issue
Block a user