public static async Task <GameResult> PlayGame(string word, IEnumerable <string> possibleWords, IPlayer player, TurnHandler handler = null) { var game = new Game(word); var usedChars = new Collection <char>(); while (!game.IsWon) { var guess = await player.GuessAsync(game.CurrentStatus, usedChars).ConfigureAwait(false); usedChars.Add(guess); game.ApplyGuess(guess); handler?.Invoke(guess, game.CurrentStatus, game.Guesses, game.Misses, game.IsWon); } return(new GameResult() { Turns = game.Guesses, Guesses = usedChars, Misses = game.Misses, Word = word }); }