728x90
앞에서 만든 미로 만들기 재귀함수를 스택을 사용한 함수로 바꾸었다.
private void makeWell(int x, int 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
반응형
'Software > C#' 카테고리의 다른 글
C# 시작하기 - Winform 바둑판 그리기(2) (1) | 2023.12.06 |
---|---|
C# 시작하기 - Winform 바둑판 그리기(1) (1) | 2023.12.06 |
C# 시작하기 - winform 미로 그리기 (1) | 2023.12.05 |
C# 시작하기 - 미로 만들기 재귀함수 (1) | 2023.12.05 |
VScode에서 C# 시작하기 - 단일EXE 만들기 (0) | 2023.12.02 |