-2

私はPythonでテキストベースのアドベンチャーゲームに取り組んでいます。超豪華なものはありません。2 つの異なる部屋のレバーで、3 番目の部屋のゲートのロックを解除したいと考えています。ゲートのロックを解除するには、両方のレバーを引く必要があります。

ここにレバーのある2つの部屋があります。

def SnakeRoom():

    choice = raw_input("> ")

    elif "snake" in choice:
        FirstRoom.SnakeLever = True
        print "As you pull the lever... You hear something click down the hall behind you."
        SnakeRoom()
    elif "back" in choice:
        FirstRoom()
    else:
        dead("Arrows shoot out from the walls. You don't make it.")

def WolfRoom():

    choice = raw_input("> ")

    elif "wolf" in choice:
        FirstRoom.WolfLever = True
        print "As you pull the lever... You hear something click down the hall behind you."
        WolfRoom()
    elif "back" in choice:
        FirstRoom()
    else:
        dead("Arrows shoot out from the walls. You don't make it.")

こちらが門のある部屋。

def FirstRoom():
    Lever = WolfLever and SnakeLever
    choice = raw_input("> ")

    if "straight" in choice and Lever != True:
        print "You see a large gate in front of you. The gate is locked, there doesn't seem to be any way to open it."
        FirstRoom()
    elif "straight" in choice and Lever == True:
        SecondRoom()
    elif "left" in choice:
        WolfRoom()
    elif "right" in choice:
        SnakeRoom()
    elif "lever" in choice:
        print "WolfLever: %s" % WolfLever
        print "SnakeLever: %s" % SnakeLever
        print "Lever: %s" % Lever
        FirstRoom()

コードを短くしたので、不要なものをすべて読む必要はありません。

私の最大の問題は、私がまだ Python 言語にあまり慣れていないことです。そのため、探している答えを見つけるためにすべてをどのように表現すればよいかわかりません。

編集: FirstRoom.WolfLever の代わりに、WolfLever をコードの本文の Start() の上で使用してみました:

WolfLever
SnakeLever
Lever = WolfLever and SnakeLever

しかし、私の関数はこれらの値を更新していませんでした。というわけで、FirstRoomを試してみました。アプローチ。

4

1 に答える 1

1

@Anthony と次のリンクの功績: Using global variables in a function other than one that created them

グローバルは間違いなく答えでした (クラスの使用を除いて)。WolfRoom() と SnakeRoom() 関数は次のようになります。

def WolfRoom():
    global WolfLever

    choice = raw_input("> ")

    elif "wolf" in choice:
        WolfLever = True
        print "As you pull the lever... You hear something click down the hall behind you."
        WolfRoom()

FirstRoom() の場合、追加しました

global Lever

関数の先頭と Start() の直前に

WolfLever = False
SnakeLever = False

このようにして、エラーや警告はなく (レバーをグローバルとして宣言する前にレバーに値を割り当てるための構文警告が表示されていました)、すべてが完全に機能します。

于 2015-08-05T21:45:24.803 に答える