我正在使用基于文本的Python RPG,但我仍然坚持使用NPC。 我需要的东西有点像树。例如:
Bot: hello there. 1. Hi, what's your name? 2. Hi, Where do you live? > 2 Player: Where do you live? Bot: That's a creepy question. Why do you ask? 1. I was just curious. 2. Never mind. 3. Hide yo kids, hide yo wife > 1 Player: I was just curious. Bot: Okay. 1. Do you like cheese? 2. Bye. > 1 Player: Do you like cheese? Bot: Yes! I LOVE cheese.
你做出的每一个选择都会分支给其他选择,A.K.A。如果用户已回答“1”对于机器人会回答的第一个问题"我的名字是鲍勃。你的是什么?"
我的游戏设计方式是级别编辑器不是一个不可能的前景(你可以访问的每个地方都存储为字典中的键,然后是包含其中所有内容的元组[我有一个商店类,一个敌人班级,门户班级,很快就会成为NPC班级。所以我喜欢这样创建的方式,所以我可以将它全部保存在我的NPC类存储的变量中(而不是一堆' if'语句)
只是为了澄清,我不是要求别人为我编写代码,我只是不确定如何解决问题。
树状结构,以一个字符串开头,其中包含许多字符串,这些字符串分支为“#”;从它
这些字符串中的每一个都有更多的分支'
与此元组和元组元组的区别在于,需要有一个字符串,它们分支出来而不是立即拆分。
答案 0 :(得分:3)
这与decision tree密切相关,但玩家是做出选择的人,所以在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(概念上是边缘的一部分)被视为一个。
答案 1 :(得分:0)
你想要一个有向图,其中bot语句是节点,玩家响应是弧。
您可能还希望弧线具有一些内置智能 - 根据玩家状态启用/禁用自身(即如果玩家没有蓝色键,则“解锁蓝门”不是可用选项)。
要遵循的示例代码。