public async Task Player0Wins() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ b b g ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ g ⬡ S Q ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ g q S S S b ⬡ ⬡ "; initial += " ⬡ ⬡ g g G G ⬡ ⬡ ⬡ ⬡"; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ b b g ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ g ✔ S Q ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ g q S S S b ⬡ ⬡ "; expected += " ⬡ ⬡ g g ★ G ⬡ ⬡ ⬡ ⬡"; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task MovesBeetleOnTopOfQueen2() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ b ⬡ ⬡ ⬡ ⬡"; initial += "⬡ g Q b b q B ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ A ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ b ⬡ ⬡ ⬡ ⬡"; expected += "⬡ g Q b b ✔ ★ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().BeetleOnToQueen(initial, expected); }
public async Task MovesToEnemyQueen() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ g ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ q g g Q A ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ★ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ✔ ✔ g ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ✔ q g g Q ★ ⬡ "; expected += " ⬡ ✔ ✔ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task QueenMovesAway() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ S ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ s s s Q ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ s s ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ q ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var expected = new ExpectedAiBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ S ⬡ ✔ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ s s s ★ ✔ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ s s ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ q ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task AntsAreScoreHighlyOncePlaced() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ A B a ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ B ⬡ Q ⬡ ⬡"; initial += "⬡ ⬡ q B B a ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ★ B a ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ B ⬡ Q ⬡ ⬡"; expected += "⬡ ✔ q B B a ⬡ ⬡ "; expected += " ⬡ ✔ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task PiecesMoveTowardQueenUnderBeetle() { var initial = new InitialHiveBuilder(); initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ A g ⬡ ⬡ ⬡"; initial += "⬡ ⬡ Q s s B ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ G ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var beetleCell = initial.AllCells.First(c => c.Tiles.Any(t => t.Creature.Name == Creatures.Beetle.Name)); var beetle = beetleCell.RemoveTopTile(); beetleCell.AddTile(new Tile(13, 1, Creatures.Queen)); beetleCell.AddTile(beetle); var expected = new ExpectedAiBuilder(); expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ★ g ⬡ ⬡ ⬡"; expected += "⬡ ⬡ Q s s B ✔ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ✔ G ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public void ComputerPlayerCanGenerateARandomMoveFromAvailableSpaces() { var board = new Board(); var strategy = new EasyStrategy(); var subject = new ComputerPlayer(P1_MARKER, strategy); string selectedSpace = subject.GetMove(board); Assert.InRange(Convert.ToInt32(selectedSpace), 1, 9); }
public async Task NoQueenOrAntFirst() { var hive = HiveFactory.Create(new[] { "player1", " player2" }); var player = new ComputerPlayer(hive); var move = await player.GetMove(); Assert.NotEqual(move.Tile.Creature, Creatures.Queen); }
public bool PlayAllGames(Game game, string[] boardArray, bool turn) { ComputerPlayer computer = new ComputerPlayer(); game.board.SetBoard(boardArray); bool over = false; if (game.IsWinner(true)) { game.IO.DisplayBoard(game.board); over = true; return(false); } if (game.IsWinner(false)) { over = true; } if (game.IsTie()) { over = true; } string[] boardArrayClone = (string[])boardArray.Clone(); if (!over) { if (turn) { for (int i = 0; i < boardArrayClone.Length; i++) { if (boardArrayClone[i] == null) { boardArrayClone[i] = "X"; if (!PlayAllGames(game, boardArrayClone, !turn)) { return(false); } boardArrayClone[i] = null; } } } else { int move = computer.GetMove(game); boardArrayClone[move] = "O"; if (!PlayAllGames(game, boardArrayClone, !turn)) { return(false); } } } return(true); }
public void ChoosesToWin() { Game game = new Game(9); game.board.SetBoard(new string[] { "X", "X", null, "O", null, null, null, null, "X" }); ComputerPlayer computer = new ComputerPlayer(); int move = computer.GetMove(game); Assert.Equal(2, move); }
public void TakesCenterIfSecond() { Game game = new Game(9); game.board.SetBoard(new string[] { "X", null, null, null, null, null, null, null, null }); ComputerPlayer computer = new ComputerPlayer(); int move = computer.GetMove(game); Assert.Equal(4, move); }
public void TakesCornerIfFirst() { Game game = new Game(9); game.board.SetBoard(new string[] { null, null, null, null, null, null, null, null, null }); ComputerPlayer computer = new ComputerPlayer(); int move = computer.GetMove(game); Assert.Equal(0, move); }
public void BlocksAnImmediateDiagonalLossLargeBoard() { Game game = new Game(16); game.board.SetBoard(new string[] { "X", null, null, null, "O", "X", null, null, null, "O", "X", null, null, null, null, null }); ComputerPlayer computer = new ComputerPlayer(); int move = computer.GetMove(game); Assert.Equal(move, 15); }
public void PrefersAnImmediateWinLargeBoard() { Game game = new Game(16); game.board.SetBoard(new string[] { "X", "X", "X", null, "O", "O", "O", null, null, null, null, null, null, null, null, "X" }); ComputerPlayer computer = new ComputerPlayer(); int move = computer.GetMove(game); Assert.Equal(move, 7); }
public async Task NoMoves() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A A ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ A a A ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A A ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 0); var player = new ComputerPlayer(hive); await Assert.ThrowsAsync <ApplicationException>(async() => await player.GetMove()); }
public async Task OpponentNoMoves() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ A q A ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ✔ ⬡ ⬡ ✔ ⬡ ⬡ "; expected += " ⬡ ✔ A q A ✔ ⬡ ⬡"; expected += "⬡ ⬡ ✔ ⬡ ⬡ ✔ ⬡ ⬡ "; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var tile = new Tile(50, 0, Creatures.Ant); var player1 = new Player(0, "P1") with { Tiles = new HashSet <Tile> { tile } }; var hive = HiveFactory.CreateInProgress(new[] { player1, new Player(1, "P1") }, initial.AllCells, 0); foreach (var tileMove in hive.Players.First().Tiles) { foreach (var coords in tileMove.Moves) { initial.AddPlayerTrayOriginMove(coords); expected.PlayerTrayMoves.Add((coords, tileMove)); } } var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task MovesToQueenWithPlayerTiles() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ A g ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ s ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ q s s Q G ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ A g ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ s ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ✔ q s s Q ★ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var player1 = new Player(0, "P1") with { Tiles = new HashSet <Tile> { new(50, 0, Creatures.Grasshopper) } }; var player2 = new Player(1, "P2") with { Tiles = new HashSet <Tile> { new(51, 1, Creatures.Grasshopper) } }; var hive = HiveFactory.CreateInProgress(new[] { player1, player2 }, initial.AllCells, 0); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().MatchHive(initial, expected); }
public async Task BeetleStaysOnTopOfQueenPlayer2() { var initial = new InitialHiveBuilder(); initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ a ⬡ ⬡ ⬡ ⬡ "; initial += " ⬡ ⬡ ⬡ S ⬡ ⬡ ⬡ ⬡"; initial += "⬡ G q S S S b ⬡ "; initial += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; initial += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var beetleCell = initial.AllCells.First(c => c.Tiles.Any(t => t.Creature.Name == Creatures.Beetle.Name)); var beetle = beetleCell.RemoveTopTile(); beetleCell.AddTile(new Tile(11, 0, Creatures.Queen)); beetleCell.AddTile(beetle); var expected = new ExpectedAiBuilder(); expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡"; expected += "⬡ ⬡ ⬡ ★ ⬡ ⬡ ⬡ ⬡ "; expected += " ⬡ ⬡ ⬡ S ⬡ ✔ ✔ ⬡"; expected += "⬡ G q S S S b ✔ "; expected += " ⬡ ⬡ ⬡ ⬡ ⬡ ✔ ✔ ⬡"; expected += "⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ ⬡ "; var hive = HiveFactory.CreateInProgress(new[] { new Player(0, "P1"), new Player(1, "P1") }, initial.AllCells, 1); var player = new ComputerPlayer(hive); (await player.GetMove()).Should().BeetleOnQueen(initial, expected); }