Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
    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);
    }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
    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);
    }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
    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());
    }
Ejemplo n.º 16
0
    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);
    }
Ejemplo n.º 17
0
    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);
    }
Ejemplo n.º 18
0
    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);
    }