2017-05-30 37 views
1

テキストアドベンチャーゲームを作成していますが、部屋を変更する機能を作ろうとしています。私の部屋はブールでできているので、部屋を変えたときに出る部屋は偽になり、新しい部屋は真となります。各部屋にはif文が含まれているので、あなたが入っている部屋に応じて特定のものが実行されます。部屋のブール値は、このようなコードの先頭に書かれています。 パラメータを使用して関数内のグローバル変数を変更する方法

spawn = True 
living_room = True 
etc... 

は、だから、私は、次のように関数を呼び出し、この

def change_room(room, new_room): 
    room = False 
    new_room = True 

のような機能を作ることを決めた

if spawn: 
    if spawn_input == "door": 
     change_room(spawn, living_room) 
elif living_room: 
    do something 

問題は、関数がグローバルを変更しないということです私が選択したブール値に変数を追加します。私がこの

def change_room(): 
    global spawn 
    global living_room 
    spawn = False 
    living_room = True 

に機能を変更することで固定することができることを理解しかし、私は関数がどの部屋にどの部屋のために使用することができるようなパラメータを持っている機能をご希望のように私はこれを行うにはしたくありません。もし誰かが私を助けてくれたら素晴らしいだろう。ありがとうございました!

+0

どこに間違っているのかわかるように、コード全体を投稿できますか? – Keval

答えて

0

消極的ソリューション

私は個人的にあなたがグローバル空間を変更する代わりに、あなたのゲームの世界を表現する抽象化されたデータ構造を変更しているので、それがBADである、あなたが取っているルートと一致していません。この情報は辞書などのオブジェクトに保存する必要があります。それにもかかわらず、ここにあなたが求めるソリューション...

def change_room(room, new_room): 
    g = globals() 
    g[room] = False 
    g[new_room] = True 

... 

if spawn: 
    if spawn_input == "door": 
     change_room('spawn', 'living_room') 
elif living_room: 
    # do something 

適切なソリューション

Gameオブジェクトであなたのゲームの世界をカプセル化し、上の操作を実行しているゲームオブジェクトは述べています。

SPAWN_ROOM = 'spawn' 
LIVING_ROOM = 'living_room' 

class Game: 

    def __init__(self): 
    self.current_room = SPAWN_ROOM 

    def change_room(self, new_room): 
    self.current_room = new_room 
    print('You entered {}'.format(new_room)) 


game = Game() 

... 

if game.current_room == SPAWN_ROOM: 
    if user_input == 'door': 
    game.change_room(LIVING_ROOM) 

elif game.current_room == LIVING_ROOM: 
    # do something 
+0

コメントありがとう!私はPythonを2週間しか習っていないので、助けていただければ幸いです。私は初心者なので、あなたが私にあなたが私に推薦しているよりよい方法の例を与えることができたら、私は感謝しますか? – Enrique

+0

あなたはクラスを定義する方法を知っていますか? – EyuelDK

+0

@EyueIDK私はクラスについて少しは学んだが、非常に限られている。おそらくそれについて学ぶべきでしょう – Enrique