PIbd-22. Kozlova A.A. Lab work 02 #3
@ -11,26 +11,21 @@ namespace AirFighter.MovementStrategy
|
||||
// Класс-стратегия перемещения объекта
|
||||
public abstract class AbstractStrategy
|
||||
{
|
||||
|
||||
// Перемещаемый объект
|
||||
|
||||
private IMoveableObject? _moveableObject;
|
||||
|
||||
// Статус перемещения
|
||||
|
||||
private Status _state = Status.NotInit;
|
||||
|
||||
// Ширина поля
|
||||
|
||||
protected int FieldWidth { get; private set; }
|
||||
|
||||
// Высота поля
|
||||
|
||||
protected int FieldHeight { get; private set; }
|
||||
|
||||
// Статус перемещения
|
||||
|
||||
public Status GetStatus() { return _state; }
|
||||
|
||||
// Установка данных
|
||||
public void SetData(IMoveableObject moveableObject, int width, int
|
||||
height)
|
||||
@ -47,7 +42,6 @@ namespace AirFighter.MovementStrategy
|
||||
}
|
||||
|
||||
// Шаг перемещения
|
||||
|
||||
public void MakeStep()
|
||||
{
|
||||
if (_state != Status.InProgress)
|
||||
@ -63,26 +57,19 @@ namespace AirFighter.MovementStrategy
|
||||
}
|
||||
|
||||
// Перемещение влево
|
||||
|
||||
protected bool MoveLeft() => MoveTo(DirectionType.Left);
|
||||
// Перемещение вправо
|
||||
|
||||
protected bool MoveRight() => MoveTo(DirectionType.Right);
|
||||
|
||||
// Перемещение вверх
|
||||
protected bool MoveUp() => MoveTo(DirectionType.Up);
|
||||
|
||||
// Перемещение вниз
|
||||
|
||||
protected bool MoveDown() => MoveTo(DirectionType.Down);
|
||||
|
||||
// Параметры объекта
|
||||
|
||||
protected ObjectParameters? GetObjectParameters =>
|
||||
_moveableObject?.GetObjectPosition;
|
||||
|
||||
// Шаг объекта
|
||||
|
||||
protected int? GetStep()
|
||||
{
|
||||
if (_state != Status.InProgress)
|
||||
@ -93,15 +80,12 @@ namespace AirFighter.MovementStrategy
|
||||
}
|
||||
|
||||
// Перемещение к цели
|
||||
|
||||
protected abstract void MoveToTarget();
|
||||
|
||||
// Достигнута ли цель
|
||||
|
||||
// Достигнута ли цель
|
||||
protected abstract bool IsTargetDestinaion();
|
||||
|
||||
// Попытка перемещения в требуемом направлении
|
||||
|
||||
// Попытка перемещения в требуемом направлении
|
||||
private bool MoveTo(DirectionType directionType)
|
||||
{
|
||||
if (_state != Status.InProgress)
|
||||
|
@ -1,3 +1,4 @@
|
||||
using AirFighter.DrawningObject;
|
||||
using AirFighter.DrawningObjects;
|
||||
using AirFighter.MovementStrategy;
|
||||
|
||||
@ -5,7 +6,6 @@ namespace AirFighter
|
||||
{
|
||||
public partial class AirFighterForm : Form
|
||||
{
|
||||
|
||||
private DrawningAirplane? _drawningAirplane;
|
||||
|
||||
// Ñòðàòåãèÿ ïåðåìåùåíèÿ
|
||||
|
@ -6,8 +6,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AirFighter.Entities;
|
||||
|
||||
namespace AirFighter.DrawningObjects
|
||||
|
||||
namespace AirFighter.DrawningObject
|
||||
{
|
||||
public class DrawningAirFighter : DrawningAirplane
|
||||
{
|
||||
|
@ -15,46 +15,36 @@ namespace AirFighter.DrawningObjects
|
||||
public EntityAirplane? EntityAirplane { get; protected set; }
|
||||
|
||||
// Ширина окна
|
||||
|
||||
private int _pictureWidth;
|
||||
|
||||
// Высота окна
|
||||
|
||||
private int _pictureHeight;
|
||||
|
||||
// Левая координата прорисовки самолета
|
||||
|
||||
protected int _startPosX;
|
||||
|
||||
// Верхняя кооридната прорисовки самолета
|
||||
|
||||
protected int _startPosY;
|
||||
|
||||
// Ширина прорисовки самолета
|
||||
|
||||
protected readonly int _airplaneWidth = 90;
|
||||
|
||||
// Высота прорисовки самолета
|
||||
|
||||
protected readonly int _airplaneHeight = 95;
|
||||
// Координата X объекта
|
||||
|
||||
// Координата X объекта
|
||||
public int GetPosX => _startPosX;
|
||||
|
||||
// Координата Y объекта
|
||||
|
||||
public int GetPosY => _startPosY;
|
||||
|
||||
// Ширина объекта
|
||||
|
||||
public int GetWidth => _airplaneWidth;
|
||||
|
||||
// Высота объекта
|
||||
|
||||
public int GetHeight => _airplaneHeight;
|
||||
|
||||
// Конструктор
|
||||
|
||||
public DrawningAirplane(int speed, double weight, Color bodyColor, int width, int height)
|
||||
{
|
||||
if (width < _airplaneWidth || height < _airplaneHeight)
|
||||
@ -79,8 +69,8 @@ namespace AirFighter.DrawningObjects
|
||||
_airplaneHeight = airplaneHeight;
|
||||
EntityAirplane = new EntityAirplane(speed, weight, bodyColor);
|
||||
}
|
||||
// Установка позиции
|
||||
|
||||
// Установка позиции
|
||||
public void SetPosition(int x, int y)
|
||||
{
|
||||
_startPosX = x;
|
||||
@ -93,7 +83,6 @@ namespace AirFighter.DrawningObjects
|
||||
}
|
||||
}
|
||||
// Изменение направления перемещения
|
||||
|
||||
public void MoveTransport(DirectionType direction)
|
||||
{
|
||||
if (!CanMove(direction) || EntityAirplane == null)
|
||||
|
@ -8,10 +8,8 @@ using AirFighter.DrawningObjects;
|
||||
|
||||
|
||||
namespace AirFighter.MovementStrategy
|
||||
|
||||
{
|
||||
// Реализация интерфейса IDrawningObject для работы с объектом DrawningCar
|
||||
|
||||
public class DrawningObjectAirplane : IMoveableObject
|
||||
{
|
||||
private readonly DrawningAirplane? _drawningAirplane = null;
|
||||
|
@ -5,35 +5,28 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AirFighter.Entities
|
||||
|
||||
{
|
||||
// Класс-сущность "самолет"
|
||||
public class EntityAirplane
|
||||
{
|
||||
// Скорость
|
||||
|
||||
public int Speed { get; private set; }
|
||||
|
||||
// Вес
|
||||
|
||||
public double Weight { get; private set; }
|
||||
|
||||
// Основной цвет
|
||||
|
||||
public Color BodyColor { get; private set; }
|
||||
|
||||
// Шаг перемещения самолета
|
||||
|
||||
public double Step => (double)Speed * 100 / Weight;
|
||||
|
||||
// Конструктор с параметрами
|
||||
|
||||
public EntityAirplane(int speed, double weight, Color bodyColor)
|
||||
{
|
||||
Speed = speed;
|
||||
Weight = weight;
|
||||
BodyColor = bodyColor;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -17,11 +17,9 @@ namespace AirFighter.MovementStrategy
|
||||
int GetStep { get; }
|
||||
|
||||
// Проверка, можно ли переместиться по нужному направлению
|
||||
|
||||
bool CheckCanMove(DirectionType direction);
|
||||
|
||||
// Изменение направления пермещения объекта
|
||||
|
||||
void MoveObject(DirectionType direction);
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ namespace AirFighter.MovementStrategy
|
||||
|
||||
return objParams.RightBorder >= FieldWidth - GetStep() && objParams.DownBorder >= FieldHeight - GetStep();
|
||||
}
|
||||
|
||||
protected override void MoveToTarget()
|
||||
{
|
||||
var objParams = GetObjectParameters;
|
||||
@ -23,7 +22,6 @@ namespace AirFighter.MovementStrategy
|
||||
|
||||
if (objParams.RightBorder < FieldWidth - GetStep()) MoveRight();
|
||||
if (objParams.DownBorder < FieldHeight - GetStep()) MoveDown();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -53,6 +53,5 @@ namespace AirFighter.MovementStrategy
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -17,27 +17,21 @@ namespace AirFighter.MovementStrategy
|
||||
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;
|
||||
|
||||
// Конструктор
|
||||
|
||||
public ObjectParameters(int x, int y, int width, int height)
|
||||
{
|
||||
_x = x;
|
||||
|
Loading…
Reference in New Issue
Block a user