2016-11-28 1 views
0

分岐ストーリーラインを使ったテキストアドベンチャーの作成に関する作業に取り組んでいます。分岐のストーリーラインを使ったテキストアドベンチャーのクラスメソッド

それはこのように動作します:

  • レベル1は1つのプロンプトと3つの選択肢
  • レベル2は3つのプロンプトと9つの選択肢を持っている
  • レベル3は9つのプロンプトと27個の選択肢
  • レベル4を持っています27のプロンプトと81の選択肢を持っています

それぞれの選択肢によって、次のレベルで3つの選択肢が新たに追加されました。

私はこのような設定の基本的なクラスがあります。

class Level: 
    def __init__(self,level_num, level_prompt): 
     self.level_num = level_num 
     self.level_prompt = level_prompt 
     self.choices = [] 

    def add_choices(self, choices, next_branch): 
     self.choices.append(choices) 
     self.next_branch = next_branch 

    def print_situation(self): 
     print("Level " + str(self.level_num)) 
     print(self.level_prompt) 
     print("[A] " + self.choices[0]) 
     print("[B] " + self.choices[1]) 
     print("[C] " + self.choices[2]) 

をそして、私はこのようにオフに開始レベルを初期化しています:

level1 = Level(1, 'PROMPT HERE') 
level1.add_choices('CHOICE A', '2_A') 
level1.add_choices('CHOICE_B', '2_B') 
level1.add_choices('CHOICE_C', '2_C') 

level2_A = Level(2, 'PROMPT HERE') 
level2_A.add_choices('CHOICE A', '3_A1') 
level2_A.add_choices('CHOICE_B', '3_A2') 
level2_A.add_choices('CHOICE_C', '3_A3') 

level2_B = Level(2, 'PROMPT HERE') 
level2_B.add_choices('CHOICE A', '3_B1') 
level2_B.add_choices('CHOICE_B', '3_B2') 
level2_B.add_choices('CHOICE_C', '3_B3') 

level2_C = Level(2, 'PROMPT HERE') 
level2_C.add_choices('CHOICE A', '3_C1') 
level2_C.add_choices('CHOICE_B', '3_C2') 
level2_C.add_choices('CHOICE_C', '3_C3') 

私はそれぞれを関連付ける方法を考え出すのトラブルを抱えています次の「レベル」での選択。私は "add_choices"メソッドで "next_branch"引数を持っていますが、それをフォローアップする方法を理解するのに問題があります。

どのように動作させたいのですが、レベル1ではAを選択するので、プログラムは "level2_A"に関連するプロンプトと選択肢を表示します。これは後のレベルで別々の選択肢とプロンプトを大量にサポートする必要があることを念頭に置いてください。そのため、分岐線を効率的に管理する方法を見つけようとしています。

何かが明確でない場合は、私に教えてください...

どうもありがとう!

+0

Pythonの典型的な方法は、辞書を使用することです。この場合、 'add_choices()'メソッドは、呼び出されるたびに(self.mapping_dict = {} 'が実行されたと仮定して)' self.mapping_dict [choices] = next_level'のようなものでそのような辞書にエントリを追加することができます最初に空の辞書を作成する '__init __()'メソッド) – martineau

答えて

1

代わりの方法に文字列「2_A」を渡すので、あなたがlevel2_Aインスタンスを定義することができ最初にしてメソッドに直接オブジェクトを渡す:

level1 = Level(1, "PROMPT HERE") 
level2_A = Level(2, "PROMPT HERE") 

level1.add_choices("CHOICE A", level2_A) 

このシナリオでは、すべて定義しますあなたのレベルの最初に、そして次に彼らが互いに関連している方法を定義します。

このように指数関数的に成長すると、ゲームはすばやく大量になります。定義をデータファイルに格納し、ファイルからデータをロードすることで自動的にレベルオブジェクトを構築する方が簡単です。これはあなたのコンテンツをあなたのゲームロジックから分離し、作業をより簡単にするでしょう。考えていること!

+0

お返事ありがとうございます!万が一ストーリーラインをどのように編成するか考えていますか?私は100個のネストされたif文を書くことを控えたい(例えばchoice = aならprint2_A)。 – Carcanken

+0

私は各レベルのテキストをレベル自体のプロパティに保存します。レベルを実行すると、ストーリーセグメントが表示され、ユーザーに選択を促します。対応するレベルのprint_situation()メソッドを呼び出すことができます。 –

+0

こうして、あなたの機能はクラス内に含まれ、あなたのコンテンツから分離されます。 –