вторая лаба вроде

This commit is contained in:
Полина Чубыкина 2024-01-21 16:28:30 +04:00
parent 933b4f7fa0
commit d507d7fe51
4 changed files with 190 additions and 0 deletions

120
src/AbstractStrategy.java Normal file
View File

@ -0,0 +1,120 @@
public class AbstractStrategy {
/// <summary>
/// Перемещаемый объект
/// </summary>
private IMoveableObject _moveableObject;
/// <summary>
/// Статус перемещения
/// </summary>
private Status _state = Status.NotInit;
/// <summary>
/// Ширина поля
/// </summary>
protected int FieldWidth;
/// <summary>
/// Высота поля
/// </summary>
protected int FieldHeight;
/// <summary>
/// Статус перемещения
/// </summary>
public Status 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 = Status.NotInit;
return;
}
_state = Status.InProgress;
_moveableObject = moveableObject;
FieldWidth = width;
FieldHeight = height;
}
/// <summary>
/// Шаг перемещения
/// </summary>
public void MakeStep()
{
if (_state != Status.InProgress)
{
return;
}
if (IsTargetDestinaion())
{
_state = Status.Finish;
return;
}
MoveToTarget();
}
/// <summary>
/// Перемещение влево
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться, false - неудача)</returns>
protected boolean MoveLeft() { return MoveTo(Direction.Left);}
/// <summary>
/// Перемещение вправо
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться,false - неудача)</returns>
protected boolean MoveRight() { return MoveTo(Direction.Right);}
/// <summary>
/// Перемещение вверх
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться,false - неудача)</returns>
protected boolean MoveUp() { return MoveTo(Direction.Up);}
/// <summary>
/// Перемещение вниз
/// </summary>
/// <returns>Результат перемещения (true - удалось переместиться,false - неудача)</returns>
protected boolean MoveDown() { return MoveTo(Direction.Down);}
/// <summary>
/// Параметры объекта
/// </summary>
protected ObjectParameters GetObjectParameters() { return _moveableObject.GetObjectPosition(); }
/// <summary>
/// Шаг объекта
/// </summary>
/// <returns></returns>
protected int GetStep()
{
if (_state != Status.InProgress)
{
return 0;
}
return _moveableObject.GetStep();
}
/// <summary>
/// Перемещение к цели
/// </summary>
protected abstract void MoveToTarget();
/// <summary>
/// Достигнута ли цель
/// </summary>
/// <returns></returns>
protected abstract boolean IsTargetDestinaion();
/// <summary>
/// Попытка перемещения в требуемом направлении
/// </summary>
/// <param name="Direction">Направление</param>
/// <returns>Результат попытки (true - удалось переместиться, false - неудача)</returns>
private boolean MoveTo(Direction Direction)
{
if (_state != Status.InProgress)
{
return false;
}
if (_moveableObject.CheckCanMove(Direction))
{
_moveableObject.MoveObject(Direction);
return true;
}
return false;
}
}

21
src/IMoveableObject.java Normal file
View File

@ -0,0 +1,21 @@
public interface IMoveableObject {
/// <summary>
/// Получение координаты X объекта
/// </summary>
ObjectParameters GetObjectPosition();
/// <summary>
/// Шаг объекта
/// </summary>
int GetStep();
/// <summary>
/// Проверка, можно ли переместиться по нужному направлению
/// </summary>
/// <param name="direction"></param>
/// <returns></returns>
boolean CheckCanMove(Direction direction);
/// <summary>
/// Изменение направления пермещения объекта
/// </summary>
/// <param name="direction">Направление</param>
void MoveObject(Direction direction);
}

44
src/ObjectParameters.java Normal file
View File

@ -0,0 +1,44 @@
public class ObjectParameters {
private int _x;
private int _y;
private int _width;
private int _height;
/// <summary>
/// Левая граница
/// </summary>
public int LeftBorder() {return _x;}
/// <summary>
/// Верхняя граница
/// </summary>
public int TopBorder () {return _y;}
/// <summary>
/// Правая граница
/// </summary>
public int RightBorder () {return _x + _width;}
/// <summary>
/// Нижняя граница
/// </summary>
public int DownBorder () {return _y + _height;}
/// <summary>
/// Середина объекта
/// </summary>
public int ObjectMiddleHorizontal () {return _x + _width / 2;}
/// <summary>
/// Середина объекта
/// </summary>
public int ObjectMiddleVertical () {return _y + _height / 2;}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="x">Координата X</param>
/// <param name="y">Координата Y</param>
/// <param name="width">Ширина</param>
/// <param name="height">Высота</param>
public ObjectParameters(int x, int y, int width, int height)
{
_x = x;
_y = y;
_width = width;
_height = height;
}
}

5
src/Status.java Normal file
View File

@ -0,0 +1,5 @@
public enum Status {
NotInit,
InProgress,
Finish
}