2016-07-30 35 views
-3

我使用Python 2.7和Python入門艱難的歷程書我的Python迷你遊戲。它混淆了我:-(

但是,我得到了一些創造性的想法,我想在這個練習中的一些變化:http://learnpythonthehardway.org/book/ex35.html

所以我寫我自己的代碼:

from sys import exit 

times_in_exchange_path = 0 
asked_for_help = 0 

def exchange_path(): 
    print "Hola! You are about to get to the very dangerous point, kid!" 
    print "You are independent from now. With luck..." 

    action = raw_input('...') 

    if 'what' in action: 
     print 'I said you are on your own now. No one is gonna help you', 
     print "with anything..." 
     exchange_path() 
    elif 'creepy' in action: 
     print "I found it creepy, too. Kid. Take me out of here with you." 
     print "Is that OK?" 
     haunted = False 

     decision = raw_input() 

     if decision == 'agree': 
      print "Finally. I'm free!" 
      haunted = True 
      times_in_exchange_path = times_in_exchange_path + 1 
      start() 
     else: 
      dead("I will make you know what pain really is!!?! >:(") 

    else: 
     dead("A shadow barged into you, and you broke your neck.") 

def gold_room(): 
    print "This room is full of gold. How much do you take?" 

    choice = raw_input("> ") 
    try: 
     how_much = int(choice) 
    except: 
     dead("Man, learn to type a number.") 

    if how_much < 50: 
     print "Nice, you're not greedy, you win!" 

     if haunted: 
      print "\nHowever... I can't just let you get away easily like this." 
      print '"Why??" - I asked' 
      print "You belong to the gold mine now!!" 
      print '"What do you mean??" - I replied in fear' 
      print "Power requires sacrifice. Muhahahhaha!" 
      dead(" ") 
     else: 
      exit(0) 

    else: 
     dead("You greedy bastard! It's a trap for you!") 

def bear_room(): 
    print "There is a bear here." 
    print "The bear has a bunch of honey." 
    print "The fat bear is in front of another door." 
    print "How are you going to move the bear?\n" 
    bear_moved = False 

    if haunted: 
     print "...Wait. The bear suddenly shouts at you, break the window", 
     print "and runs far far away." 
     print "Let's go to the door, kid...\n\n" 
     gold_room() 
    else: 
     while True: 
      choice = raw_input("> ") 

      if choice == "take honey": 
       dead("The bear looks at you then slaps your face off.") 
      elif choice == "taunt bear" and not bear_moved: 
       print "The bear has moved from the door. You can go through", 
       print "it now." 
       bear_moved = True 
      elif choice == "taunt bear" and bear_moved: 
       dead("The bear gets pissed off and chews your leg off.") 
      elif choice == "open door" and bear_moved: 
       gold_room() 
      else: 
       print "I got no idea what that means." 


def cthulhu_room(): 
    print "Here you see the great evil Cthulhu." 
    print "He, it, whatever stares at you and goes insane." 
    print "Do you flee for your life or he eats your head?" 
    cthulhu_dead = False 

    choice = raw_input("> ") 

    if cthulhu_dead: 
     print "There's nothing here, kid. Except of the light and a dead body." 
     print "Let's go!\n...\n\n" 
     start() 
    else: 

     if "flee" in choice: 
      start() 
     elif "head" in choice: 
      dead("Well that was tasty!") 
     elif "fight" in choice: 

      if haunted: 
       print "With mysterious distraction, the Cthulhu turns his back", 
       print "at you. You use the shiny magical spear nearby to kill", 
       print "the monster." 
       cthulhu_dead = True 
       print "\n...\n" 
       start() 
      else: 
       dead("Awesome tasty head you have!") 

     else: 
      cthulhu_room() 


def dead(why): 
    print why, "\n\nGood job! You died." 
    exit(0) 


def first_assist(): 
    asked_for_help += 1 

    if asked_for_help in range(4, 6): 
     print "Stop! You are attracting them!" 
     print "A portal shows up and you are walking into it...\n\n" 
    elif asked_for_help > 5: 
     dead("Those demons rise from the ground. And burn you down!") 
    else: 
     print "Hi! I am your beautiful assistance." 
     print "As you got lost in here, I will show you the way." 
     print "You have to know that all three paths are dangerous, and there", 
     print "is no way out of here.\nSo, try to survive with glory." 
     print '"left", "right" and "front" are the first three spells you use.' 
     print "There's a mighty power near here. Have a pure heart, and know", 
     print "that you will never have to touch that evil power..." 
     print "Good luck from here... Be wise." 
    start() 


def start(): 
    print "You are in a dark room." 
    print "There is a door to your right and left." 
    print 'And a middle path, full of darkness, in front of you.' 
    print "Which one do you dare to take?" 

    choice = raw_input("> ") 

    if choice == "left": 
     bear_room() 
    elif choice == "right": 
     cthulhu_room() 
    elif choice == "front": 

     if times_in_exchange_path == 0: 
      exchange_path() 
     else: 
      print "You feel something stopping you from entering this place. \n" 
      start() 

    elif "help" in choice: 
     first_assist() 
    else: 
     dead("You stumble around the room until you starve.") 


start() 

但由於種種原因,我的代碼不能正常工作

它首先打印出的畫面是這樣的線路:

你在黑暗的房間裏。

有一個門,你的右側和左側

和中間路徑,充滿了黑暗

的你敢哪一個拿?

然後,無論我輸入什麼,程序都會出現錯誤。我不知道爲什麼。

請幫我解決這個遊戲。

非常感謝你。 :-)

+1

它以何種方式無法正常工作?它會給你一個錯誤信息嗎?它掛着嗎?它是否會造成普遍的混亂和死亡? –

+0

啊,是的。舊的原因('混亂')和'dead.raise()'的情況。恨這種事發生。 –

回答

0

首先,當您提出問題時,應該包含錯誤消息。

Traceback (most recent call last): 
    File "game.py", line 174, in <module> 
    start() 
    File "game.py", line 159, in start 
    cthulhu_room() 
    File "game.py", line 120, in cthulhu_room 
    cthulhu_room() 
    File "game.py", line 104, in cthulhu_room 
    start() 
    File "game.py", line 159, in start 
    cthulhu_room() 
    File "game.py", line 104, in cthulhu_room 
    start() 
    File "game.py", line 157, in start 
    bear_room() 
    File "game.py", line 66, in bear_room 
    if haunted: 
NameError: global name 'haunted' is not defined 

這是我在逃離克蘇魯之後採取正確的方法時得到的錯誤。

這裏的問題是haunted在函數exchange_path的內部定義。問題在於函數內部定義的變量對於該函數是局部的,並且不能在其他函數內部使用。這樣做會導致兩個不同的變量(儘管名稱相同)。

簡單的解決方案(雖然不推薦)是最外面的範圍界定haunted,在與asked_for_helptimes_in_exchange_path沿腳本的最開始,然後使用關鍵字global來告訴Python這個變量haunted實際上是一個全局變量而不是一個局部變量。

通常,全局變量是不鼓勵的,您應該改爲將參數作爲參數傳遞。