Tôi đã thiết kế một thuật toán một thời gian trước đây cho mê cung 2D trên lưới vuông, không có lý do gì khiến việc này cũng không hoạt động đối với mê cung 3D trên lưới khối.
Bắt đầu với lưới 3D ban đầu được điền đầy đủ với ô tường.
...
Bắt đầu một đại lý tại một cạnh của lưới điện, các đại lý đi theo một đường thẳng trong X, Y, Z, X, -Y hoặc -Z hướng tường thanh toán bù trừ khi cô đi .
Hành động 'N' có một cơ hội nhỏ xảy ra mỗi bước.
Hành động 'M' xảy ra khi ô trực tiếp ở phía trước tác nhân là tường và ô ở phía trước ô trống.
'N' là một sự lựa chọn ngẫu nhiên:
- loại bỏ tác nhân
- chuyển sang trái hoặc phải 90 độ
- và tạo ra một đại lý trên cùng một vuông quay 90 độ sang trái, phải hoặc cả hai (hai đại lý).
'M' là một lựa chọn ngẫu nhiên:
- loại bỏ mà đại lý
- loại bỏ các bức tường trước mặt đại lý đó và sau đó loại bỏ mà đại lý
- và không làm gì cả, mang theo số
- rẽ trái hoặc phải 90 độ.
- và tạo tác nhân trên cùng một hình vuông được xoay 90 độ sang trái, sang phải hoặc cả hai (hai tác nhân).
Các mê cung là đặc biệt, và nhân vật của họ là rất linh hoạt bằng cách điều chỉnh kích hoạt cho 'M' (để làm với nút giao thông có hiệu lực) và cũng điều chỉnh khả năng 1-8 xảy ra. Bạn có thể muốn xóa một hoặc hai hành động, hoặc giới thiệu các hành động của riêng bạn, ví dụ một hành động để thực hiện một thanh toán bù trừ nhỏ hoặc sidestep một bước. Kích hoạt cho 'N' cũng có thể là một loại ngẫu nhiên khác, ví dụ ví dụ dưới đây có thể được sử dụng để tạo ra các mê cung khá phân nhánh mà vẫn có một số phần thẳng dài.
float n = 1;
while (random_0_to_1 > 0.15)
{
n *= 1.2;
}
return (int)n;
Một số điều chỉnh nhỏ sẽ là cần thiết từ mô tả đơn giản của tôi, ví dụ như kích hoạt cho hành động 'M' sẽ cần phải kiểm tra các tế bào tiếp giáp với các tế bào nó sẽ kiểm tra cũng tùy thuộc vào những gì sắp xếp của các nút là mong muốn.
Cần 5 hoặc 6 để mê cung chứa chu kỳ và ít nhất một hành động 'M' thay thế thành 5 và 6 là bắt buộc để mê cung chứa các đầu chết. Một số lựa chọn cơ hội/hành động và kích hoạt 'M' sẽ có xu hướng tạo ra mê cung không hoạt động, ví dụ là không thể giải quyết được hoặc đầy các ô trống hoặc tường, nhưng nhiều người sẽ tạo ra kết quả tốt đẹp nhất.
Bạn có muốn một trong những _solves_ một mê cung, hoặc _generates_ một mê cung? –
@ X-Zero Tạo ra nó. – jmasterx
bạn có thể tạo một mê cung 2d trên lưới và để làm cho nó 3d mỗi tế bào lưới thay vì sẽ là một hộp với một "chiều cao" – danca