Làm cách nào tôi có thể triển khai hệ thống chỉ huy cho trò chơi phiêu lưu theo phong cách điểm nhấn?


11

Tôi đang thực hiện một trò chơi phiêu lưu điểm và nhấp chuột, và hiện tôi đang cố gắng tìm ra cách tốt nhất để thực hiện một hệ thống chỉ huy.

Giả sử giao diện kiểu Đảo Khỉ hoặc Maniac Mansion, với một bảng động từ và các đối tượng trong cảnh và trong kho. Nhấp vào những cái này, bạn xây dựng một câu để thực thi.

ví dụ: bạn có thể nhấp look atvà sau đó là một cái cây để "nhìn vào cây" hoặc nhấp vào một quả táo, và sau đó give, sau đó là một cô gái, để "tặng táo cho cô gái".

Có ba hình thức có thể của một câu:

  • verb, ví dụ "lưu"
  • verb noun, ví dụ "nhặt táo", "nhìn bạch tuộc"
  • verb noun noun, ví dụ: "đưa dưa chua cho chó dại", "sử dụng xà beng với lọ dưa chua"

Trong các tình huống khác nhau, tôi muốn hành động được thực hiện được xác định bởi các đối tượng khác nhau.

Ví dụ, đối với giveđộng từ, có thể có một hành động mặc định được xác định khiến nhân vật nói điều gì đó như "Tôi thích bám vào đó hơn", hoặc con chó dại có thể định nghĩa một hành động mà nó ăn bất cứ thứ gì bạn cố gắng đưa ra .

Nếu giao diện hoạt động giống như Maniac Mansion, thì bạn xây dựng câu và sau đó bảo nó thực thi (trong Maniac Mansion, bằng cách nhấp vào câu hoặc nhấp lại vào điều cuối cùng bạn nhấp vào).

Nếu nó hoạt động như Đảo Khỉ, câu sẽ được thực thi ngay khi hoàn thành, điều này đặt ra một vấn đề cho các động từ useđôi khi có thể lấy một danh từ và lần khác hai.

Vì vậy, làm thế nào bạn sẽ thực hiện một hệ thống xử lý này?


1
Dường như có ba loại động từ, một loại cho danh từ không, loại khác cho hai, v.v ... Chúng không cùng loại đối tượng. Bạn không thể "nhìn bạch tuộc với lọ dưa chua" vì vậy looklà một động từ danh từ đơn, v.v.
tenpn

Câu trả lời:


10

Bạn có thể thấy dễ sử dụng hơn nếu bạn đảo ngược thứ tự lựa chọn. Vì vậy, người dùng nhấp vào một danh từ và sau đó trò chơi sẽ hiển thị tập hợp các động từ có thể được thực hiện trên danh từ đó. Nếu động từ yêu cầu một đối tượng (tức là "đưa cho ___", thì trò chơi sẽ chờ người dùng chọn đối tượng trước khi thực hiện hành động.

Cái gì đó như:

  1. Người dùng nhấp vào một miếng phô mai.
  2. Trò chơi hiển thị một menu: "nhặt, ăn, nhìn, đưa cho ___".
  3. Người dùng chọn "đưa cho ___".
  4. Game nói "tặng cho ai?" và chờ người dùng nhấp vào một danh từ khác (hoặc nút hủy).
  5. Người dùng nhấp vào một con khỉ.
  6. Trò chơi cho phô mai cho khỉ.

Thực hiện khôn ngoan, mỗi đối tượng trong trò chơi cần phải có dữ liệu cho:

  1. Những bộ động từ bạn có thể áp dụng cho nó.
  2. Đối với các động từ, nó cho phép lấy một đối tượng, tập hợp các đối tượng có thể được áp dụng.
  3. Đối với mỗi cặp động từ hoặc động từ-đối tượng, hành vi sẽ thực hiện khi người dùng thực hiện điều đó.

Vì ngữ pháp không thực sự lồng nhau hoặc bất cứ điều gì, bạn không nên cần một cái gì đó phức tạp như một mẫu trình thông dịch.


+1, cả về mặt mô hình hóa của sự vật và mặt giao diện của sự vật. Vâng, chủ yếu là tôi đồng ý vì đây là cách tôi làm, nhưng tôi thích câu trả lời này.
drhayes

Nếu chúng ta đồng ý, thì rõ ràng cả hai chúng ta phải đúng. ;)
khoan hồng

Vì vậy, một cách hiệu quả, bạn nghĩ rằng hành vi để thực hiện phải luôn được xác định bởi danh từ đầu tiên?
SpoonMeiser

1
Có, tôi nghĩ rằng nhiều danh từ sẽ chia sẻ hành vi (để "nhặt" sẽ sử dụng cùng một mã để chọn các đối tượng khác nhau), nhưng nó có ý nghĩa đối với danh từ đó để xác định bộ động từ có thể được áp dụng với nó Cho rằng tập hợp các danh từ rất lớn (mọi thứ trong trò chơi) và tập hợp các động từ nhỏ (có thể là một số ít thao tác), tôi nghĩ rằng người dùng nên chọn một danh từ trước vì điều đó làm giảm sự kết hợp xuống nhiều hơn Mau. Và, thực tế, nó cho phép người dùng nhấp vào một thứ để bắt đầu một tương tác, chứ không phải một số từ.
khoan hồng

Đây là loại làm thế nào đầy đủ ga đã làm nó.
Jari Komppa

2

Tôi trình bày giải pháp đơn giản. Nó có thể được mở rộng tất nhiên.

Tôi nghĩ rằng danh sách đơn giản của (động từ, object1, object2) sẽ giải quyết nó:

  • nếu người chơi nhấp vào đối tượng (động từ) "sử dụng" và nhấp vào đối tượng "khinh khí cầu" và người chơi đã nhấp vào đối tượng "pump" và tồn tại bộ ba ("sử dụng", "ballon", "pump") thì bạn "đã sử dụng ballon với pump"
  • Đôi khi object2 sẽ là NULL như trong "use helium" (use, helium, NULL)
  • Yêu cầu người chơi nhấp vào động từ đối tượng trước
  • nếu người chơi nhấp vào thứ gì đó không khớp với bất cứ điều gì nói "Tôi không thể làm điều này, điều này là vô nghĩa"
  • Tất nhiên Bạn nên kiểm tra sau mỗi lần nhấp nếu trình tự là chính xác.

Cách xử lý mặc định:

  • Nếu lần nhấp đầu tiên không nằm trên đối tượng động từ, hãy tìm kiếm hành động mặc định có thể.
  • Một cách để lưu trữ mặc định là tạo bộ tứ (động từ, object1, object2, is-default)
  • Một cách khác để lưu trữ chúng là có danh sách các bộ ba mặc định
  • ...

Vài ví dụ:

  • (sử dụng, ballon, bơm)
  • (cho, John, khoai tây)
  • (đi bộ, cá piranha, NULL)
  • (sử dụng, ballon trong kho, máy bơm)
  • (mở, cửa trên mái, NULL), mặc định .... ví dụ về hành động mặc định

Nó có thể được mở rộng:

  • thêm một số sự kiện sẽ được kích hoạt (cung cấp cho người chơi một cái gì đó, người chơi sẽ nói "Tôi không thể làm điều đó bởi vì tôi là một tên cướp biển hùng mạnh", bắt đầu cắt cảnh, thay đổi một cái gì đó trong thế giới ...)
  • thêm một số điều kiện tiên quyết. Đôi khi ballon có thể ở trong lồng, vì vậy bạn sẽ cần thể hiện "nếu ballon không ở trong lồng". Tôi nghĩ rằng tôi có thể tiếp cận điều này với tính toán sự kiện hoặc prolog hoặc thực hiện nó với con trỏ hàm ...
  • đôi khi câu trong dòng lệnh sẽ không phải là "nhìn vào lỗ" mà sẽ được viết lại thành "nhìn vào lỗ", điều này chỉ cần một biến :)

1

Có hai vấn đề ở đây: Giải thích đầu vào của người chơi vào cây cú pháp, sau đó thực hiện cây đó.

Đối với giai đoạn đầu tiên, tôi có mỗi nút động từ tạo một thể hiện động từ cụ thể xuất phát từ một số giao diện động từ. Trường hợp đó sẽ được thông qua thêm danh từ hoặc động từ để xác nhận. Nếu hợp lệ, nó sẽ gắn danh từ vào cây cú pháp bên trong của nó, nếu không nó sẽ từ chối với một lỗi thích hợp.

Sau mỗi lần nhấn nút, bạn có thể hỏi cây động từ nếu nó ở trạng thái hợp lệ để tiếp tục (đối với đầu vào kiểu Đảo Khỉ).

Khi chuyển sang giai đoạn thứ hai, động từ cụ thể sẽ chịu trách nhiệm phân tích cây riêng của nó và cập nhật trạng thái trò chơi.

Một giải pháp phức tạp hơn sẽ liên quan đến việc phân tích cây bên ngoài đến động từ. Mỗi yếu tố cây sẽ chịu trách nhiệm cho các hành động nhỏ cùng nhau tạo ra kết quả mong muốn. Cách tiếp cận này sẽ cho phép bạn tạo ra các câu mới nổi hơn từ các khối xây dựng nhỏ.

Kiểm tra mẫu Phiên dịch để biết thêm thông tin về giai đoạn phân tích cú pháp.


1
Tôi không nghĩ việc diễn giải đầu vào của người chơi là một vấn đề. Chắc chắn, không có gì phức tạp bằng phân tích cú pháp đầu vào cho một cuộc phiêu lưu văn bản cần thiết ở đây. Thực sự, câu hỏi tập trung vào cách bạn sẽ thiết kế hệ thống phân cấp và tương tác đối tượng của mình để cho phép linh hoạt tối đa đối với những gì đối tượng xác định hành động thực tế sẽ được thực hiện.
SpoonMeiser
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.