public void veryHardShot() throws IOException {
        if (0 == stackSize) {
            int min = getMinLength();
            
            target = new Point(rand(), rand());
              
            numAttempts = 0;
            while (!testChoice(target, min)) {
                target = new Point(rand(), rand());
            }

            if (board.fire(target.x, target.y)) {
                populateStack(target);
            } else if (board.isInvalidShot()) {
                hardShot();
            }
        } else {
            target = pop();
            
            if (board.fire(target.x, target.y)) {
                populateStack(target);
            } else if (board.isInvalidShot()) {
                hardShot();
            }
        }
    }