@Override
    public ValidationResult validate(Game game) {
        int allowedQuestionsCount = getQuestionsCount();
        int allowedAnswersCount = getAnswersCount();
        int allowedCorrectAnswersCount = getCorrectAnswersCount();

        List<Question> questions = game.getQuestions();
        if (questions == null || questions.size() != allowedQuestionsCount) {
            return new ValidationResult("Game must contain exactly " + allowedQuestionsCount + " questions!");
        }

        int questionNr = 1;
        for (Question question : questions) {
            List<Answer> answers = question.getAnswers();
            if (answers == null || answers.size() != allowedAnswersCount) {
                return new ValidationResult("Question #" + questionNr + " must have exactly " + allowedAnswersCount + " answers!");
            }

            int correctAnswers = 0;
            for (Answer answer : answers) {
                if (answer.isCorrect()) {
                    correctAnswers++;
                }
            }

            if (correctAnswers != allowedCorrectAnswersCount) {
                return new ValidationResult("Question #" + questionNr + " must have exactly " + allowedCorrectAnswersCount + " correct answer!");
            }
            questionNr++;
        }

        return new ValidationResult(); // all OK
    }