示例#1
0
        public async Task StartAsync()
        {
            for (int i = 1; i <= Settings.MaxTurns; i++)
            {
                Turn = TurnFactory.Create(i);
                OnTurnStarting();
                await Turn.StartAsync(Bots);

                OnTurnFinished();
                if (Bots.Count(b => b.HP > 0) <= 1)
                {
                    break;
                }
                await WaitForNextTurnAsync();
            }

            var scores = new List <Score>();

            foreach (var bot in Bots)
            {
                scores.Add(new Score {
                    BotName = bot.Name, Kills = bot.Kills, Deaths = bot.Deaths
                });
            }
            Scores = scores;
        }
示例#2
0
        public void GetNextTurnIndexTest()
        {
            var turn        = TurnFactory.TwoPlayer();
            var currentTurn = turn.Value;

            var nextTurnIndex = turn.GetNextTurnIndex();

            Assert.True(nextTurnIndex == currentTurn + 1);
        }
示例#3
0
        public void ProgressTurnTest()
        {
            var turn        = TurnFactory.TwoPlayer();
            var currentTurn = turn.Value;

            turn.ProgressTurn();

            Assert.True(turn.Value == currentTurn + 1);
            Assert.True(turn.PreviousValue == currentTurn);
        }
示例#4
0
        public void GetNextTurnIndexAtEndOfPlayersTest()
        {
            var turn = TurnFactory.TwoPlayer();

            turn.Value = 1;

            var nextTurnIndex = turn.GetNextTurnIndex();

            Assert.True(nextTurnIndex == 0);
        }
示例#5
0
 public override void SetUp()
 {
     base.SetUp();
     Battlefield = Get <IBattlefieldFactory>().Create();
     BotWorkshop = Get <IBotWorkshop>();
     TurnFactory = Get <ITurnFactory>();
     Turn        = TurnFactory.Create(1);
     Settings    = Get <ISettings>();
     AttackerBot = BotWorkshop.Create(TestBotAI.AttackFirstEnemy);
     IdleBot     = BotWorkshop.Create(TestBotAI.Idle);
 }
示例#6
0
        public void ProgressTurnTwiceTest()
        {
            var turn        = TurnFactory.TwoPlayer();
            var currentTurn = turn.Value;

            turn.ProgressTurn(2);

            // Turn should appear to be the same in a two person game
            Assert.True(turn.Value == currentTurn);
            Assert.True(turn.PreviousValue == currentTurn);
        }
示例#7
0
        private static void NewTakeTurn()
        {
            Turn turn = MaintananceTurn.GetBestMaintanance(GameLayer);

            if (turn != null)
            {
                turn = turn.TakeTurn(GameLayer);
                if (turn != null)
                {
                    StackedTurns.Push(turn);
                }
                return;
            }
            turn = AdjustEnergyTurn.GetBestEnergyAdjustment(GameLayer, 2);
            if (turn != null)
            {
                turn = turn.TakeTurn(GameLayer);
                if (turn != null)
                {
                    StackedTurns.Push(turn);
                }
                return;
            }

            if (StackedTurns.Count > 0)
            {
                Turn nextTurn = StackedTurns.Pop().TakeTurn(GameLayer);
                if (nextTurn != null)
                {
                    StackedTurns.Push(nextTurn);
                }
                return;
            }
            List <Bundle> possibleMoves = new List <Bundle>();

            possibleMoves.AddRange(TurnFactory.GetBestPlaceBuildingTurnBundles(GameLayer));
            possibleMoves.AddRange(TurnFactory.GetBestUpgradesTurnBundles(GameLayer));
            possibleMoves.AddRange(TurnFactory.GetBestPlaceUtilitiesturnBundles(GameLayer));
            possibleMoves.Add(TurnFactory.GetWaitTurnBundle(GameLayer));

            Bundle bestTurn = BundleSorter.GetBestBundle(possibleMoves, GameLayer);

            turn = bestTurn.Turn.TakeTurn(GameLayer);
            if (turn != null)
            {
                StackedTurns.Push(turn);
            }
        }
示例#8
0
        public void ItIsPossibleToKill()
        {
            var attacker = BotWorkshop.Create(TestBotAI.SeekAndDestroy("attacker"));
            var victim   = BotWorkshop.Create(TestBotAI.Idle);
            var bots     = new List <IBattleBot> {
                attacker, victim
            };

            attacker.PositionTo(Battlefield, 0, 0);
            victim.PositionTo(Battlefield, Battlefield.Width - 1, Battlefield.Height - 1);

            for (int i = 1; i <= Settings.MaxTurns; i++)
            {
                System.Console.WriteLine($"Attacker: {attacker.Position}");
                System.Console.WriteLine($"Victim:   {victim.Position}");
                var turn = TurnFactory.Create(i);
                turn.Start(bots);
                System.Console.WriteLine(attacker.Action);
            }

            victim.HP.Should().Be(0);
        }
示例#9
0
 public override void SetUp()
 {
     base.SetUp();
     Turn = TurnFactory.Create(1);
 }
示例#10
0
 private void CreateTurn()
 {
     turn = TurnFactory.CreateNextTurn();
 }