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 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 Throws_Exception_With_Invalid_AI() { var game = new MockGame { CurrentPlayer = new MockPlayer() }; var factory = new IntelligenceContextFactory(); Action action = () => factory.Create(game); action.ShouldThrow <ArgumentException>(); }
public void Game_Should_Block_Diagonal_Win(int firstMove, int secondMove, int blockingMove) { var gameSettings = BuildGameSettings(gamePlayerType: GamePlayerType.ComputerVsComputer); var gameInitializer = BuildGameInitializer(); var game = gameInitializer.Create(gameSettings); var contextFactory = new IntelligenceContextFactory(); game.CurrentPlayer.ChoosePosition(game.Board, firstMove); game.CurrentPlayer.ChoosePosition(game.Board, secondMove); game.SwitchPlayer(); var context = contextFactory.Create(game); game.MakeMove(context); game.Board.IsPositionOpen(blockingMove).Should().BeFalse(); }
public void Game_No_Moves_Should_Always_Tie() { var gameSettings = BuildGameSettings(3, GamePlayerType.ComputerVsComputer); var gameInitializer = BuildGameInitializer(); var game = gameInitializer.Create(gameSettings); var contextFactory = new IntelligenceContextFactory(); var context = contextFactory.Create(game); do { game.MakeMove(context); game.SwitchPlayer(); context = contextFactory.Create(game); } while (!game.IsOver()); Assert.IsType <Nobody>(game.Board.GetWinner(game.Players)); }
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>(); }
public void Creates_A_New_Intelligence_Factory() { var factory = new IntelligenceContextFactory(); factory.Should().BeAssignableTo <IIntelligenceContextFactory>(); }