public void GeneratingAMazeWithABlockInTheMiddleWorks() { var map = new BitArreintjeFastInnerMap(128, 128); for (int y = 33; y < 96; y++) { for (int x = 33; x < 96; x++) { map[x, y] = true; } } var mapFactory = new InnerMapFactoryCustom <BitArreintjeFastInnerMap>(map); var randomFactory = new RandomFactory <NetRandom>(1337); var algorithm = new AlgorithmBacktrack(); var generatedMap = algorithm.GoGenerate(mapFactory, randomFactory, null); var path = PathFinderDepthFirstSmartWithPos.GoFind(map, null); using (var fs = new FileStream("GeneratingAMazeWithABlockInTheMiddleWorks.png", FileMode.Create)) { WithPath.SaveMazeAsImageDeluxePng(map, path, fs); } }
public async Task Start(CommandContext ctx) { if (ctx.Channel.IsPrivate) { await ctx.TriggerTypingAsync(); var interactivity = ctx.Client.GetInteractivityModule(); var generator = new AlgorithmBacktrack(); var map = generator.Generate <BitArreintjeFastInnerMap, NetRandom>(StaticRandom.Next(64, 128), StaticRandom.Next(64, 128), null); int steps; while ((steps = PathFinderDepthFirstSmartWithPos.GoFind(map, null).Count - 1) == -1) { map = generator.Generate <BitArreintjeFastInnerMap, NetRandom>(StaticRandom.Next(64, 128), StaticRandom.Next(64, 128), null); } using (var stream = new MemoryStream()) { WithPath.SaveMazeAsImageDeluxePng(map, new List <MazePointPos>(), stream); stream.Seek(0, SeekOrigin.Begin); await ctx.RespondWithFileAsync(stream, "Maze.png"); } var response = await interactivity.WaitForMessageAsync(message => message.Author.Id == ctx.User.Id && message.Channel.IsPrivate, TimeSpan.FromSeconds(3.0)); await ctx.TriggerTypingAsync(); if (response == null) { await(await ctx.RespondAsync("Too late!")).CreateReactionAsync(DiscordEmoji.FromUnicode("⌛")); return; } if (steps.ToString().Equals(response.Message.Content, StringComparison.Ordinal)) { await response.Message.CreateReactionAsync(DiscordEmoji.FromUnicode("🎉")); await ctx.RespondAsync("You did it! The flag is Pycon_{{35c4p3_7h3_L4byr1n7h}}."); } else { await(await ctx.RespondAsync("You lost!")).CreateReactionAsync(DiscordEmoji.FromUnicode("😏")); } } }
public ActionResult GenerateMazeWithPathSeed(int seed, int width, int height) { var alg = new AlgorithmBacktrack(); var w = Stopwatch.StartNew(); var map = alg.Generate <BitArreintjeFastInnerMap, NetRandom>(width, height, seed, null); var mazeGenerationTime = w.Elapsed; w.Restart(); var path = PathFinderDepthFirstSmartWithPos.GoFind(map, null); var pathGenerationTime = w.Elapsed; w.Restart(); using (var memoryStream = new MemoryStream()) { WithPath.SaveMazeAsImageDeluxePng(map, path, memoryStream); var toImageTime = w.Elapsed; Console.WriteLine($"Maze generation time: {mazeGenerationTime}, Path find time: {pathGenerationTime}, To image time: {toImageTime}"); var data = memoryStream.ToArray(); return(File(data, "image/png")); } }