4

我正在使用 Python 开发基于文本的 RPG,但我被 NPC 困住了。我需要一些有点像树的东西。例如:

博特:你好。
1. 你好,你叫什么名字?
2. 你好,你住在哪里?
> 2
玩家:你住在哪里?
Bot:这是一个令人毛骨悚然的问题。你为什么要问?
1. 我只是好奇。
2. 没关系。
3.隐藏你的孩子,隐藏你的妻子
> 1
玩家:我只是好奇。
博特:好的。
1. 你喜欢奶酪吗?
2.再见。
> 1
玩家:你喜欢奶酪吗?
博特:是的!我爱奶酪。

您所做的每个选择都会分支到其他选择,也就是如果用户对第一个问题回答“1”,机器人会回答“我的名字是 Bob。你的名字是什么?”

我的游戏的设计方式使得关卡编辑器不是不可能的前景(您可以访问的每个地方都作为键存储在字典中,然后是一个包含所有内容的元组[我有一个商店类,一个敌人类,一个“门户”类,很快又是一个 NPC 类])。所以我希望以某种方式创建它,这样我就可以将它全部保存在我的 NPC 类存储的变量中(而不是一堆“if”语句)

澄清一下,我并不是要别人为我写代码,我只是不确定如何解决这个问题。


对我所需要的内容的简短描述:

树状结构,以一个字符串开头,并带有许多从它“分支”的字符串

这些字符串中的每一个都有更多的“分支”

与此元组和元组元组的区别在于,它们需要一个字符串来分支,而不是立即拆分。

4

2 回答 2

3

这与决策树密切相关,但玩家是做出选择的人,因此在 AI 意义上它并不完全是一个。不过,您可以自己定义具有这些属性的数据结构

class TreeNode:
    def __init__(self,parent,children,overview_text,direction_text):
        #... set the variables ...
        # question_text is a string

    def print_question(self):

        print overview_text
        for child in children:
            print direction_text

    # add some accessor methods
    def add_child(self,child): 
        ...

然后,您的 NPC 可以通过特定的 TreeNode 跟踪他们的状态 - 称之为 current_question - 并且整个对话都在 TreeNodes 树中 - 称之为对话。

class NPC:
     def __init__(self,dialogue):
         #... set the variables ...
         self.current_question = None

     def converse(self):
         #.... do some stuff....
         self.current_question = users_choice;

这样,您可以根据需要中断对话。

请注意,TreeNode 可能用词不当,因为您可能希望对话代表一个图形,而不仅仅是一棵树。例如,许多 RPG 将具有可以循环重复信息的对话路径。上面的数据结构不能这样做,因为overview_text(概念上是节点的一部分)和direction_text(概念上是边的一部分)被视为一个。

于 2012-05-13T19:22:41.600 回答
0

您需要一个有向图,其中机器人语句是节点,玩家响应是弧线。

您可能还希望弧具有一些内置智能 - 根据玩家状态启用/禁用自身(即,如果玩家没有蓝色钥匙,则“解锁蓝色门”不是可用选项)。

要遵循的示例代码。

于 2012-05-13T19:52:43.617 回答