Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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();
        }
Beispiel #5
0
        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();
        }
Beispiel #6
0
 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);
 }
Beispiel #7
0
            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();
            }
Beispiel #8
0
        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));
        }
Beispiel #9
0
            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();
            }
Beispiel #10
0
        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));
        }
Beispiel #11
0
        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));
        }
Beispiel #13
0
        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>();
        }