예제 #1
0
        public void CrawlDeadCycle()
        {
            // 0 -> 2 - 3
            // |     \ /
            // 1      4
            var builder = new ZeldaDungeonBuilder();

            builder.AddUndirectedTransition(0, 1, IdentityScript.Default);
            builder.AddUndirectedTransition(2, 3, IdentityScript.Default);
            builder.AddUndirectedTransition(3, 4, IdentityScript.Default);
            builder.AddUndirectedTransition(4, 2, IdentityScript.Default);
            builder.AddDirectedTransition(0, 2, IdentityScript.Default);
            var puzzle = builder.Build();

            var initialState = emptyVariables.ToState(builder.Lookup);

            puzzle.Crawl(new[] { initialState }, maxSteps);

            Assert.NotNull(puzzle.DebugGetStep(0, initialState));
            Assert.NotNull(puzzle.DebugGetStep(1, initialState));
            Assert.NotNull(puzzle.DebugGetStep(2, initialState));
            Assert.NotNull(puzzle.DebugGetStep(3, initialState));
            Assert.NotNull(puzzle.DebugGetStep(4, initialState));
            Assert.True(puzzle.DebugGetStep(0, initialState).HasDistanceFromExit);
            Assert.False(puzzle.DebugGetStep(2, initialState).HasDistanceFromExit);
            Assert.False(puzzle.DebugGetStep(3, initialState).HasDistanceFromExit);
            Assert.False(puzzle.DebugGetStep(4, initialState).HasDistanceFromExit);
        }
예제 #2
0
        public void CrawlDeadEnd()
        {
            // 0 -> 3
            //  \
            //   2 - 1
            var builder = new ZeldaDungeonBuilder();

            builder.AddUndirectedTransition(0, 2, IdentityScript.Default);
            builder.AddUndirectedTransition(2, 1, IdentityScript.Default);
            builder.AddDirectedTransition(0, 3, IdentityScript.Default);
            var crawler = builder.Build();

            var initialState = emptyVariables.ToState(builder.Lookup);

            crawler.Crawl(new[] { initialState }, maxSteps);

            Assert.NotNull(crawler.DebugGetStep(0, initialState));
            Assert.NotNull(crawler.DebugGetStep(1, initialState));
            Assert.NotNull(crawler.DebugGetStep(2, initialState));
            Assert.NotNull(crawler.DebugGetStep(3, initialState));
            Assert.IsEmpty(crawler.DebugGetStep(3, initialState).Successors);
            Assert.False(crawler.DebugGetStep(3, initialState).HasDistanceFromExit);
        }
예제 #3
0
 public override void Express(ZeldaDungeonBuilder builder)
 {
     builder.AddDirectedTransition(wayStart, wayEnd, IdentityScript.Default);
 }