4

私は Python でテキストベースの RPG に取り組んでいますが、NPC で立ち往生しています。木のようなものが必要です。例えば:

ボット: こんにちは。
1. こんにちは、あなたの名前は?
2. こんにちは、どこに住んでいますか?
> 2
プレーヤー: どこに住んでいますか?
ボット: それは不気味な質問です。なぜ聞くのですか?
1.ただ興味があった。
2. 気にしないでください。
3. 子供たちを隠す、妻を隠す
> 1
プレーヤー: ただ興味があっただけです。
ボット: わかりました。
1. チーズは好きですか。
2.さようなら。
> 1
プレイヤー: チーズは好きですか?
ボット: はい! 私はチーズが大好きです。

ユーザーが最初の質問に「1」と答えた場合、ボットは「私の名前はボブです。あなたの名前は何ですか?」と答えます。

私のゲームは、レベル エディターが不可能ではない方法で設計されています (アクセスできるすべての場所は辞書のキーとして保存され、その中のすべてを含むタプル [ショップ クラス、敵クラス、 「ポータル」クラス、そしてすぐに NPC クラス])。したがって、これを何らかの方法で作成して、NPCクラスが保存した変数にすべて保持できるようにしたいと思います(一連の「if」ステートメントではありません)

明確にするために、誰かにコードを書いてもらうように頼んでいるわけではありません。問題にどのようにアプローチすればよいかわかりません。


が必要としているものの簡単な説明:

1 つの文字列から始まり、そこから「分岐」する多数の文字列を持つツリー状の構造

これらの文字列のそれぞれには、より多くの「枝」があります

これとタプルのタプルとの違いは、すぐに分割するのではなく、分岐する場所に文字列が必要なことです。

4

2 に答える 2

3

これは決定木と密接に関係していますが、選択を行うのはプレーヤーであるため、AI の意味での 1 つではありません。これらのプロパティを持つデータ構造を自分で定義できますが、

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 と呼びます)。会話全体が TreeNode のツリー内にあります (対話と呼びます)。

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 つとして扱われるため、これを行うことはできません。

于 2012-05-13T19:22:41.600 に答える
0

ボットのステートメントがノードで、プレーヤーの応答がアークである有向グラフが必要です。

また、プレイヤーの状態に基づいてアーク自体を有効/無効にするためのビルトイン インテリジェンスが必要な場合もあります (つまり、プレイヤーが青い鍵を持っていない場合、「青いドアのロックを解除する」オプションは使用できません)。

従うサンプルコード。

于 2012-05-13T19:52:43.617 に答える