Beispiel #1
0
        public void CheckSymmetry(int width, int height, int left, int top, int rw, int rh)
        {
            var mazeGenerator = new MazeGeneratorMock();
            var field         = mazeGenerator.CreateFieldWrapper(width, height);

            var seed = DateTime.Now.Millisecond;

            TestContext.WriteLine($"seed: {seed}");

            var winZone = new RectZone(left, top, rw, rh);

            mazeGenerator.GenerateWaysWrapper(field, winZone, new Random(seed));

            for (int y = 0; y < height; ++y)
            {
                for (int x = 0; x < width; ++x)
                {
                    Wall cell = field[y, x];

                    if (winZone.Contains(new Point(x, y)) == false)
                    {
                        Assert.That(cell, Is.Not.EqualTo(Wall.Full));
                    }

                    Wall symmetryCell = field[height - y - 1, width - x - 1];

                    if ((cell & Wall.Top) == Wall.Top && (symmetryCell & Wall.Bottom) == Wall.Bottom)
                    {
                        Assert.That(symmetryCell & Wall.Bottom, Is.EqualTo(Wall.Bottom));
                    }
                    else
                    {
                        Assert.That(symmetryCell & Wall.Bottom, Is.EqualTo(Wall.None));
                    }

                    if ((cell & Wall.Bottom) == Wall.Bottom)
                    {
                        Assert.That(symmetryCell & Wall.Top, Is.EqualTo(Wall.Top));
                    }
                    else
                    {
                        Assert.That(symmetryCell & Wall.Top, Is.EqualTo(Wall.None));
                    }

                    if ((cell & Wall.Left) == Wall.Left)
                    {
                        Assert.That(symmetryCell & Wall.Right, Is.EqualTo(Wall.Right));
                    }
                    else
                    {
                        Assert.That(symmetryCell & Wall.Right, Is.EqualTo(Wall.None));
                    }

                    if ((cell & Wall.Right) == Wall.Right)
                    {
                        Assert.That(symmetryCell & Wall.Left, Is.EqualTo(Wall.Left));
                    }
                    else
                    {
                        Assert.That(symmetryCell & Wall.Left, Is.EqualTo(Wall.None));
                    }
                }
            }
        }