Thuật toán tạo mê cung 2d [đã đóng]


Câu trả lời:


21

Có rất nhiều cách khác nhau để tạo ra mê cung. Có một danh sách rất lớn về họ và những mô tả của họ ở đây: http://www.astrolog.org/labyrnth/algrithm.htm

Tôi nghĩ rằng tôi đã sử dụng một trong những mô tả dưới "Hoàn hảo".


Tài nguyên rất tốt, chính xác những gì tôi đang tìm kiếm.
jdeseno

Yêu trang web đó, sử dụng nó nhiều năm trước.
zanlok

8

Tôi thích những mê cung vết thương chặt chẽ mà Thuật toán của Kruskal tạo ra.

Mô tả chuẩn của Thuật toán Kruskal không phù hợp ở chỗ nó không phân biệt được các vị trí trong biểu đồ với các nhóm vị trí, trong khi dựa vào cách chơi chữ về lựa chọn cơ sở hạ tầng, dẫn đến sự mơ hồ mô tả gây nhầm lẫn cho người mới. Vì vậy, tôi từ chối thuật ngữ của Kruskal.

Tôi sẽ sử dụng các điều khoản sau đây:

  • Đồ thị
    • mê cung chính nó.
  • Nút
    • một vị trí trong mê cung. Trên một mê cung hình vuông, đây là một ô vuông.
  • Cạnh
    • kết nối giữa hai nút. Trên một mê cung hình vuông, đây là một thanh dài 1.
  • Nhóm cây
    • một tập hợp các nút, có thể trống, được sắp xếp như một cái cây

Và từ những thứ đó, chúng ta có được:

  1. Tạo một nhóm GTG , cho Nhóm Cây đồ thị , chứa các nhóm cây
  2. Dân số GTG với một nhóm cây chứa một nút, cho mọi vị trí trong mê cung của bạn
  3. Tạo một tập hợp cạnh E
  4. Điền E với mọi cạnh hợp lệ trong mê cung của bạn
  5. Trong khi có nhiều hơn một nhóm trong GTG và trong khi E không trống:
  6. Chọn một rE cạnh ngẫu nhiên từ E
  7. Xác định điểm cuối p1p2 của rE
  8. Xóa rE khỏi E
  9. Kiểm tra các nhóm p1p2 thuộc về ( p1gp2g tương ứng).
  10. Nếu p1gp2g khác nhau, hãy tham gia nhóm cây p1gp2g tại p1 -> p2 và viết lại tất cả quyền sở hữu nhóm của một cây này sang cây khác, do đó nối các cây.
  11. Quay trở lại bước 5.
  12. Nếu bạn không còn cạnh nào, nhưng nhiều hơn một cây, thì biểu đồ không được kết nối hoặc có lỗi.
  13. Nếu bạn chỉ có một cây, bạn có một mê cung hoàn toàn không có vòng lặp.

1
Chúng tôi đã có một dự án GUI và chúng tôi phải xây dựng một mê cung 2D ngẫu nhiên trên GUI. Đây chính xác là cách tôi đã làm và tôi không bao giờ nhận ra mình đang sử dụng Kruskals lol. Tôi chắc chắn nhận ra rằng tôi đã sử dụng một biểu đồ.
Bryan Harrington

1

Wikipedia có một nguồn tài nguyên lớn về thế hệ mê cung . Tôi đã sử dụng thuật toán prims ngẫu nhiên với kết quả tuyệt vời. Thuật toán phân chia có vẻ thú vị nhưng tôi chưa bao giờ sử dụng nó.

Dưới đây là ví dụ wikipedia của prim's tại nơi làm việc.

Hình ảnh của Wikipedia


1

Một cách dễ dàng là lập danh sách các bức tường phía bắc và bức tường phía tây, sau đó hoán vị chúng. Cho mỗi phòng một số. Sau đó, thổi tung một trong những bức tường trong danh sách, miễn là hai phòng không có cùng một số, sau đó truyền một trong các số cho tất cả các phòng khác có cùng số. Tiếp tục đi cho đến khi bạn hết tường Điều này hoạt động cho mê cung hình chữ nhật hoặc, thực sự, bất kỳ mê cung khác mà bạn có thể đưa ra một danh sách "các phòng có khả năng kết nối". Thêm vào đó, nó khá đơn giản để lập trình.


1

Tôi cũng sẽ xem xét một số thuật toán được sử dụng trong phát triển Roguelike. Có một nguồn khởi đầu tốt tại Rogue Basin



0

Bạn hỏi tôi đã sử dụng cái nào, vì vậy tôi sẽ đảm bảo trả lời nó. Tôi đã sử dụng Thuật toán Backtracker đệ quy trong trò chơi mê cung của mình trên Rootbeer Games .

Đây là bằng chứng cho thấy tôi đã sử dụng thuật toán, xin đừng xem nó như một quảng cáo về công việc của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.