private IOutputSpeech CheckGuess(string playerId, Dictionary <string, Slot> intentSlots) { var colour = intentSlots["Colour"].Value; var number = intentSlots["Value"].Value; var suit = intentSlots["Suit"].Value; var assumption = new Assumption(colour, number, suit); if (assumption.IsValid) { var outcome = _dealer.TakeTurn(playerId, assumption); if (outcome is TurnErrorOutcome) { var errorOutcome = outcome as TurnErrorOutcome; return(new PlainTextOutputSpeech { Text = errorOutcome.ErrorReason }); } else if (outcome is TurnSuccessOutcome) { var successOutcome = outcome as TurnSuccessOutcome; var message = new StringBuilder(); message.Append(successOutcome.AssumptionResult.Success ? "Nice one. " : "Nope. "); message.Append($"{successOutcome.DrawnCard.value} of {successOutcome.DrawnCard.suit}. "); var game = successOutcome.AssumptionResult.GameState; message.Append($"Your score is {game.score} with {successOutcome.AssumptionResult.GameState.cardsRemainingCount} cards remaining. "); message.Append(successOutcome.AssumptionResult.GameState.cardsRemainingCount == 0 ? $"No more cards in the deck. Your final score was {game.score}. Ask me to start a new game? " : "Take a guess? "); return(new PlainTextOutputSpeech { Text = message.ToString() }); } return(new PlainTextOutputSpeech { Text = "Hmm, something went wrong. Try again." }); } return(new PlainTextOutputSpeech { Text = "I don't know what you mean. I'm just here to deal the cards. Try again." }); }