2012-03-30 19 views
2

私はちょっとしたゲームを楽しんだだけでハッキングしていましたが、私は問題に遭遇しました。私は、コードを投稿して説明するために、自分のベストを尽くすよ。なぜ私のリストは変わりませんか?

def parseCmd(string): 
    cmd = string.split(' ') 
    if cmd[0] == 'help': 
     showHelp() 
    elif cmd[0] == 'add': 
     addServer() 
    elif cmd[0] == 'bag': 
     viewInventory(inventory) 
    elif len(cmd) == 1 and cmd[0] == 'look': 
     describeRoom() 
    elif len(cmd) == 1 and cmd[0] == 'take': 
     print 'What do you want me to take?' 
    elif cmd[0] == 'take': 
     pickUp(cmd[1], items) 
    elif cmd[0] == 'exit': 
     sys.exit(0) 
    else: 
     print 'I don\'t know how to ' + cmd[0] 

def describeRoom(): 
    print locations[player_location] 

def pickUp(item, item_list): 
    if item in item_list[player_location]: 
     item_list[player_location].remove(item) 
     inventory.append(item) 
     print 'You took the ' + item   
    else: 
     print 'I can\'t find any ' + item 

inventory = ['id card', 'money', 'keys'] 
player_location = 'cookieroom' 
items = {'cookieroom': ['crowbar', 'hammer']} 
locations = {'cookieroom': 'The cookieroom, where all the hard work gets done. \n\nNORTH: LFA - ITEMS: %s' % items[player_location], 
       'LFA': 'The infamous LFA, where dreams of office supplies become reality. there is a big guy sleeping in his chair next to a fire extinguisher.\n\nSOUTH: Cookieroom, WEST: WC'} 

if __name__ == "__main__": 
    while 1: 
     t = raw_input('-> ') 
     parseCmd(t) 

をので、あなたは私はあなたがその特定の部屋で利用できるアイテムを拾うときに変更する項目の辞書内の項目のリストが必要見ることができるように。私はアイテムを拾うことができ、それは自分の在庫に追加されますが、私はコマンド 'ルック'を発行すると、それは元の状態のアイテムのリストを示しています。

私はグーグルで1時間半の間スタックオーバーフローしていますが、この問題を解決するようなものは何も見つかりません。

不明な点がある場合は、私に尋ねてください。私は答えようとします。

答えて

4

describeRoom関数が部屋の説明を取得した場所であるlocations辞書は、プログラムの起動時に1回初期化されます。その時、プレーヤーの位置はcookieroomであり、オブジェクトにはcrowbarhammerがあります。だから、文字列は後でitems辞書の内容を変更しても、この文字列は変更されませんので、

'The cookieroom, where all the hard work gets done. \n\nNORTH: LFA - ITEMS: ["crowbar", "hammer"]' 

のように作成されます。

locations辞書には、部屋の説明の変更されていない部分のみを含める必要があります。ユーザが部屋の説明を要求するたびに、変化する部分(例えば、部屋の中の項目のリストなど)を再計算する必要がある。

+0

素晴らしい!ありがとうございますNoufal。私は十分な評判を持っていないので、私はこれをupvoteすることができません。 –

関連する問題