如何在我的游戏中实现既可访问,功能强大又可快速编写代码的编程系统?


15

我目前正在开发一款基于空间的沙盒游戏,该游戏将具有自定义系统编程功能的强大功能。我想以一种既可以实现又可以实现

  1. 无障碍,
  2. 强大(最低裸线将是图尔完备性)
  3. 快速编码。

基于文本的语言通常仅满足后两个要求,而设计满足前两个条件的视觉语言并不难,但由于需要大量使用鼠标,视觉语言很难编程。尽管有一些非常容易使用的基于文本的语言,但我希望完全的非程序员能够使自己轻松进行编程。


如果有人真的可以举一个例子,我会感到惊讶。因为我确实认为这需要一些广泛的研究(例如人类如何应用逻辑而不是逻辑,心理因素以及所有这些以人类为中心的东西)
锡达

2
没有人提到Scratch吗?
罗素

2
我不会建议您进行近距离投票,但是我想指出的是,这很容易进入“如果您能想象整本书回答您的问题,您的问题就太多了”从常见问题;这是一个非常棘手的问题,尽管这里的人们可以提供建议,但这是一个SE网站可能无法解决的问题。
Steven Stadnicki

值得注意的是,可以通过Conway的生活游戏Minecraft和其他非用于编程的系统来实现Turing完整性。
威尔

Answers:


10

实际上,拥有所有功能的唯一方法是实现多个接口。易于访问且功能强大通常是频谱的两端。最简单的方法是实施功能强大的系统,该系统具有一个额外的界面,允许初学者以直观的方式与系统进行交互。

允许一个允许初学者直观地进行编程的系统,也许类似于Lego Mindstorms编程工具:

在此处输入图片说明

有拖放组件的位置。组件具有输入和输出。组件可以是简单的事物,例如AND,或OR门,也可以是更复杂的事物,例如对附近敌人的测试。

理想情况下,视觉表示应在后台编译书面语言脚本。这也提供了学习语言的强大工具。如果初学者可以直观地“编写”他们的程序,然后阅读它产生的代码,那么他们更有可能理解它并能够修改产生的代码。最终,他们能够编写比单独的视觉工具更强大的代码。这满足了使用户易于编程的要求。

该系统的骨干当然是一种书面语言。视觉工具只是为了给用户一种快速的方法来编写简单的程序,并允许初学者入门。

书面语言允许高级用户执行高级操作。您甚至可以通过创建自定义脚本来允许用户创建自己的组件。然后,他们可以在快速,简单的界面中重复使用自己制作的组件,以进行快速编程。

祝好运!听起来像是一个有趣的项目。


谢谢你的解释。我实际上是在想自己做类似NXT-G的事情,只有从经验中我知道用这种语言制作复杂的程序是多么困难。我喜欢将可视程序转换为代码的想法,允许玩家在经验丰富的时候回头以文本方式编辑程序,因此我很可能会使用它。
Dimitriye98

1
请注意,它很容易从图形表示形式中生成一些脚本代码,但是很难从脚本中生成(有意义和可读的)图形表示形式。因此,您最终可能会获得非常受限制的自己的脚本语法。
Imi

1
出于确切的原因,您不太可能想要实现脚本->可视化。坚持使用visual-> script。
MichaelHouse

宏块(提供输入/输出和在内部放置任意块的能力的块)可用于提供层次结构,封装和重用,以简化复杂程序的创建。只要确保您不能将宏放置在宏中,否则您就可以检测到这种情况……我知道至少有一个程序无法检测到这种无限循环。
2013年

5

您可能想要看看Google的整体知识,它们将视觉元素与可识别的编程术语结合在一起,同时保持了相当不错的可访问性。

在此处输入图片说明

您可以查看Maze演示以获取灵感,我的许多非程序员朋友都可以使用它来解决大部分难题,至少可以满足您的某些标准。


从可访问性的角度来看有趣的语言,但是其中的编程非常慢(我刚刚尝试过)...
Pasha

@PashaS确实,我想那是您要尝试获得两全其美所必须付出的一部分价格。
Quetzalcoatl

4

令我惊讶的是之前没有提到过,但是麻省理工学院的Scratch使用了一个快速编码的块接口。它允许用户创建自己的功能,并且对于教孩子如何使用的语言可能会变得异常复杂。码。

Stencyl是块编码的另一个示例,其功能类似于您想要的。与像Lego NXT所使用的可视化编程接口相比,使用此类块进行编码更加高效且省时。Stencyl允许用户使用Actionscript或块进行编码。

很抱歉缺少图片,我还没有足够的声誉来发布图片。


2

BPEL编程语言具有视觉表示形式,并且可以使用许多工具。它是一种工作流语言,而不是编程语言,但是它是图灵完整的。它很冗长,但是对于程序员和商人来说都很容易编写,并且可以很容易地从视觉形式转换为文本形式。我认为这不会成为一种好的游戏语言,但是它可以作为灵感的来源。考虑到BPEL引擎和工具的数量,应该可以重用一些想法和/或代码。

类似BPEL的语言不会像编程那样,更像是路由和连接系统。因此,您可以将瞄准系统连接到喷枪系统,并在两者之间添加一些逻辑。


+1:虽然我不主张BPEL本身,但它的方法恰好是我所提供的答案。高度规则的语言,既易于在文本中或在视觉上表示,并且比更多的“常规”编程范例更关注事件路由/响应。
肖恩·米德迪奇

1

考虑这种方法:

  1. 确保您的脚本逻辑可以在基于规则的简单机制中表达。例如,您有一个“触发”发生在与“条件”相关的游戏过程中,必须先完成该“触发”,然后执行“动作”(从Starcraft 2编辑器中偷偷偷走了)。
  2. 然后提供一个UI,您可以在其中拖放一些预定义的Actions / Conditions / Triggers,从而构造人们通常想要做的90%用例。
  3. 现在获得一些强大且流行的脚本引擎集成,例如Lua,Python或C#
  4. 最后,用这种语言自己编写许多这样的动作/条件/触发器。确保自定义用户可以轻松在拖放编辑器中复制粘贴,编辑和集成这些动作以及新动作。
  5. 您可能希望能够对触发器,条件和动作进行参数设置,因此需要比这三个更多的原语,例如“ GameObject”,“ Position”,“ Number”或“ String”。在UI中,您将需要一些对话框来分配这些参数,但是与必须能够通过UI操作构造整个脚本相比,这仍然要少得多。

那是我想出的最快的方法,可以使所有的糖果都没有太多的痛苦。您会获得click'n'drag noobs以及板上的vim-geeks。而且,如果您保持简单的机制(例如,触发->条件->动作),那么您就不必花费大量的精力来开发功能强大且仍易于使用的图形脚本编辑器的UI。

一些例子可以弄清楚我的意思:

  • 触发器可能是:“游戏框架已初始化”,“游戏已加载”,“已创建单位”,“单位已损坏”,“玩家已损坏”等等。触发器通常具有一些参数(例如,创建的单位获取已创建的GameObject)
  • 条件是所有标准布尔值和基本算术条件(和/或/非/等于/更大...)以及您在游戏中发现的一些典型条件,例如“单位处于完全健康状态”或“至少连接了两个玩家”。条件通常具有用户需要填写的参数(使用UI)
  • 操作是脚本,也可以采用一些简单的参数。例如“将摄像机平移到XXX”,“杀死单位Y”,“游戏结束”,“执行触发器”和“依次调用X,Y,Z ...”

请注意,该编程适用于游戏中的计算机,而不适用于插件。不过还是谢谢你。
Dimitriye98

我看..听起来像是一种有趣的游戏方法;)。您是否看过类似的游戏,例如“ Code Hero”或“ Garry's Mod”,它们试图提供编码功能而不破坏游戏的沉浸感?无论如何,您仍然可以挽救我的基本建议,并将问题分为脚本和UI部分。祝您游戏顺利。:)
Imi

好吧,编码将在游戏机上完成,这不会过多地破坏沉浸感。虽然想要的用户将能够在游戏外进行编码,然后将代码导入其保存的文件或所使用的服务器。
Dimitriye98
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.