V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wenco
V2EX  ›  程序员

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

  •  
  •   Wenco · 2022-06-03 14:59:02 +08:00 · 5536 次点击
    这是一个创建于 887 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    不过现在这种服务一般都涉及到后台关联统计,类似 x%的人选了什么,高分排行榜等等。这种用 ES 之类的工具可以解决一部分,但最好还是把用于分析关键的指标存入关系数据库。
    Wenco
        17
    Wenco  
    OP
       2022-06-04 11:43:59 +08:00
    @binux
    @12101111
    @imn1
    感谢提供思路,这是我之前不知道的
    Wenco
        18
    Wenco  
    OP
       2022-06-04 11:44:49 +08:00
    @Natsumoku 感谢,说的非常详细。respect
    Wenco
        19
    Wenco  
    OP
       2022-06-04 11:45:55 +08:00
    @joesonw
    @debuggerx
    @documentzhangx66
    @Mutoo
    @coderluan
    感谢,看起来都是业务向的,并不会考虑复用什么的
    Wenco
        20
    Wenco  
    OP
       2022-06-04 11:51:25 +08:00
    @a570295535 感谢,你这个逻辑适合最后计算结果,根据不同的选项跳到不同的下=一=题并不适用
    Wenco
        21
    Wenco  
    OP
       2022-06-04 11:51:58 +08:00
    @XiLingHost
    @MrKrabs
    @skys215
    @newtype0092
    感谢提供思路
    xzysaber
        22
    xzysaber  
       2022-06-04 16:40:53 +08:00   ❤️ 1
    游戏的很多东西都想知道是怎么设计的,尤其是 DOTA2 这么复杂的游戏。
    各种技能、物品效果叠加等。
    winglight2016
        23
    winglight2016  
       2022-06-04 23:52:22 +08:00
    有挺复杂的逻辑运算语言,也有规则引擎,也有简单的 excel ,key-value ,最后就是 ifelse ,如果要类比,工作流应该差不多
    smilenceX
        24
    smilenceX  
       2022-06-05 11:19:30 +08:00
    @xzysaber 早期 war3 版本的 dota 以及澄海 3c 地图都是没加密的,可以直接用地图编辑器打开看源码。
    Natsumoku
        25
    Natsumoku  
       2022-06-05 19:28:02 +08:00 via Android
    @b1ncer 很高兴能帮到你
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:21 · PVG 23:21 · LAX 07:21 · JFK 10:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.