public void Player1IsFirst() { _player1.GetAction(Arg.Any <Board>()).Returns(new TicTacToeAction { Position = 0, Tile = BoardTile.X }); _game.DoNextTurn(); _player1.Received(1).GetAction(Arg.Any <Board>()); _player2.DidNotReceive().GetAction(Arg.Any <Board>()); }
public void Setup() { _opponent = Substitute.For <ITicTacToePlayer>(); _opponent.Tile.Returns(BoardTile.O); _opponent.GetAction(Arg.Any <Board>()) .Returns(new TicTacToeAction { Position = 0, Tile = BoardTile.O }); _env = new TicTacToeEnvironment(_opponent); }
public TicTacToeEnvironmentStep Step(TicTacToeAction action) { try { DoAction(action); } catch (Exception e) { throw new InvalidOperationException(e.Message); } if (!CurrentState.IsValid()) { throw new InvalidOperationException($"Action caused invalid state: '{CurrentState}'"); } if (!CurrentState.IsGameOver) { DoAction(_opponent.GetAction(CurrentState)); } var reward = 0.0; if (CurrentState.Winner() == BoardTile.X) { reward = 1.0; } if (CurrentState.Winner() == BoardTile.O) { reward = -1.0; } return(new TicTacToeEnvironmentStep { Board = CurrentState, Reward = reward }); }
public void Step_DoesAgentAndOpponentMoves() { var placeXAtTopLeft = new TicTacToeAction { Position = 0, Tile = BoardTile.X }; var placeOAtTopMiddle = new TicTacToeAction { Position = 1, Tile = BoardTile.O }; _opponent.GetAction(Arg.Any <Board>()) .Returns(placeOAtTopMiddle); var expectedBoard = Board .CreateEmptyBoard() .DoAction(placeXAtTopLeft) .DoAction(placeOAtTopMiddle); // act var observation = _env.Step(placeXAtTopLeft); // assert Assert.AreEqual(expectedBoard.ToString(), observation.Board.ToString()); }
public TicTacToeAction GetAction(TicTacToeEnvironment environment) => _ticTacToePlayer.GetAction(environment.CurrentState);