2009-03-04 40 views
9

Tôi đang phát triển một thế giới trò chơi được tạo theo thủ tục bằng Python. Cấu trúc của thế giới sẽ tương tự như mô hình MUD/MUSH của các phòng và lối ra được sắp xếp như một đồ thị được chỉ dẫn (các phòng là các nút, lối ra là các cạnh). (Lưu ý rằng đây là không phải là nhất thiết phải là biểu đồ tuần hoàn, mặc dù tôi sẵn sàng xem xét các giải pháp tuần hoàn.)Chiến lược tốt để xây dựng biểu đồ đạo diễn cho bản đồ trò chơi (bằng Python) là gì?

Để thuật toán thế hệ, các loại phòng khác nhau sẽ được phân biệt bằng thuộc tính của mỗi phòng thiết lập các chuỗi). Một khi chúng đã được khởi tạo, các phòng có thể được truy vấn và được chọn bởi các thẻ (thẻ đơn, giao điểm thẻ, liên kết thẻ, ứng cử viên tốt nhất).

Tôi sẽ tạo các loại phòng cụ thể bằng cách sử dụng hệ thống tôn vinh đối tượng mẫu và phương pháp nhà máy - Tôi không nghĩ chi tiết quan trọng ở đây, vì việc triển khai hiện tại có thể sẽ thay đổi để phù hợp với chiến lược đã chọn. (Ví dụ, nó sẽ có thể để thêm thẻ và thẻ-truy vấn đến các mẫu phòng hệ thống.)

Đối với một ví dụ, tôi sẽ có phòng các loại:

side_street, main_street, plaza, bar, hotel, restaurant, shop, office

Cuối cùng, câu hỏi: những gì là một chiến lược tốt để khởi tạo và sắp xếp các phòng này để tạo biểu đồ có thể tương ứng với các quy tắc nhất định?

Một số quy tắc có thể bao gồm: một quảng trường cho mỗi 10.000 dân; main_street kết nối với plaza; side_street kết nối với main_street hoặc side_street; hotel ủng hộ các kết nối main_street hoặc plaza và nhận thêm thẻ tương ứng; v.v.

Điểm thưởng nếu chiến lược được đề xuất sẽ bật triển khai theo hướng dữ liệu.

Trả lời

7

Trước tiên, bạn cần có ý thức về Vị trí. Các đối tượng khác nhau của bạn chiếm một số không gian tọa độ.

Bạn phải quyết định mức độ thường xuyên của những thứ này. Trong trường hợp tầm thường, bạn có thể thả chúng vào không gian tọa độ của bạn dưới dạng hình chữ nhật đơn giản (hoặc hình chữ nhật rắn) để làm cho các vị trí đơn giản hơn để lên kế hoạch.

Nếu mọi thứ không đều - và được đóng gói dày đặc - cuộc sống có phần phức tạp hơn.

Xác định Bản đồ để chứa vị trí. Mỗi vị trí có một khoảng tọa độ; nếu bạn làm việc với các hình chữ nhật đơn giản, thì mỗi vị trí có thể có một bộ (trái, trên, phải, dưới).

Bản đồ của bạn sẽ cần phương pháp để xác định xem ai đang cư trú trong một không gian nhất định, và những gì tiếp giáp với không gian vv

Bạn có thể sau đó đơn vị kiểm tra điều này với một tập cố định các địa điểm bạn đã làm việc ra rằng tất cả có thể được đưa vào bản đồ và vượt qua một số kiểm tra độ chính xác cơ bản cho những cuộc xung đột, tiếp cận và tương tự.


Thứ hai, bạn cần một loại "máy tạo mê cung". Một mê cung được kết nối đơn giản dễ dàng được tạo ra như một cấu trúc cây được gấp lại thành không gian nhất định.

Mê cung/cây có nút "gốc" sẽ là trung tâm của mê cung. Không nhất thiết phải là trung tâm vật lý của không gian của bạn, nhưng nút gốc sẽ là giữa cấu trúc mê cung.

Lý tưởng nhất, một nhánh từ nút này chứa một "lối vào" cho toàn bộ không gian.

Chi nhánh khác từ nút này chứa một "thoát" từ toàn bộ không gian.

Ai đó có thể đi lang thang từ lối vào để thoát ra, ghé thăm rất nhiều địa điểm "cuối cùng" trên đường đi.

Chọn một loại khoảng trống cho nút gốc. Thả nó vào không gian Map của bạn.

này sẽ có 1-n lối vào, mỗi trong số đó là một cây con với một nút gốc và 1-n lối vào. Đây là công việc kinh doanh nhiều lối vào khiến cây phù hợp với cấu trúc này. Ngoài ra một cây thích hợp luôn luôn được kết nối tốt trong đó bạn không bao giờ có phần bị cô lập mà không thể đạt được.

Bạn sẽ - đệ quy - thoát ra khỏi nút gốc, chọn vị trí và thả chúng vào không gian có sẵn.

Kiểm tra đơn vị này để đảm bảo nó lấp đầy không gian một cách hợp lý.


Phần còn lại của các yêu cầu của bạn được tinh chỉnh trên cách trình tạo mê cung chọn vị trí.

Cách dễ nhất là có một bảng trọng số và lựa chọn ngẫu nhiên. Chọn một số ngẫu nhiên, so sánh nó với trọng số để xem loại vị trí nào được xác định.


Định nghĩa không gian của bạn có thể là 2D hoặc 3D - cả hai đều khá hợp lý. Đối với tín dụng thưởng, hãy xem xét cách bạn triển khai một không gian 2D được lát bằng hình lục giác thay vì hình vuông.

"Hình học" này có thể là một Chiến lược trình cắm thêm vào các thuật toán khác nhau. Nếu bạn có thể thay thế hình vuông 2D bằng hình lục giác 2D, bạn đã hoàn thành tốt công việc thiết kế OO.

+0

-1: OP hỏi về cách tiếp cận đồ thị không phối hợp, được sử dụng trong nhiều trò chơi khá thành công (và cho phép kết nối không liên tục hơn, có thể khá hữu ích). Bạn mô tả một cách tiếp cận hoàn toàn khác (không nhất thiết phải tốt hơn). –

+0

Ngoài ra, một cây không phải là cấu trúc dữ liệu phù hợp cho ứng dụng này. OP cho biết đồ thị, và ông có nghĩa là đồ thị. Một cây chỉ là một biểu đồ tuần hoàn, và bạn không muốn giới hạn tuần hoàn trong trường hợp này. –

+0

@Carl Meyer: "OP hỏi về cách tiếp cận đồ thị không phối hợp" Tốt để biết. Tôi tự hỏi làm thế nào bạn biết điều đó? Bất kỳ từ hoặc cụm từ nào trong câu hỏi chỉ ra điều này? Tôi không thể tìm thấy. Tôi đã bỏ lỡ cái gì? –

2

Kiểm tra các cuộc thảo luận trên The MUD Connector - có một số cuộc thảo luận tuyệt vời về bố cục và thế hệ thế giới và các loại hệ tọa độ/điều hướng khác nhau trong diễn đàn "Mã hóa và thiết kế nâng cao" (hoặc tương tự).

+0

Tài nguyên tốt, nhưng tôi đánh giá cao một số liên kết trực tiếp. –

Các vấn đề liên quan