public bool GuessIsDue(AkinatorQuestion question) { if (question.Progression > 80 || question.Step - m_lastGuessStep == 25) { return(true); } return(false); }
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)); } } }