83 lines
2.6 KiB
Java
83 lines
2.6 KiB
Java
|
public abstract class AbstractStrategy {
|
||
|
|
||
|
// Перемещаемый объект
|
||
|
private IMoveableObject _moveableObject;
|
||
|
|
||
|
// Статус перемещения
|
||
|
private Status _state = Status.NotInit;
|
||
|
|
||
|
// Ширина поля
|
||
|
protected int FieldWidth;
|
||
|
|
||
|
// Высота поля
|
||
|
protected int FieldHeight;
|
||
|
|
||
|
// Статус перемещения
|
||
|
public Status GetStatus() { return _state; }
|
||
|
|
||
|
// Установка данных
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
// Шаг перемещения
|
||
|
public void MakeStep() {
|
||
|
if (_state != Status.InProgress) {
|
||
|
return;
|
||
|
}
|
||
|
if (IsTargetDestinaion()) {
|
||
|
_state = Status.Finish;
|
||
|
return;
|
||
|
}
|
||
|
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();
|
||
|
}
|
||
|
|
||
|
// Перемещение к цели
|
||
|
protected abstract void MoveToTarget();
|
||
|
|
||
|
// Достигнута ли цель
|
||
|
protected abstract boolean IsTargetDestinaion();
|
||
|
|
||
|
// Попытка перемещения в требуемом направлении
|
||
|
private boolean MoveTo(Direction Direction) {
|
||
|
if (_state != Status.InProgress) {
|
||
|
return false;
|
||
|
}
|
||
|
if (_moveableObject.CheckCanMove(Direction)) {
|
||
|
_moveableObject.MoveObject(Direction);
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
}
|