public AiTester(Settings settings, MapGenerator gen, GameVisualizer vis, ProcessMonitor monitor, Func <Map, Ai, Game> gameCreator, Func <string, ProcessMonitor, Ai> aiCreator) { this.settings = settings; this.gen = gen; this.vis = vis; this.monitor = monitor; this.gameCreator = gameCreator; this.aiCreator = aiCreator; }
private void RunGameToEnd(Game game, GameVisualizer vis) { while (!game.IsOver()) { game.MakeStep(); if (settings.Interactive) { vis.Visualize(game); if (game.AiCrashed) { Console.WriteLine(game.LastError.Message); } Console.ReadKey(); } } }
public void TestSingleFile(string exe) { var gen = new MapGenerator(settings.Width, settings.Height, settings.Ships, new Random(settings.RandomSeed)); var vis = new GameVisualizer(); var monitor = new ProcessMonitor(TimeSpan.FromSeconds(settings.TimeLimitSeconds * settings.GamesCount), settings.MemoryLimit); var badShots = 0; var crashes = 0; var gamesPlayed = 0; var shoots = new List <int>(); var ai = new Ai(exe, monitor); for (var iGame = 0; iGame < settings.GamesCount; iGame++) { var map = gen.GenerateMap(); var game = new Game(map, ai); RunGameToEnd(game, vis); gamesPlayed++; badShots += game.BadShots; if (game.AiCrashed) { crashes++; if (crashes > settings.CrashLimit) { break; } ai = new Ai(exe, monitor); } else { shoots.Add(game.TurnsCount); } if (settings.Verbose) { Console.WriteLine( "Game #{3,4}: Turns {0,4}, BadShots {1}{2}", game.TurnsCount, game.BadShots, game.AiCrashed ? ", Crashed" : "", iGame); } } ai.Dispose(); WriteTotal(ai, shoots, crashes, badShots, gamesPlayed); }