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(); } }
// 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); } }
private void _robocode_BattleCompleted(BattleCompletedEvent evnt) { Console.WriteLine("BattleCompletedEvent"); _battleCompletedEvent = evnt; _wait.Set(); }