好奇剧情式游戏数据库是怎么设计的

2022-06-03 14:59:02 +08:00
 Wenco

类似于那种测试性格的娱乐选择题,选择不同的选项跳转到不同的题目

还有就是类似于养成类游戏,选择不同的选项加载不同的剧情

数据库咋设计才能足够灵活?

5601 次点击
所在节点    程序员
25 条回复
binux
2022-06-03 15:01:19 +08:00
状态转移表
HeyHudy
2022-06-03 15:20:14 +08:00
蹲一个答案
imn1
2022-06-03 15:33:41 +08:00
虽然我不甚了解,但我做的话,肯定是状态机,数据库有一个或多个状态字段就够了
12101111
2022-06-03 16:08:29 +08:00
kv 数据库,状态机
坏处就是如果程序的状态机有 bug , 或者数据库被篡改,直接就逻辑混乱了
Natsumoku
2022-06-03 16:21:31 +08:00
网上那种性格测试我不了解
单机游戏的话,大厂会有专门的(往往是内部的)工具,把剧情走向分支可视化。至于人人都能用到的工具们,我去年写过一篇《分支剧情创作中的挑战和工具》: https://indienova.com/indie-game-development/tools-for-branching-dialogs-and-narrative/
但你如果问它们背后的数据库是怎么设计的,我也不清楚。好在这些工具有些是开源的,你可以去读读看源码。

我也想过自己造这方面的轮子,但是一来我现在的目标还是做游戏而不是做工具,用现成的工具来帮助我开发已经够用了;二来即使造出来了也未必比这些好用;三来如果要造轮子,还得有独树一帜的特点才行,我的确有注意到这些工具的局限性,它们仍然无法同时做到“剧情灵活可变”和“软件省时易用”——我可以做出非常灵活的、模块化的剧情,但代价是要在工具和游戏引擎里做巨多的准备工作才能进入高产写作的阶段,我也可以花几分钟就做出分支剧情来,但成品就真的很死板,所以如果是我来做新的工具,会想努力兼顾这两点,既要从 narrative designer 的角度去设想 user journey ,又要从程序员的角度去思考背后的实现
joesonw
2022-06-03 16:45:32 +08:00
一般都是一个剧情表,用来表诉依赖关系。再一个玩家剧情表,用来记录玩家的剧情状态。然后其余的都是客户端展示用,都是本地的 xlsx 。
debuggerx
2022-06-03 16:47:31 +08:00
一般产品 /策划给的 excel 啥样的 稍微调整下就入库了
很多时候游戏不是围绕程序 /数据库设计 而是策划 /excel 优先
documentzhangx66
2022-06-03 16:48:02 +08:00
数据库的本质是对数据结构的体现,建议可以学学数据结构这门课。然后你会发现,这个问题,有几种不同的设计方法,每种方法都有自己的优缺点。
Mutoo
2022-06-03 18:25:19 +08:00
剧情就是一系列的 flag (布尔值),然后加上一堆的 if-else 而已。「立 flag 」这个词就是这么来的,
coderluan
2022-06-03 20:16:32 +08:00
这种游戏根本不需要数据库吧,把数据结构设计好,非得用数据库照着存就完了。
XiLingHost
2022-06-03 20:51:45 +08:00
要灵活的数据库,那就用 nosql
MrKrabs
2022-06-04 00:36:19 +08:00
json 足够
b1ncer
2022-06-04 02:11:39 +08:00
@Natsumoku 太巧了,因为在研究这个方向的东西,最近正巧拜读过您的文章! 文章对我的帮助很大,很感谢!!
a570295535
2022-06-04 08:42:08 +08:00
可以把选择题看成一个数学题,默认没选=50 ,选择 A 就+0 ,选择 B 就+1 ,选择 C 就-1 ,选择 D 就+2 。

最后只需要判断总数大小,小于多少什么性格,大于多少什么性格,这样就简单多了。
skys215
2022-06-04 09:58:35 +08:00
图形数据库? Neo4j 等
newtype0092
2022-06-04 10:02:12 +08:00
单纯的游戏存档不需要数据库,因为这东西本来就是从单机游戏来的,要说灵活肯定 nosql 或者直接丢 json 合适。

不过现在这种服务一般都涉及到后台关联统计,类似 x%的人选了什么,高分排行榜等等。这种用 ES 之类的工具可以解决一部分,但最好还是把用于分析关键的指标存入关系数据库。
Wenco
2022-06-04 11:43:59 +08:00
@binux
@12101111
@imn1
感谢提供思路,这是我之前不知道的
Wenco
2022-06-04 11:44:49 +08:00
@Natsumoku 感谢,说的非常详细。respect
Wenco
2022-06-04 11:45:55 +08:00
@joesonw
@debuggerx
@documentzhangx66
@Mutoo
@coderluan
感谢,看起来都是业务向的,并不会考虑复用什么的
Wenco
2022-06-04 11:51:25 +08:00
@a570295535 感谢,你这个逻辑适合最后计算结果,根据不同的选项跳到不同的下=一=题并不适用

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

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

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

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

© 2021 V2EX