public class MoveToBorder extends AbstractStrategy { @Override protected boolean isTargetDestination() { var objParams = getObjectParameters(); if (objParams == null) { return false; } return objParams.rightBorder() <= getFieldWidth() && objParams.rightBorder() + getStep() >= getFieldWidth() && objParams.downBorder() <= getFieldHeight() && objParams.downBorder() + getStep() >= getFieldHeight(); } @Override protected void moveToTarget() { var objParams = getObjectParameters(); if (objParams == null) { return; } var diffX = objParams.objectMiddleHorizontal() - getFieldWidth(); if (Math.abs(diffX) > getStep()) { if (diffX < 0) { moveRight(); } } var diffY = objParams.objectMiddleVertical() - getFieldHeight(); if (Math.abs(diffY) > getStep()) { if (diffY < 0) { moveDown(); } } } }