public void Creates_MiniMax_Context_When_AI_Is_MiniMax() { var ai = new MiniMaxIntelligence(); var board = new MockBoard(); var player1 = new MockPlayer { Symbol = 'X' }.GetIntelligenceStubbedToReturn(ai); var player2 = new MockPlayer { Symbol = 'O' }.GetIntelligenceStubbedToReturn(ai); var players = new List <IPlayer> { player1, player2 }; var game = new MockGame { Board = board, CurrentPlayer = player1, Players = players }; var factory = new IntelligenceContextFactory(); var context = factory.Create(game); context.Should().BeOfType <MiniMaxContext>(); var minimaxContext = (MiniMaxContext)context; minimaxContext.Board.Should().Be(board); minimaxContext.MinimizedPlayer.Should().Be(player1); minimaxContext.Players.Should().BeEquivalentTo(players); }
public void Handles_Should_Choose_A_Position() { var context = new MockIntelligenceContext(); var currentPlayer = new MockPlayer(); var player = new MockPlayer(); var board = new MockBoard { Size = 3 }; var game = new MockGame { Board = board, Players = new List <IPlayer> { currentPlayer, player }, CurrentPlayer = currentPlayer }.IsOverStubbedToReturn(false); var newContext = new MockIntelligenceContext(); var contextFactory = new MockIntelligenceContextFactory().CreateStubbedToReturn(newContext); var state = BuildPlayer1TurnState(game, contextFactory, context); state.Handle(); game.VerifyMakeMoveCalled(context); game.VerifySwitchPlayerCalled(); contextFactory.VerifyCreatedCalled(game); }
public void Creates_Human_Context_When_AI_Is_Human() { var ai = new MockHumanIntelligence(); var board = new MockBoard(); var player1 = new MockPlayer { Symbol = 'X' }.GetIntelligenceStubbedToReturn(ai); var player2 = new MockPlayer { Symbol = 'O' }.GetIntelligenceStubbedToReturn(ai); var players = new List <IPlayer> { player1, player2 }; var game = new MockGame { Board = board, CurrentPlayer = player1, Players = players }; var factory = new IntelligenceContextFactory(); var context = factory.Create(game); context.Should().BeOfType <HumanContext>(); var humanContext = (HumanContext)context; humanContext.Board.Should().Be(board); }
public void Returns_True_When_Game_Is_Over_Because_Of_Tie() { var board = new MockBoard().GetWinnerStubbedToReturn(new Nobody()).GetOpenSpacesStubbedToReturn(new List <BoardCoordinate>()); var game = BuildGame(board); game.IsOver().Should().BeTrue(); }
public void Returns_False_When_Game_Is_Not_Over() { var board = new MockBoard().GetWinnerStubbedToReturn(new Nobody()).GetOpenSpacesStubbedToReturn(new List <BoardCoordinate> { new BoardCoordinate(1, 1) }); var game = BuildGame(board); game.IsOver().Should().BeFalse(); }
public MoveAvailabilityChainTests() { board = new MockBoard(5, taskAreaSize, goalAreaSize) { [new Location(1, 3)] = { PlayerId = 1 }, [new Location(3, 3)] = { PlayerId = 2 }, [new Location(2, 4)] = { PlayerId = 3 }, [new Location(2, 2)] = { PlayerId = 4 } }; locationFail = new Location(2, 3); locationSuccess = new Location(1, 1); }
public void Returns_False_When_Winning_Pattern_Matches() { var board = new MockBoard { Size = 3, WinningPatterns = new List <string> { "1010" } }.GetCurrentPatternStubbedToReturn("1100"); var player = BuildComputerPlayer(); var isWinner = player.HasWon(board); isWinner.Should().BeFalse(); }
public void Returns_Random_Corner_When_No_Moves_Have_Been_Made(int boardSize) { var board = new MockBoard { Size = boardSize }.GetOpenSpacesStubbedToReturn(GetBoardCoordinates(boardSize)); var context = BuildMiniMaxContext(board: board); var ai = BuildMiniMaxIntelligence(); var move = ai.DetermineBest(context); var corners = new List <int> { 1, board.Size, board.Size *(board.Size - 1) + 1, board.Size *board.Size }; corners.Should().Contain(move.ToPosition(boardSize)); }
public void Returns_True_When_Winning_Pattern_Matches() { var board = new MockBoard { Size = 3, WinningPatterns = new List <string> { "1100" } }.GetCurrentPatternStubbedToReturn("1100"); var player = BuildHumanPlayer(); player.ChoosePosition(board, 1); player.ChoosePosition(board, 2); var isWinner = player.HasWon(board); isWinner.Should().BeTrue(); }
public void Returns_Board_Coordinate_With_Context() { var context = new MockIntelligenceContext(); var boardCoordinate = new BoardCoordinate(1, 1); var player1 = new MockPlayer().GetBestMoveStubbedToReturn(boardCoordinate); var players = new List <IPlayer> { player1 }; var board = new MockBoard { Size = 3 }; var game = BuildGame(board, players); game.MakeMove(context); player1.VerifyGetBestMoveCalled(context); player1.VerifyChoosePositionCalled(board, boardCoordinate.ToPosition(board.Size)); }
public void Returns_True_When_Game_Is_Over_Because_Player_Has_Won() { var player1 = new MockPlayer { Symbol = 'X' }; var player2 = new MockPlayer { Symbol = 'Y' }; var board = new MockBoard().GetWinnerStubbedToReturn(player1).GetOpenSpacesStubbedToReturn(new List <BoardCoordinate> { new BoardCoordinate(1, 1) }); var game = BuildGame(board, new List <IPlayer> { player1, player2 }); game.IsOver().Should().BeTrue(); }
public TestAvailabilityChainTests() { _board = new MockBoard(boardWidth, taskAreaSize, goalAreaSize) { [new Location(1, 3)] = { PlayerId = 1 }, [new Location(3, 3)] = { PlayerId = 2 }, [new Location(2, 4)] = { PlayerId = 3 }, [new Location(2, 2)] = { PlayerId = 4 } }; locationFail = new Location(2, 3); locationSuccess = new Location(1, 3); _board.Players.Add(playerIdFail, new PlayerInfo(playerIdFail, TeamColor.Blue, PlayerType.Member, locationFail, new Piece(0, PieceType.Normal))); _board.Players.Add(playerIdSuccess, new PlayerInfo(playerIdSuccess, TeamColor.Blue, PlayerType.Member, locationSuccess)); }
public void Creates_AlphaBetaMiniMax_Context_When_AI_Is_MiniMax() { var ai = new AlphaBetaMiniMaxIntelligence(); var board = new MockBoard(); var player1 = new MockPlayer { Symbol = 'X' }.GetIntelligenceStubbedToReturn(ai); var player2 = new MockPlayer { Symbol = 'O' }.GetIntelligenceStubbedToReturn(ai); var players = new List <IPlayer> { player1, player2 }; var game = new MockGame { Board = board, CurrentPlayer = player1, Players = players }; var factory = new IntelligenceContextFactory(); var context = factory.Create(game); context.Should().BeOfType <AlphaBetaMiniMaxContext>(); }