часть Movement
This commit is contained in:
parent
7feba0a042
commit
9ae3816169
@ -16,14 +16,13 @@ public class DrawingSeaplane : DrawningPlane
|
|||||||
/// <param name="bodyKit">Наличие обвеса</param>
|
/// <param name="bodyKit">Наличие обвеса</param>
|
||||||
/// <param name="floats">Наличие поплавков</param>
|
/// <param name="floats">Наличие поплавков</param>
|
||||||
/// <param name="inflatableBoat">Наличие надувной лодки</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)
|
public override void DrawTransport(Graphics g)
|
||||||
{
|
{
|
||||||
if (EntityPlane == null || EntityPlane is not EntitySeaplane seaplane || !_startPosX.HasValue! || _startPosY.HasValue )
|
if (EntityPlane == null || EntityPlane is not EntitySeaplane seaplane || !_startPosX.HasValue! || _startPosY.HasValue )
|
||||||
@ -31,24 +30,13 @@ public class DrawingSeaplane : DrawningPlane
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
base.DrawTransport(g);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Прорисовка объекта
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="g"></param>
|
|
||||||
public void DrawTransport(Graphics g)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
Pen pen = new(Color.Black);
|
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.FillRectangle(br, _startPosX.Value, _startPosY.Value + 20, 100, 20);
|
||||||
g.DrawRectangle(pen, _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);
|
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);
|
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);
|
g.FillEllipse(darkBrush, _startPosX.Value + 87, _startPosY.Value + 45, 6, 6);
|
||||||
|
|
||||||
// поплавки
|
// поплавки
|
||||||
if (EntitySeaplane.Floats)
|
if (EntityPlane.Floats)
|
||||||
{
|
{
|
||||||
Brush br2 = new SolidBrush(Color.Red);
|
Brush br2 = new SolidBrush(Color.Red);
|
||||||
g.FillRectangle(br2, _startPosX.Value + 10, _startPosY.Value + 48, 90, 5);
|
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);
|
g.FillRectangle(additionalBrush, _startPosX.Value + 38, _startPosY.Value + 38, 22, 8);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +57,7 @@ public class DrawningPlane
|
|||||||
{
|
{
|
||||||
EntityPlane = new EntityPlane(speed, weight, bodyColor);
|
EntityPlane = new EntityPlane(speed, weight, bodyColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конструктор для наследников
|
/// Конструктор для наследников
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -67,6 +68,7 @@ public class DrawningPlane
|
|||||||
_drawningPlaneWidth = drawningPlaneWidth;
|
_drawningPlaneWidth = drawningPlaneWidth;
|
||||||
_drawningPlaneHeight = drawningPlaneHeight;
|
_drawningPlaneHeight = drawningPlaneHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Установка границ поля
|
/// Установка границ поля
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -20,10 +20,7 @@ public class EntitySeaplane : EntityPlane
|
|||||||
/// Наличие надувной лодки
|
/// Наличие надувной лодки
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool InflatableBoat { get; private set; }
|
public bool InflatableBoat { get; private set; }
|
||||||
/// <summary>
|
|
||||||
/// Шаг перемещения гидросамолета
|
|
||||||
/// </summary>
|
|
||||||
public double Step => Speed * 100 / Weight;
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Инициализация полей объекта-класса гидросамолета
|
/// Инициализация полей объекта-класса гидросамолета
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -34,7 +31,7 @@ public class EntitySeaplane : EntityPlane
|
|||||||
/// <param name="bodyKit">Наличие обвеса</param>
|
/// <param name="bodyKit">Наличие обвеса</param>
|
||||||
/// <param name="floats">Наличие поплавков</param>
|
/// <param name="floats">Наличие поплавков</param>
|
||||||
/// <param name="inflatableBoat">Наличие надувной лодки</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;
|
AdditionalColor = additionalColor;
|
||||||
BodyKit = bodyKit;
|
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