public async Task MoveIntoWind() { var game = new Game(); var communicator = new DirectCommunicator(); var gameProxy = new Library.Level3.Game(communicator); var decoder = new Messaging.Level3.Actions.ActionDecoder(); game.Seed = 0; game.Initialize(); game.State.PlayerPosition = (1, 2); var responseTask = gameProxy.MoveAsync(Direction.North); var decodedAction = decoder.Decode(await communicator.ReceiveFromContestantAsync()); var sentResponse = game.Execute(decodedAction); sentResponse.As <Result>().GameState.PlayerPosition.Should().Be((1, 1)); responseTask.IsCompleted.Should().BeFalse(); communicator.SendToContestant(sentResponse); var decodedResponse = await responseTask; decodedResponse.Perceptions.Should().BeEquivalentTo(Perception.Wind); decodedResponse.GameState.MovesLeft.Should().Be(99); decodedResponse.GameState.HasArrow.Should().BeTrue(); game.GameState.Should().Be(GameState.Running); }
private static async Task <Library.Level3.Types.Result> ExecuteRequestedAction( Messaging.Level3.Actions.ActionDecoder decoder, DirectCommunicator communicator, IGame game, Task <Library.Level3.Types.Result> responseTask) { var decodedAction = decoder.Decode(await communicator.ReceiveFromContestantAsync()); var sentResponse = game.Execute(decodedAction); responseTask.IsCompleted.Should().BeFalse(); communicator.SendToContestant(sentResponse); var decodedResponse = await responseTask; return(decodedResponse); }