Làm cách nào để triển khai một hệ thống lập trình trong trò chơi của tôi vừa dễ truy cập, mạnh mẽ và nhanh chóng để mã hóa?


15

Tôi hiện đang làm việc trên một trò chơi hộp cát dựa trên không gian sẽ có nhiều khả năng tùy chỉnh chương trình hệ thống của bạn. Tôi muốn thực hiện điều này theo cách là cả hai

  1. có thể truy cập,
  2. mạnh mẽ (mức tối thiểu trần sẽ là sự hoàn thiện)
  3. nhanh chóng để mã trong.

Các ngôn ngữ dựa trên văn bản nói chung chỉ đáp ứng hai yêu cầu sau và trong khi không khó để thiết kế một ngôn ngữ hình ảnh thỏa mãn hai ngôn ngữ đầu tiên, ngôn ngữ hình ảnh là một vấn đề khó khăn để lập trình do yêu cầu sử dụng chuột rộng rãi. Mặc dù có một số ngôn ngữ dựa trên văn bản rất dễ truy cập, tôi muốn những người không phải là lập trình viên hoàn chỉnh có thể dễ dàng tự lập trình.


Tôi sẽ ngạc nhiên nếu bất cứ ai thực sự có thể cho bạn một ví dụ. Vì tôi thực sự nghĩ rằng điều này cần một số nghiên cứu sâu rộng (chẳng hạn như cách con người áp dụng logic và những gì không, yếu tố tâm lý bất cứ điều gì và tất cả những thứ trung tâm của con người)
Sidar

2
Không ai nhắc đến Scratch?
Russell

2
Tôi sẽ không đề xuất một cuộc bỏ phiếu chặt chẽ, nhưng tôi muốn chỉ ra rằng điều này rơi khá dễ dàng vào mục "Nếu bạn có thể tưởng tượng toàn bộ cuốn sách trả lời câu hỏi của bạn, bạn sẽ hỏi quá nhiều" những câu hỏi không nên hỏi từ Câu hỏi thường gặp; Đây là một vấn đề rất khó khăn và trong khi mọi người ở đây có thể đưa ra lời khuyên, thì đây là một vấn đề có thể vượt ra ngoài giới hạn của một trang web SE để giải quyết.
Steven Stadnicki

Điều đáng chú ý là tính đầy đủ của Turing có thể đạt được bằng trò chơi cuộc sống của Conway , Minecraft và các hệ thống khác không được thiết kế để lập trình.
Sẽ

Câu trả lời:


10

Thực sự, cách duy nhất để có tất cả các tính năng là thực hiện nhiều giao diện. Có thể truy cập và mạnh mẽ thường là hai đầu của một quang phổ. Cách dễ nhất để làm điều này là triển khai một hệ thống mạnh mẽ, có giao diện bổ sung để cho phép người mới bắt đầu tương tác với hệ thống một cách trực quan.

Cho phép một hệ thống cho phép người mới bắt đầu lập trình trực quan, có lẽ là một cái gì đó tương tự như các công cụ lập trình Lego Mindstorms :

nhập mô tả hình ảnh ở đây

Nơi có các thành phần kéo / thả. Các thành phần có đầu vào và đầu ra. Các thành phần có thể là những thứ đơn giản như AND, hoặcOR cổng, hoặc phức tạp hơn như thử nghiệm cho kẻ thù gần đó.

Lý tưởng nhất là biểu diễn trực quan nên biên dịch một kịch bản ngôn ngữ viết trong nền.Điều này cung cấp một công cụ mạnh mẽ để học ngôn ngữ quá. Nếu người mới bắt đầu có thể "viết" chương trình của họ một cách trực quan, thì hãy đọc mã mà nó tạo ra để họ có thể hiểu nó nhiều hơn và có thể sửa đổi mã được tạo ra. Cuối cùng, có thể viết mã mạnh hơn các công cụ trực quan cho phép. Điều này đáp ứng yêu cầu giúp người dùng dễ dàng lập trình.

Xương sống của hệ thống, tất nhiên, là một ngôn ngữ viết. Các công cụ trực quan chỉ để cung cấp cho người dùng một cách nhanh chóng cách để lập trình một cái gì đó đơn giản và cho phép người mới bắt đầu bắt đầu.

Ngôn ngữ viết cho phép người dùng nâng cao thực hiện những điều nâng cao. Và thậm chí bạn có thể cho phép người dùng tạo các thành phần của riêng họ, bằng cách tạo các tập lệnh tùy chỉnh. Sau đó, họ có thể sử dụng lại các thành phần họ đã thực hiện trong một giao diện nhanh chóng và dễ dàng để lập trình nhanh.

Chúc may mắn! Âm thanh như một dự án thú vị.


Cám ơn vì đã giải thích. Tôi đã thực sự nghĩ đến việc làm một cái gì đó giống như NXT-G, chỉ có tôi mới biết từ kinh nghiệm khó khăn như thế nào để tạo ra các chương trình phức tạp trong một ngôn ngữ như vậy. Tôi thích ý tưởng chuyển đổi các chương trình trực quan thành mã, cho phép người chơi quay lại và chỉnh sửa chương trình của họ bằng văn bản khi họ có nhiều kinh nghiệm hơn, vì vậy tôi có thể sẽ sử dụng điều đó.
Dimitriye98

1
Coi chừng việc dễ dàng tạo ra một số mã tập lệnh từ các biểu diễn đồ họa nhưng rất khó để tạo ra một biểu diễn đồ họa (có ý nghĩa và có thể đọc được) từ một tập lệnh. Vì vậy, bạn có thể sẽ kết thúc với một cú pháp kịch bản lệnh rất hạn chế.
Imi

1
Không chắc bạn muốn triển khai tập lệnh-> trực quan vì lý do chính xác đó. Gắn bó với visual-> script.
MichaelHouse

Các khối macro (các khối cung cấp đầu vào / đầu ra và khả năng đặt các khối abitrary bên trong) có thể được sử dụng để cung cấp phân cấp, đóng gói và tái sử dụng để dễ dàng tạo ra các chương trình phức tạp. Chỉ cần đảm bảo rằng bạn không thể đặt macro bên trong macro hoặc bạn phát hiện các trường hợp như vậy ... Tôi biết ít nhất một progam không phát hiện được các vòng lặp vô hạn như vậy.
Exilyth

5

Bạn có thể muốn có một cái nhìn về khối của Google , họ kết hợp các yếu tố trực quan với các thuật ngữ lập trình dễ nhận biết trong khi vẫn duy trì mức độ tiếp cận khá tốt.

nhập mô tả hình ảnh ở đây

Bạn có thể xem thử Maze demo để lấy cảm hứng, nhiều người bạn không phải lập trình viên của tôi có khả năng vượt qua các câu đố bằng cách sử dụng nó, đáp ứng ít nhất một số tiêu chí của bạn có hiệu lực.


Ngôn ngữ thú vị từ quan điểm tiếp cận, tuy nhiên lập trình trong đó rất chậm (tôi mới thử) ...
Pasha

@PashaS Quả thực là như vậy, tôi đoán đó là một phần của cái giá bạn phải trả để thử và có được thứ tốt nhất của cả hai thế giới.
Quetzalcoatl

4

Tôi ngạc nhiên điều này chưa từng được đề cập trước đây, nhưng Scratch của MIT sử dụng giao diện khối nhanh để mã hóa. Nó cho phép người dùng tạo các chức năng của riêng họ và có thể phức tạp một cách đáng ngạc nhiên đối với một ngôn ngữ được xây dựng để dạy cho trẻ em cách mã.

Stencyl là một ví dụ khác về mã hóa khối thực hiện một cái gì đó tương tự như những gì bạn muốn. Mã hóa với các khối như thế này hiệu quả hơn và tốn ít thời gian hơn so với các giao diện lập trình trực quan như giao diện được sử dụng bởi Lego NXT. Stencyl cho phép người dùng viết mã trong Actioncript hoặc khối.

Tôi xin lỗi vì thiếu hình ảnh, tôi chưa đủ danh tiếng để đăng ảnh.


2

Ngôn ngữ lập trình BPEL có biểu diễn trực quan và nhiều công cụ làm việc với nó. Nó là một ngôn ngữ tiến trình công việc, không phải là ngôn ngữ lập trình, nhưng nó hoàn chỉnh. Nó dài dòng, nhưng nó dễ viết cho cả lập trình viên và doanh nhân và nó dễ dàng dịch từ hình ảnh sang dạng văn bản. Tôi không nghĩ rằng nó sẽ tạo ra một ngôn ngữ trò chơi hay, nhưng nó có thể đóng vai trò là nguồn cảm hứng. Và với số lượng công cụ và công cụ BPEL, có thể sử dụng lại một số ý tưởng và / hoặc mã.

Ngôn ngữ giống như BPEL sẽ không cảm thấy giống như lập trình, giống như các hệ thống định tuyến và kết nối. Vì vậy, bạn có thể có một hệ thống nhắm mục tiêu được kết nối với một hệ thống súng với một số logic ở giữa.


+1: Mặc dù tôi không ủng hộ chính BPEL, nhưng cách tiếp cận của nó chính xác là câu trả lời tôi sẽ cung cấp. Ngôn ngữ có tính chính quy cao, vừa dễ trình bày bằng văn bản hoặc trực quan, vừa tập trung nhiều vào định tuyến / phản hồi sự kiện hơn là các mô hình lập trình "bình thường".
Sean Middleditch

1

Hãy xem xét phương pháp này:

  1. Hãy chắc chắn, logic tập lệnh của bạn có thể biểu thị được trong các cơ chế dựa trên quy tắc đơn giản. Ví dụ: bạn có "Kích hoạt" xảy ra trong quá trình chơi trò chơi liên quan đến "Điều kiện" phải được điền đầy đủ và sau đó "Hành động" được thực thi (bị đánh cắp một cách đáng xấu hổ từ Starcraft 2 Editor).
  2. Sau đó cung cấp Giao diện người dùng nơi bạn có thể kéo một số Hành động / Điều kiện / Kích hoạt được xác định trước xung quanh và do đó xây dựng 90% các trường hợp sử dụng mà mọi người thường muốn làm.
  3. Bây giờ có được một số công cụ kịch bản mạnh mẽ và phổ biến được tích hợp như Lua, Python hoặc C #
  4. Cuối cùng, hãy viết một vài dozends của các Hành động / Điều kiện / Kích hoạt bản thân bằng ngôn ngữ đó. Đảm bảo người dùng tùy chỉnh có thể sao chép-dán, chỉnh sửa và tích hợp các Hành động mới và mới này trong trình chỉnh sửa kéo của bạn một cách dễ dàng.
  5. Bạn có thể muốn có thể tham gia kích hoạt, Điều kiện và hành động của mình và do đó bạn cần một vài nguyên thủy hơn ba yếu tố này, ví dụ: "GameObject", "Position", "Number" hoặc "String". Trong giao diện người dùng, bạn sẽ cần một số hộp thoại để gán các tham số này, nhưng công việc đó vẫn ít tốn công hơn so với việc bạn có thể xây dựng toàn bộ tập lệnh thông qua các thao tác UI.

Đó là cách nhanh nhất tôi có thể nghĩ ra để có được tất cả kẹo mà không quá đau đớn. Bạn nhận được các nút bấm cũng như các vim-geek trên tàu. Và nếu bạn giữ cơ chế đơn giản (ví dụ: Kích hoạt -> Điều kiện -> Hành động), thì bạn không cần phải mất nhiều năm để phát triển giao diện người dùng cho trình chỉnh sửa tập lệnh đồ họa mạnh mẽ và vẫn dễ sử dụng.

Một số ví dụ để làm rõ ý tôi là gì:

  • Kích hoạt có thể là: "Khung trò chơi được khởi tạo", "Trò chơi đã tải", "Đơn vị được tạo", "Đơn vị bị hủy", "Người chơi bị hỏng", v.v. Các kích hoạt thường có một số tham số (ví dụ: Đơn vị được tạo sẽ nhận được GameObject đã được tạo)
  • Các điều kiện là tất cả các điều kiện boolean tiêu chuẩn và cơ bản (và / hoặc / không / bằng / lớn hơn ...) cộng với một số điều kiện điển hình bạn tìm thấy trong trò chơi của mình như "Đơn vị hoàn toàn khỏe mạnh" hoặc "Ít nhất hai Người chơi được kết nối". Các điều kiện thường có tham số mà người dùng cần điền (sử dụng UI)
  • Hành động là các kịch bản cũng có thể mất một số tham số đơn giản. như "Xoay máy ảnh thành XXX", "Tiêu diệt đơn vị Y", "Kết thúc trò chơi", "Thực thi kích hoạt" và "Gọi hành động X, Y, Z ... theo trình tự"

Lưu ý rằng chương trình dành cho máy tính IN trong trò chơi, không phải cho plugin. Dù sao cũng cảm ơn bạn.
Dimitriye98

Tôi thấy .. nghe có vẻ như một cách tiếp cận trò chơi thú vị;). Bạn đã xem xét các trò chơi tương tự như "Code Hero" hay "Garry's Mod", những người cố gắng cung cấp khả năng mã hóa mà không phá vỡ trò chơi? Dù sao, bạn vẫn có thể cứu vãn lời khuyên cơ bản của tôi và chia vấn đề thành các phần kịch bản và giao diện người dùng. Chúc may mắn với trò chơi của bạn. :)
Imi

Chà, mã hóa sẽ được thực hiện trên các máy tính trong trò chơi, không nên phá vỡ quá nhiều. Mặc dù người dùng muốn có thể mã ra khỏi trò chơi, sau đó nhập mã vào lưu của họ hoặc máy chủ họ chơi.
Dimitriye98
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.