Tôi hiện đang tạo ra một trò chơi thám hiểm tàu vũ trụ và tôi gặp một vấn đề lớn mà tôi đã cố gắng giải quyết trong nhiều tháng, và qua phần còn lại của nhóm tôi quyết định chọn viết lại để sửa một số spaghetti lớn.
Dù sao, các vấn đề diễn ra như sau:
Người chơi bắt đầu trong một căn phòng, từ đó họ có thể đi đến một số phòng liền kề khác thông qua các ô cửa.
Những ô cửa này được lưu trữ trong bản đồ về hướng mà chúng đi vào và đối tượng ô cửa mà chúng tham chiếu. Mỗi đối tượng Doorway theo dõi hai phòng mà nó liên kết và sẽ hướng người chơi đến từng phòng khi cần thiết.
Tuy nhiên, tất cả các phòng cần có thể truy cập được bằng ít nhất một tuyến đường và đi qua một ô cửa ở phía mạn phải có nghĩa là các phòng khác cần phải có cùng một ô cửa ở phía cổng. Tôi có thể làm điều này bằng cách chỉ cần mỗi bức tường là một cánh cửa, nhưng điều đó trở nên nhàm chán để khám phá.
Việc tạo trước những thứ này đã chứng tỏ đủ một mớ hỗn độn khiến tôi thất bại, nhưng bây giờ, thông số kỹ thuật đã thay đổi. Thế giới sẽ là vô hạn về mặt lý thuyết, và như vậy, đường dẫn không thể được tạo trước, và thay vào đó phải được thực hiện khi cần phòng mới, hoặc dự kiến sẽ sớm được yêu cầu.
Vì vậy, tôi cần phải tạo ra cái mà thực chất là một mê cung, với các vòng lặp được phép, được vẽ trên lưới, mỗi ô vuông một lần, trong đó không chỉ mỗi phòng không trực tiếp nhận ra những cái khác tồn tại, mà còn có thể nhận được từ nhau. Trên hết, đi qua một ô cửa ở một bên của căn phòng có nghĩa là cùng một ô cửa cần phải ở phía đối diện của phòng bên cạnh.
Cách tốt để đảm bảo tất cả các tính chất này là gì? Tôi sẵn sàng chia tay với những căn phòng không có kiến thức về người khác, nhưng thà giữ nó theo cách này để dễ dàng tạo lại loại phòng sau này, nếu điều đó trở nên cần thiết.
Dưới đây là tệp văn bản ascii mockup của ví dụ 5x5 tôi đã tạo https://pastebin.com/EtdAWAwD Các dòng là tường, X là cửa và S là vị trí bắt đầu của người chơi.
Bất kỳ lời khuyên nào đều được đánh giá cao, ngay cả trên các tuyến đường thay thế để xem xét để tạo ra những điều này.