private boolean canQueenFight(Cell fighterCell, Cell targetCell) {
        if (targetCell == null || !targetCell.isEmpty()) {
            return false;
        }

        StepDirection direction = chessBoardModel.getDirection(fighterCell, targetCell);

        Cell victimCell = searchNextNonEmpty(fighterCell, direction);
        if (victimCell == null || victimCell.getChecker().getOwner() == fighterCell.getChecker().getOwner()) {
            return false;
        }

        int distToVictim = distanceBetweenCells(fighterCell, victimCell);
        int distToTarget = distanceBetweenCells(fighterCell, targetCell);

        if (distToTarget <= distToVictim) {
            return false;
        }

        // TODO при текущей логике шашка может перепрыгивать через несколько других шашек (не проверяется место приземления)
        Cell nextNonEmptyCell = searchNextNonEmpty(victimCell, direction);
        if (nextNonEmptyCell != null) {
            int maxDist = distanceBetweenCells(fighterCell, nextNonEmptyCell);
            if (distToVictim >= maxDist) {
                return false;
            }
        }

        return true;
    }