2016-07-30 8 views
-3

:-(私を混乱させる私のPythonミニゲーム。それは、私は、Python 2.7を使用して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

ああ、そうです。古い 'cause( 'mayhem')'と '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の内部で定義されていることです。問題は、関数内で定義された変数はその関数に対してローカルであり、他の関数内では使用できないということです。そうすることで、(同じ名前であっても)2つのunqiue変数が得られます。

簡単な解決策は、(推奨しませんが)asked_for_helptimes_in_exchange_pathとともにスクリプトの非常に開始時に、最も外側のスコープでhauntedを定義し、その変数hauntedが実際にあることのpythonを伝えるために、キーワードglobalを使用することですグローバル変数で、ローカル変数ではありません。

通常、グローバル変数は使用しないでください。代わりに、代わりにパラメータとして変数を渡す必要があります。

関連する問題