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 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.º 3
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.º 4
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.º 5
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.º 6
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.º 7
0
    public AndConstraint <AiAssertions> MatchHive(InitialHiveBuilder initialBuilder, ExpectedAiBuilder expected)
    {
        var expectedMoves = expected.ExpectedMoves();
        var expectedTiles = initialBuilder.AllCells.Where(c => expected.OriginCells.Contains(c))
                            .Select(c => (c.Coords, Tile: c.TopTile()))
                            .ToHashSet();

        expectedTiles.UnionWith(expected.PlayerTrayMoves);

        Execute.Assertion.Given(() => Subject())
        .ForCondition(result => expectedTiles.Any(t => t.Tile.Id == result.Tile.Id) && expectedMoves.Contains(result.Coords))
        .FailWith(
            "\nResulting " + Identifier + "s did not match expected\n\nInitial:\n{1}\n\nActual - Expected:\n{2}\n",
            _ => initialBuilder.OriginCells.Count,
            _ => new StringBuilder(initialBuilder.ToColoredString(initialBuilder.ToString())),
            actual => new StringBuilder(expected.GetMoveDiff(expectedTiles, actual))
            );

        return(new AndConstraint <AiAssertions>(this));
    }
Ejemplo n.º 8
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.º 9
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.º 10
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);
    }
Ejemplo n.º 11
0
    public AndConstraint <AiAssertions> BeetleOnToQueen(InitialHiveBuilder initialBuilder, ExpectedAiBuilder expected)
    {
        var queenCell  = initialBuilder.AllCells.Where(c => !c.IsEmpty() && c.Tiles.Any(t => t.Creature.Name == Creatures.Queen.Name));
        var beetleCell = initialBuilder.AllCells.Where(c => !c.IsEmpty() && c.Tiles.Any(t => t.Creature.Name == Creatures.Beetle.Name))
                         .Select(c => c.TopTile());

        Execute.Assertion.Given(() => Subject())
        .ForCondition(result => queenCell.Any(c => c.Coords == result.Coords) && beetleCell.Any(t => t.Id == result.Tile.Id))
        .FailWith(
            "\nResulting " + Identifier + "s did not match expected\n\nInitial:\n{1}\n\nActual - Expected:\n{2}\n",
            _ => initialBuilder.OriginCells.Count,
            _ => new StringBuilder(initialBuilder.ToColoredString(initialBuilder.ToString())),
            actual => new StringBuilder(expected.GetMoveDiff(new HashSet <(Coords Coords, Tile Tile)>(), actual))
            );

        return(new AndConstraint <AiAssertions>(this));
    }