PIbd-22. Kozlova A.A. Lab work 02 #3

Closed
Nastya_Kozlova wants to merge 3 commits from laba2 into laba1
10 changed files with 7 additions and 55 deletions
Showing only changes of commit 140d7050cf - Show all commits

View File

@ -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)

View File

@ -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;
// Ñòðàòåãèÿ ïåðåìåùåíèÿ

View File

@ -6,8 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using AirFighter.Entities;
namespace AirFighter.DrawningObjects
namespace AirFighter.DrawningObject
{
public class DrawningAirFighter : DrawningAirplane
{

View File

@ -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)

View File

@ -8,10 +8,8 @@ using AirFighter.DrawningObjects;
namespace AirFighter.MovementStrategy
{
// Реализация интерфейса IDrawningObject для работы с объектом DrawningCar
public class DrawningObjectAirplane : IMoveableObject
{
private readonly DrawningAirplane? _drawningAirplane = null;

View File

@ -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;
}
}
}

View File

@ -17,11 +17,9 @@ namespace AirFighter.MovementStrategy
int GetStep { get; }
// Проверка, можно ли переместиться по нужному направлению
bool CheckCanMove(DirectionType direction);
// Изменение направления пермещения объекта
void MoveObject(DirectionType direction);
}
}

View File

@ -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();
}
}
}

View File

@ -53,6 +53,5 @@ namespace AirFighter.MovementStrategy
}
}
}
}
}

View File

@ -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;