请问各位关于对话游戏的问题

2018-07-13 16:13:19 +08:00
 xbigfat

我曾将想过实现一个类似对话决策的游戏,大概流程就是玩家和电脑对话。 最后得到一个游戏成功或者失败的结果。 不知道这类的游戏模式、或者开发的程序称为什么,我暂且是叫做“对话树”不知道是否准确。

问题是这样,如果我用 Java 或者 C# 制作的话,如何去完成这样的程序?

我想过每个问题可能有若干个回答,每个回答可能会将故事指向不同方向的结局,难道是用 if else 不断的往下写,还是有某种成熟的设计模式能够完成这样的需求?

这个问题我想了很久了,有说用游戏引擎能做的,但是我一直都没有想通是如何实现的。。

我也同样好奇,类似 10010、10000 这类客服电话,是如何根据用户的选择进入不同的菜单的。这两者有点类似吧?

希望有大神不吝赐教,我想了好久了。。。

1309 次点击
所在节点    问与答
11 条回复
xbigfat
2018-07-13 16:16:13 +08:00
我用 C# 框体写过,但是没想好如何组织数据来复用框体。点一下弹出一个新窗体的话,可能最后一桌面都是框体吧。。。
across
2018-07-13 16:34:23 +08:00
搜状态机,或者行为树。
imn1
2018-07-13 16:35:03 +08:00
你说的是界面?
没写过 GUI 么?虽然我没写过 C#,但我知道 winform 可以单控件 refresh 啊,数据传过去 refresh 就是了
不懂怎么会有一堆 form 的想法
游戏我更加少接触,不过用游戏引擎应该更简单
across
2018-07-13 16:42:04 +08:00
一般复杂条件控制都用状态机来管理,比较方便,怎么写的话···找本 AI 基础书看看,大学学过数据结构应该没问题。
想要直观点的感受的话··· 懂 C#可以试试看,Unity3D 有个叫 Playmaker 的插件,大约能看懂。
这本书第 9 章 https://book.douban.com/subject/26313534/ 就是控制 RPG 事件和对话的,你可以在网上下个源代码参考,不过这个例子以教学为主,所以引申到了脚本撰写来控制(现代编辑器一般都有可视化界面)。
xbigfat
2018-07-13 16:56:01 +08:00
@across 谢谢,一会去看一下。
@imn1 是的,我知道界面可以单独刷新内容,我的意思是我没想好怎么组织数据,所以新建框体其实是把数据绑定在框体上的。

@across 想到过状态机了,但是没往下看,有点太复杂了怕方向不对。

这个想法本身是我一个朋友,妹子想给男朋友写个闯关游戏。。结果妹子问过我之后妹子放弃了,但是这个疑问一直在我的脑海中挥之不去。。。
across
2018-07-13 16:56:47 +08:00
@xbigfat 这种用 RPG Maker 或者找个 Galgame 制作工具就可以了。
说不定橙光就 ok···
xbigfat
2018-07-13 17:03:47 +08:00
@across 厉害了。刚刚看到橙光就可以。不过总的来说,这种东西落到代码上,我还是觉得很难做,可能是我学识不够吧 hhh,感谢指点
viator42
2018-07-13 17:15:37 +08:00
你说的是类似文字 avg 游戏那种的多结局吗
我见过的有两种实现思路
一个是单纯的树状结构,选不同的分支进不同的结局.另一种是定义几个数值,每次选择的时候增减.最后根据数值判定结局
asd123456cxz
2018-07-13 17:20:57 +08:00
生命线系列 或者 异次元通讯系列?这两个游戏大概就是你想实现的那种吧
我觉得你可以直接从这两款游戏的制作方式入手。。虽然我也不懂
其实我更喜欢橙光的。。
xbigfat
2018-07-13 18:08:38 +08:00
@viator42 嗯,根据数值判断结果也是可以的,但是每个问题是不是只可以加减,没法超过 3 个分支啦?
Natsumoku
2019-05-21 07:40:15 +08:00
Github 上有几个 repo 是关于制作这种游戏的辅助工具的。
最热门的应该是这个: https://github.com/thesecretlab/YarnSpinner
这也是游戏 Night in the Woods (一个很不错的以对话为主的剧情向游戏)制作者使用的工具,能胜任比较复杂的选择分支之类的。因为是开源的,所以你如果对原理感兴趣,不妨去看看它的实现。
另一个开源工具: http://twinery.org/

另外还有一个专业的收费软件,专门用来创造多线对话用的,叫做 Articy Draft,可以定义各种全局变量,在指定的时间点更新它们的值,作为进入 /不进入某个分支的条件,总的来说自由度很高。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470640

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX