728x90

앞에서 만든 미로 만들기 재귀함수를 스택을 사용한 함수로 바꾸었다.

 

 

         private void makeWell(int xint y)
        {
            Stack<Point> loc = new Stack<Point>();
            Point[] di = new Point[4];
            while (true)
            {
                int dn = 0;
                Well[x, y] = false;
                if ((x > 1) && Well[x - 2, y]) di[dn++] = new Point(-1, 0);
                if ((y > 1) && Well[x, y - 2]) di[dn++] = new Point(0, -1);
                if ((x < MaxX - 2) && Well[x + 2, y]) di[dn++] = new Point(1, 0);
                if ((y < MaxY - 2) && Well[x, y + 2]) di[dn++] = new Point(0, 1);
                if (dn == 0)
                {
                    if (loc.Count > 0)
                    {
                        Point p = loc.Pop();
                        x = p.X;
                        y = p.Y;
                        continue;
                    }
                    else return;
                }

                int dd = rnd.Next(dn);
                int dx = di[dd].X, dy = di[dd].Y;
                x += dx;
                y += dy;
                Well[x, y] = false;
                x += dx;
                y += dy;
                loc.Push(new Point(x, y));
            }
        }
 

 

728x90
반응형

+ Recent posts