Example #1
0
        private async void BeginRender_Click(object sender, EventArgs e)
        {
            beginRender.Enabled = false;

            IAi          ai            = DemoAi.Create(DemoResult.AiIdentifier, DemoResult.Parameters);
            Level        originalLevel = DemoResult.OriginalLevel;
            MutableLevel workingLevel  = originalLevel.AsMutable();

            using (var source = new System.Threading.CancellationTokenSource())
            {
                IRover rover = new ReportingRover(
                    new Rover(workingLevel, DemoResult.Parameters),
                    new Progress <TerrainUpdate>(UpdateTerrain),
                    new Progress <PositionUpdate>(UpdateRoverPosition),
                    new Progress <StatsUpdate>(UpdateStats),
                    source.Token
                    );
                Simulation sim = new Simulation(originalLevel, DemoResult.Parameters, ai, rover);
                _renderData = RenderData.GenerateBlank(originalLevel.BottomRight, rover.Position);

                try
                {
                    await Task.Run(sim.Simulate, source.Token);
                }
                catch (OperationCanceledException)
                {
                    // Ignore this exception, since it'll only happen when we've already closed the form
                }
                catch (OutOfPowerOrMovesException)
                {
                    // This is to be expected if an AI doesn't keep track of their power or moves
                }
            }
        }
 public IRover Create(MutableLevel level, SimulationParameters parameters) => new Rover(level, parameters);