Công cụ trò chơi: một cách tử tế, kiến ​​trúc khôn ngoan, để thực hiện hỗ trợ kịch bản?


17

Tôi đang phát triển một công cụ trò chơi đơn giản (trong C #, nếu có vấn đề) và tôi không thể nghĩ ra một cách đủ tốt để thực hiện kịch bản về mặt kiến ​​trúc.

Đây là một chiến lược theo lượt đơn giản với các hình ảnh động độc lập, tùy chỉnh logic cho các trận chiến. Nó có một lớp kiến ​​trúc toàn cầu cho các hệ thống / công cụ cấp thấp và quan trọng nhất là hai mô-đun chính - logic và chế độ xem trò chơi - giao tiếp bằng trình quản lý sự kiện.

Và vấn đề là, tôi thực sự muốn các kịch bản ảnh hưởng đến cả hai thứ liên quan đến logic trò chơi (thay đổi thông số đơn vị, v.v.) và những thứ liên quan đến chế độ xem trò chơi, chẳng hạn như hoạt hình / đối thoại đặc biệt cho các trận chiến có thể phụ thuộc vào một số kịch bản kích hoạt.

(Thành thật mà nói, lý tưởng là tôi muốn kịch bản kiểm soát luồng trò chơi, chỉ để lại cơ chế / đồ họa cốt lõi cho logic / chế độ xem, nhưng tôi chưa quen với điều này, vì vậy tôi không chắc mình có thể làm điều đó ngay bây giờ)

Tôi đã nghĩ đến ba lựa chọn:

  • Chỉ cần để kịch bản sống theo logic, nhưng hãy cho nó biết về khía cạnh đồ họa của trò chơi. Nhưng điều này sẽ làm cho sự phân chia logic / khung nhìn rất mơ hồ, sẽ không ...

  • Tạo kịch bản thành một mô-đun riêng biệt sẽ trao đổi các sự kiện với những người khác bằng cùng một trình quản lý sự kiện. Nhưng điều này đòi hỏi phải rất cẩn thận về việc đồng bộ hóa sự kiện, tôi đoán vậy ... và cũng thêm rất nhiều loại sự kiện cho người quản lý. (Tuy nhiên, yêu thích cá nhân)

  • Làm cho kịch bản một mô-đun trên tất cả, để nó có thể ảnh hưởng trực tiếp / gọi các chức năng của logic / khung nhìn. Điều này cho phép một chức năng vốn đã rộng hơn với chi phí sắp xếp toàn bộ sơ đồ trao đổi sự kiện và sợ rằng tập lệnh có thể phá vỡ mọi thứ ngay cả khi nó thực sự không nên.

Vì vậy, tôi không thể quyết định một trong những điều này cũng như không nghĩ ra cách nào tốt hơn để chèn mô-đun kịch bản ... Bất kỳ đề xuất hoặc liên kết hữu ích nào?

Cảm ơn bạn!

Ps cảm ơn vì đã di chuyển câu hỏi, không biết có một phần chuyên biệt dành cho gamedev


Bạn có vấn đề gì khi giới thiệu một ngôn ngữ kịch bản sẽ giải quyết?
khoan hồng

Câu trả lời:


3

Tôi tin rằng bạn muốn tùy chọn thứ ba nhưng bạn sẽ thấy rằng bạn đúng trong suy nghĩ của bạn rằng có những sự kiện logic xảy ra ở hai địa điểm có khả năng là một điều xấu. Bạn sẽ thấy rằng bạn muốn mô-đun logic của động cơ kết thúc là một bản cập nhật đánh dấu hai câu hỏi 'Tôi phải làm gì bây giờ?' và 'Làm thế nào để tôi làm điều đó?' mà sau đó bạn có thể liên kết các tập lệnh để xử lý trả lời các câu hỏi đó.

Kết hợp điều này với việc phơi bày các đối tượng chứa dữ liệu và API để truy cập các thành phần Logic cần thiết (ý tôi là bạn có thể viết kịch bản tìm đường dẫn AI, nhưng vì đó là một đoạn mã chung có khả năng được sử dụng và sử dụng lại, tại sao không nhúng nó vào mô-đun và sau đó thêm nó vào API tiếp xúc với ngôn ngữ kịch bản lệnh?). Điều này sẽ cung cấp cho bạn khả năng tiếp cận cũng như các địa điểm được xác định rõ ràng nơi mọi thứ đang xảy ra.

Một lần nữa, tôi báo trước điều này với cùng một tuyên bố tôi luôn làm. Một sản phẩm hoàn thành luôn có giá trị hơn một lý thuyết tốt trong lập trình :)

Hi vọng điêu nay co ich!


2

Nhiều người có xu hướng đánh giá thấp sức mạnh của ngôn ngữ năng động khi nghĩ rằng sự linh hoạt như vậy phải trả giá bằng tốc độ; Điều này đúng nhưng thường thì chi phí không đáng kể.

Cá nhân tôi có xu hướng phát triển càng nhiều càng tốt bằng cách sử dụng các ngôn ngữ động khai thác tính biểu cảm và sau đó tôi lập hồ sơ nguyên mẫu để hiểu nơi nàonếu cần tối ưu hóa.

Trong trường hợp của bạn, điều này có nghĩa là bạn nên cố gắng chuyển sang tùy chọn thứ ba, phát triển phần "cao hơn" bằng ngôn ngữ động phù hợp mà bạn cũng có thể sử dụng làm ngôn ngữ kịch bản.

Rất nhiều mẫu có thể được sử dụng sau khi bạn đặt tính năng động ở độ sâu phù hợp. Các tập lệnh tùy chỉnh của bạn có thể được tích hợp trong một hệ thống dựa trên sự kiện như một hệ thống gọi lại, khi lõi gọi lại, nó có thể cung cấp một môi trường phù hợp để tập lệnh có thể thay đổi trạng thái toàn cầu hoặc chỉ là trạng thái của một tập hợp con của toàn hệ thống.

Bạn có thể gói gọn giao diện mà tập lệnh của bạn có thể tương tác bằng cách sử dụng mẫu Façade. Trong các phương thức mặt tiền, bạn có thể đặt logic xác định cách thức , thời gian , nếu tập lệnh có thể sử dụng chức năng và trừu tượng hóa tương tác tập lệnh từ việc triển khai cốt lõi.

Giao diện tập lệnh của bạn nên cung cấp các phương thức xuất xưởng có liên quan để tập lệnh có thể tạo các phần tử mà không cần khởi tạo chúng trực tiếp; những trường hợp này có thể được bao bọc trên các đối tượng thực để có thể triển khai logic điều khiển truy cập hơn nữa.


1

Đối tượng kịch bản cần có quyền truy cập vào các đối tượng khác mà nó sẽ cung cấp dữ liệu cho. Cẩn thận không chuyển các đối tượng khác trực tiếp vào đối tượng kịch bản. Làm như vậy tạo ra một giao diện dễ vỡ. Bạn có thể muốn có một cái gì đó giống như một lớp trung gian quản lý các tham chiếu đối tượng đó và cung cấp quyền truy cập dữ liệu vào đối tượng kịch bản lệnh.


1

Lua là một lựa chọn phổ biến cho một ngôn ngữ kịch bản mục đích chung. Bạn có thể tạo ngôn ngữ kịch bản của riêng mình bằng cách sử dụng Lex và Yacc (xem bài viết trong Lập trình trò chơi Đá quý 3) nhưng tôi sẽ nói rằng hầu hết các nhu cầu của bạn có thể được quan tâm với Lua cho dù lớn hay nhỏ.

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.