Esempio n. 1
0
        public bool GuessIsDue(AkinatorQuestion question)
        {
            if (question.Progression > 80 ||
                question.Step - m_lastGuessStep == 25)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 2
0
        private static AnswerOptions GetAnswerFor(AkinatorQuestion question)
        {
            string        line;
            AnswerOptions answer;

            do
            {
                Console.WriteLine($"Question {question.Step + 1} ({question.Progression}): {question.Text}");
                Console.WriteLine("Possible answers:");
                var options = GetOptions();
                foreach (var option in options)
                {
                    Console.WriteLine($"{option.Key}: {option.Value}");
                }

                line = Console.ReadLine();
            } while (!Enum.TryParse(line, out answer));

            return(answer);
        }
        public static bool GuessIsDue(AkinatorQuestion currentQuestion, int lastGuessTakenAtStep, Platform platform = Platform.Android)
        {
            if (currentQuestion is null)
            {
                return(false);
            }

            switch (platform)
            {
            default:
            case Platform.Android:
            {
                var stepsTakenSinceLastGuess = currentQuestion.Step - lastGuessTakenAtStep;
                if (NoMoreQuestions() ||
                    currentQuestion.Step >= 80)
                {
                    return(true);
                }

                if (stepsTakenSinceLastGuess < 5)
                {
                    return(false);
                }

                if (currentQuestion.Step <= 25)
                {
                    return(!(currentQuestion.Progression <= 97.0f));
                }

                if (currentQuestion.Progression <= 80.0f && stepsTakenSinceLastGuess < 30)
                {
                    return(false);
                }

                return(80 - currentQuestion.Step > 5);
            }

            case Platform.AndroidModified:
            {
                var step     = currentQuestion.Step;
                var variance = step - lastGuessTakenAtStep;
                var progress = currentQuestion.Progression;
                if (NoMoreQuestions() || step == 80)
                {
                    return(true);
                }
                if (variance < 5)
                {
                    return(false);
                }
                if (step <= 25)
                {
                    if (progress > 97.0)
                    {
                        return(true);
                    }
                }
                else if (progress >= 80.0 || variance >= 30)
                {
                    if (variance >= 10)
                    {
                        return(true);
                    }
                }
                return(false);
            }

            case Platform.WindowsPhone:
            {
                return(currentQuestion.Step >= 79 || (currentQuestion.Step - lastGuessTakenAtStep >= 5 && (currentQuestion.Progression >= 97f || currentQuestion.Step - lastGuessTakenAtStep == 25) && currentQuestion.Step != 75));
            }
            }
        }