Beispiel #1
0
        public void Battle(BattleTestCase testCase)
        {
            TestCaseFactory.SaveToDisk(testCase);


            RobotSpecification[] robots = _robocode.GetLocalRepository(testCase.AllRobotsCsv);

            var battle = new BattleSpecification(
                testCase.NumberOfRounds,
                testCase.BattlefieldSpecification,
                robots);

            _battleErrorEvents.Clear();
            _battleCompletedEvent = null;

            using (_wait = new AutoResetEvent(false))
            {
                _robocode.RunBattle(battle, false);

                _wait.WaitOne(testCase.TimeOut);
            }


            bool finished = _battleCompletedEvent != null;

            var adapter = new BattleResultAdapter();

            var outcomes = adapter.RecordOutcomes(
                testCase,
                finished ? _battleCompletedEvent.SortedResults : null,
                _battleErrorEvents.Select(e => e.Error),
                finished);

            TestCaseFactory.AddResult(outcomes);

            TestCaseFactory.ForgetAnyUnfinishedBusiness();


            var grouped = outcomes.GroupBy(o => o.OutcomeType).ToDictionary(g => g.Key);

            if (grouped.ContainsKey(OutcomeType.Lost))
            {
                var robotsThatBeatMe = grouped[OutcomeType.Lost];
                Assert.Fail("Lost to: " + robotsThatBeatMe.Select(e => e.EnemyName).Aggregate((n1, n2) => n1 + ", " + n2));
            }
            else if (grouped.ContainsKey(OutcomeType.Won))
            {
                var robotsThatIBeat = grouped[OutcomeType.Won];
                Console.WriteLine("Beat: " + robotsThatIBeat.Select(e => e.EnemyName).Aggregate((n1, n2) => n1 + ", " + n2));
            }
            else
            {
                Assert.Inconclusive();
            }
        }
Beispiel #2
0
    // Called when the battle is completed successfully with battle results
    private static void BattleCompleted(BattleCompletedEvent e)
    {
        Console.WriteLine("-- Battle has completed --");

        // Print out the sorted results with the robot names
        Console.WriteLine("Battle results:");
        foreach (BattleResults result in e.SortedResults)
        {
            Console.WriteLine("  " + result.TeamLeaderName + ": " + result.Score);
        }
    }
Beispiel #3
0
 private void _robocode_BattleCompleted(BattleCompletedEvent evnt)
 {
     Console.WriteLine("BattleCompletedEvent");
     _battleCompletedEvent = evnt;
     _wait.Set();
 }