PIbd-21_Belianin_N.N._Tank..../Tank/src/AbstractStrategy.java

93 lines
2.4 KiB
Java
Raw Normal View History

2023-10-24 01:01:37 +04:00
public abstract class AbstractStrategy {
2023-10-29 18:57:32 +04:00
// Перемещаемый объект
private IMoveableObject _moveableObject;
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Статус перемещения
private Status _state = Status.NotInit;
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Ширина поля
protected int FieldWidth;
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Высота поля
protected int FieldHeight;
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Статус перемещения
public Status GetStatus() {
return _state;
}
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Установка данных
public void SetData(IMoveableObject moveableObject, int width, int height) {
if (moveableObject == null) {
_state = Status.NotInit;
return;
2023-10-24 01:01:37 +04:00
}
2023-10-29 18:57:32 +04:00
_state = Status.InProgress;
_moveableObject = moveableObject;
FieldWidth = width;
FieldHeight = height;
}
// Шаг перемещения
public void MakeStep() {
if (_state != Status.InProgress) {
return;
2023-10-24 01:01:37 +04:00
}
2023-10-29 18:57:32 +04:00
if (IsTargetDestination()) {
_state = Status.Finish;
return;
2023-10-24 01:01:37 +04:00
}
2023-10-29 18:57:32 +04:00
MoveToTarget();
}
// Перемещение влево
protected boolean MoveLeft() {
return MoveTo(Direction.Left);
}
// Перемещение вправо
protected boolean MoveRight() {
return MoveTo(Direction.Right);
}
// Перемещение вверх
protected boolean MoveUp() {
return MoveTo(Direction.Up);
}
// Перемещение вниз
protected boolean MoveDown() {
return MoveTo(Direction.Down);
}
// Параметры объекта
protected ObjectParameters GetObjectParameters() {
return _moveableObject.GetObjectPosition();
}
// Шаг объекта
protected int GetStep() {
if (_state != Status.InProgress) {
return 0;
}
return _moveableObject.GetStep();
}
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Перемещение к цели
protected abstract void MoveToTarget();
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Достигнута ли цель
protected abstract boolean IsTargetDestination();
2023-10-24 01:01:37 +04:00
2023-10-29 18:57:32 +04:00
// Попытка перемещения в требуемом направлении
private boolean MoveTo(Direction Direction) {
if (_state != Status.InProgress) {
2023-10-24 01:01:37 +04:00
return false;
}
2023-10-29 18:57:32 +04:00
if (_moveableObject.CheckCanMove(Direction)) {
_moveableObject.MoveObject(Direction);
return true;
}
return false;
}
}