Tôi đang tạo một trò chơi với một thế giới được tạo theo thủ tục được tạo ra vào đầu trò chơi, bao gồm một số khu vực được đại diện bởi các lưới (giả sử, 8x8, 9x6, các kích thước sẽ lý tưởng là tùy ý). Các khu vực này được cho là được kết nối với nhau thông qua một danh sách phụ thuộc.
Một kết nối tồn tại khi có ít nhất 3 không gian của lưới đó được hiển thị giữa hai khu vực đó. Trong ô giữa của khu vực kết nối 3 không gian đó là ô cửa giữa các khu vực:
Tôi đã cố gắng tìm ra cách để kết nối chúng, nhưng nó ngày càng trở nên phức tạp hơn khi bạn cần xem xét cùng một lúc.
Tôi đã thử một số nguyên mẫu giấy và trong khi đó là một quy trình rất đơn giản khi thực hiện nó một cách trực quan, tôi đã không tìm ra một tập hợp các biểu thức toán học tốt cho phép tôi đặt các phòng có cùng hiệu quả bằng mã.
Đây là một ví dụ "đơn giản" mà tôi đang đấu tranh ngay bây giờ:
- Khu vực 'a' cần được kết nối với 'b' và 'c'
- Khu vực 'b' cần được kết nối với 'a' và 'd'
- Khu vực 'c' cần được kết nối với 'a' và 'd'
- Khu vực 'd' cần được kết nối với 'b' và 'c'
Để đơn giản, chúng tôi sẽ đặt các phòng theo thứ tự xuất hiện của chúng trong danh sách (Tôi đã thử người khác). Vì vậy, tôi đang tiếp cận điều này như là thuật toán Dungeon thế hệ thủ tục tiêu chuẩn của bạn.
Chúng tôi đặt 'a' bất cứ nơi nào trên bảng, vì đó là khu vực đầu tiên. Tiếp theo, chúng tôi chọn một bức tường một cách ngẫu nhiên và, vì không có gì được kết nối với bức tường đó, chúng tôi có thể đặt 'b' ở đó:
Bây giờ chúng tôi cần đặt 'c', nhưng 'a' đã có trên bảng và có một bức tường bị chiếm đóng, vì vậy chúng tôi quyết định đặt nó trên một bức tường khác. Nhưng không phải vị trí nào cũng được, vì 'd' sắp xuất hiện và nó cũng cần được kết nối với 'b' và 'c':
Tôi đã thử một giới hạn có thể là 2 phòng có cùng một bộ phụ thuộc không thể ở trên các bức tường đối diện, nhưng ngay cả điều đó không đảm bảo thành công:
Và trong các trường hợp khác, nơi các khu vực có kích thước khác nhau, nằm trên các bức tường đối diện có thể hoạt động:
Ngoài ra, không xem xét một bức tường được sử dụng là một giả định thiếu sót vì nó loại trừ các giải pháp hợp lệ:
Tôi đã thử tìm kiếm nghiên cứu về các thuật toán tạo thủ tục khác hoặc tương tự, chẳng hạn như thuật toán đóng gói hình chữ nhật và bố cục đồ thị tối ưu, nhưng thông thường các thuật toán đó không tính đến mọi ràng buộc của vấn đề này và khó có thể trộn lẫn với nhau.
Tôi đã nghĩ về một loạt các phương pháp, bao gồm đặt một khu vực và quay lui cho đến khi tìm thấy một vị trí phù hợp, nhưng chúng có vẻ rất phụ thuộc vào thử nghiệm và sai sót và tốn kém về mặt tính toán. Nhưng, dựa trên nghiên cứu sâu rộng về hai vấn đề cuối cùng mà tôi đã đề cập, nó có thể là giải pháp duy nhất / tốt nhất?
Tôi chỉ muốn xem liệu ai đó đã có vấn đề tương tự trong quá khứ hoặc sẵn sàng giúp tôi tìm ra điều này và cho tôi một vài gợi ý về nơi tôi nên bắt đầu với thuật toán. Hoặc, không thành công, tôi sẽ phải xem xét nới lỏng các ràng buộc mà tôi đã đặt ra.