Python でアドベンチャー ゲーム プログラムの一部を作成しようとしています。ほとんどの作業は完了していますが、関数チェーンの 1 つの分岐の最後で "True" として宣言された値を返そうとしています。基本的に、これはモンスターとの戦いであり、適切なオプションを選択すると勝つことができます。勝つと、彼が守っていた弓を手に入れることができます。戦いのコードは次のとおりです。
#The first line imports all the text displayed in the game, saved in gametext.py
#For purposes of clarity, all text has been saved to variables imported by the file.
#Any variable that is not "HaveBow", "why" or declared by a raw_input() is actually text.
from gametext import *
def BG_fight():
print BowGuardIntro
print InitOptions
BGfirstmove = raw_input('> ')
if BGfirstmove == "1":
spearfight()
elif BGfirstmove == "2":
dead(BGUnarmed1)
else:
dead(BGUnarmed2)
def spearfight():
print GotSpear
print SpearFight
spearact = raw_input("> ")
if spearact == "1":
blindfight()
elif spearact == "2":
dead(SeeChest)
elif spearact == "3":
dead(SeeArms)
else:
dead(NoUseSpear)
def blindfight():
print BlindFight
followblow = raw_input("> ")
if followblow == "1":
print Victory
HaveBow = True
return HaveBow
elif followblow == "2":
dead(BlindArms)
else:
dead(BlindNoKill)
def dead(why):
print why
exit(0)
BG_fight()
(もし人々が興味を持っているなら、ゲームテキストファイルの内容を作成することもできますが、それは長く、私が抱えている問題とは何の関係もないので、むしろしたくありません)
ご覧のとおり、1 つの分岐のみが勝利条件 (私が返したい HaveBow = True 値を与える) を提供し、2 つの関数が深くネストされ、if ステートメントの一部になっています。私が知りたいのは、その "HaveBow = True" 値を関数チェーンの外に戻す方法です。これにより、ゲームの他の部分で使用できますか? コーディングしようとすると:
HaveBow = blindfight()
print HaveBow
コードの最後でそれを実行しようとすると、「True」と宣言する前に、ゲームのその部分を 2 回繰り返すだけです。ブラインドファイト() の代わりに BG_fight() を試しても同じことが言えます。しかし、私はそれを望んでいません。ゲームの他の部分で条件「HaveBow = True」を使用できるように、「HaveBow」に「True」が必要なだけです。
要するに、私の質問は、ネストされた関数チェーンから、そのチェーンのコードを繰り返さずに値を返すことができるかどうかです。
ありがとう。