Đảm bảo mê cung bản đồ nhà có thang máy có thể được giải quyết?


13

Trong trò chơi của tôi, chúng ta thấy các tầng của một ngôi nhà từ bên cạnh, và anh hùng có thể đi thang máy - một thang máy đi lên (đến thang máy tiếp theo lên trên), hoặc xuống (đến thang máy tiếp theo xuống dưới), tùy thuộc vào mũi tên như hiển thị và luôn có một cặp chính xác hai thang máy được kết nối. Đó là cách duy nhất anh hùng có thể di chuyển theo chiều dọc, mặc dù anh ta có thể tự do di chuyển theo chiều ngang. Bản đồ ngôi nhà là một lưới 11x5 ngẫu nhiên với các vật phẩm khác nhau và các bức tường không thể vượt qua ở bên trái, ngoài cùng bên phải và đôi khi ở một trong hai vị trí ở giữa:

ví dụ thang máy

Câu hỏi của tôi: Làm thế nào tôi có thể đảm bảo bản đồ luôn luôn ngẫu nhiên nhưng luôn có thể giải được và người anh hùng, bắt đầu từ phía bên trái của tầng dưới cùng, luôn có thể để nó qua bất kỳ thang máy hướng lên nào ở tầng trên cùng?

Đối với những gì đáng giá tôi đang sử dụng ngôn ngữ Lua để phát triển. Cám ơn rất nhiều!

Câu trả lời:


14

Những gì bạn muốn làm là tạo một Đồ thị sao cho mỗi nút là một vị trí thang máy và các cạnh giữa chúng có nghĩa là bạn có thể đi bộ / nâng lên đó. Khi bạn tạo biểu đồ, bạn có thể sử dụng dfs / bfs để xem liệu bạn có thể nhận được từ nút bắt đầu đến nút kết thúc hay không.

Sử dụng ví dụ của bạn ở trên tôi đã tạo ra một hình ảnh về biểu đồ sẽ trông như thế nào. Vòng tròn màu xanh lá cây có nghĩa là có một thang máy ở đó và các đường màu xanh lá cây có nghĩa là bạn có thể đi từ nút này sang nút khác.

điểm giao


Cảm ơn, điều đó rất hữu ích! Tôi nên nhấn mạnh nhiều hơn trong câu hỏi của tôi rằng bản đồ cũng cần được tạo ra ngay từ đầu. Điều tôi đang suy nghĩ bây giờ là nếu nó có thể không dễ dàng hơn - thay vì tạo ra các kết hợp thang / tường ngẫu nhiên hoàn toàn lặp đi lặp lại và kiểm tra khả năng thanh toán của chúng - để có được thuật toán bước qua ngôi nhà, giống như anh hùng, và theo cách này tạo thang máy ngẫu nhiên và cửa ra vào (bằng cách lấy khoảng cách nâng ngẫu nhiên và rẽ trái, cũng như thêm tường, chẳng hạn). Như trong "Đi đúng 0, 4 hoặc 8 lượt; tạo thang máy đi lên, đi lên từ 1 đến 4 tầng ..."
Philipp Lenssen

@PhilippLenssen Đó thực chất là cách tiếp cận "tìm kiếm theo chiều sâu ngẫu nhiên" ngẫu nhiên để tạo mê cung trên biểu đồ.
Kevin Reid

5

Sự khác biệt giữa những gì bạn có và một mê cung bình thường chỉ đơn giản là nó có các kết nối không liền kề theo chiều dọc. Tôi nghĩ rằng những gì bạn nên xem là các thuật toán tạo mê cung dựa trên đồ thị . Bạn chỉ cần có một bộ "phòng liền kề" hoặc "tường có thể" lớn hơn so với một mê cung 2D thông thường, trong đó mỗi cặp ô sàn lưới được sắp xếp theo chiều dọc không có thang máy xen kẽ đều liền kề. Bạn có thể mô hình hóa nó như một biểu đồ trong đó việc thêm các cạnh nâng xác định sẽ vô tình xóa các cạnh nâng khác có thể; một số thuật toán có thể bị nhầm lẫn bởi điều này, nhưng không phải là thuật toán khác.

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.