2016-07-16 5 views
-1

私はPythonのアドベンチャーゲームで動く動きをするのに困っています。実行時にプレイヤーは別の部屋に移動できますが、部屋に戻ろうとするとコードが停止します。ここでZorkのようなPythonのゲームでループを動かしているとき

はコードです:

A = False 
B = False 
Location = "A1" 
Attack = 0 
Defence = 0 
Speed = 0 
Health = 20 
Knives = 10 
Arrows = 10 
inv = "a torch" 
print('Hello operator') 
Name = input('We will now begin preliminary setup, tell me, what is your name? ') 
print('Good', Name) 
print('Next select a Class') 
print('Knight - A well rounded class with no certain advantage in any category, fights with a sword and metal armor') 
print('Archer - Good with a bow and has amazing speed but wears light metal armor') 
print('Mage - Can cast spells with a magic staff and can deal high amounts of damage but wears only cloth armor') 
print('Rogue - A master of deception and very quick on thier feet, can deal devistating blows with a dagger and throwing knives') 
while A == False: 
    Class = input('Input class name here: ') 
    if Class.lower() == "knight": 
     Attack = 10 
     Defence = 10 
     Speed = 10 
     print('You have chosen Knight') 
     A = True 
    elif Class.lower() == "archer": 
     Attack = 10 
     Defence = 3 
     Speed = 8 
     print('You have chosen Archer') 
     A = True 
    elif Class.lower() == "mage": 
     Attack = 15 
     Defence = 1 
     Speed = 8 
     print('You have chosen Mage') 
     A = True 
    elif Class.lower() == "rogue": 
     Attack = 10 
     Defence = 2 
     Speed = 15 
     print('You have chosen Rogue') 
     A = True 
    else: 
     print('That is not a class') 
print("For a full list of commands type [help]") 
Command = input() 
if Command.lower() == "help": 
    print('help - Displays all commands') 
    print('n,s,e,w - moves one tile in that direction') 
    print('inv - Opens and checks your current inventory') 
    print('stats - Prints all character stats') 
    print('check - prints the information on the surroundings') 
    print('Other words like [attack][run][drop][drink] and others can all be used throught the game, try words out to see if they work!') 
elif Command.lower() == "check": 
    print("You have awoken in a small room. The walls are made of stone and the only light is being given off by a torch") 
elif Command.lower() == "stats": 
    print("Name:", Name,", Class:", Class,", Attack:", Attack,", Defence:", Defence,", Speed:", Speed) 
elif Command.lower() == "inv" and Class.lower() == "knight": 
    print("You are carrying a sword and", inv) 
elif Command.lower() == "inv" and Class.lower() == "mage": 
    print("You are carrying a magical staff and", inv) 
elif Command.lower() == "inv" and Class.lower() == "archer": 
    print("You are carrying a bow,", Arrows, "arrows and", inv) 
elif Command.lower() == "inv" and Class.lower() == "rogue": 
    print("You are carrying", Knives, " throwing knives and", inv)  
while Location == "A1": 
    if Command.lower() == "n": 
     print("You can't go that way") 
     Location = "A1" 
    elif Command.lower() == "s": 
     print("You move into a small room with a corridor on two sides") 
     Location = "B1" 
    elif Command.lower() == "w": 
     print("You can't go that way") 
     Location = "A1" 
    elif Command.lower() == "e": 
     print("You are in a corridor") 
     Location = "A2" 
    elif Command.lower() == "n": 
     print("Starting room") 
     Location = "A1" 
while Location == "A2": 
    Command = input() 
    if Command.lower() == "n": 
     print("You can't go that way") 
     Location = "A2" 
    elif Command.lower() == "s": 
     print("You are in a corridor, a torch lights the hall") 
     Location = "B2" 
    elif Command.lower() == "e": 
     print("You walk into a room, inside the room is a statue") 
     Location = "A3" 
    elif Command.lower() == "w": 
     print("Starting room") 
     Location = "A1" 
while Location == "B1": 
    Command = input() 
    if Command.lower() == "n": 
     print("Starting room") 
     Location = "A1" 
    elif Command.lower() == "s": 
     print("You can't go that way") 
     Location = "B1" 
    elif Command.lower() == "e": 
     print("You are in a corridor, a torch lights the hall") 
     Location = "B2" 
    elif Command.lower() == "w": 
     print("You can't go that way") 
     Location = "B1" 
+0

限り、それは意味がないよう、PEP8(https://www.python.org/dev/peps/pep-0008/#prescriptive-naming-conventions)の命名規則を使用することを検討してくださいそれを壊すために。あなたのコードでは、他のプログラマーが、名前が変数やクラスを参照しているかどうかを素早く認識することは難しいです。 –

答えて

0

おそらく、whileループ全体シェバングをラップする必要があります。ループはノーである間、今、あなたのコードは、その最後の後、次の...

  1. イントロ
  2. ラン部屋A1ロジック
  3. ラン部屋B1ロジック
  4. 出口

を行いますもっと長い間、それに行くコードはもうありません(また、A1ループに戻るための方法はありません)。

あなたのコードを見ると、これはすでに1回でした!

while A == False: 
    Class = input('Input class name here: ') 
    if Class.lower() == "knight": 
    ... 

メインコマンドループと全く同じパターンを使用してください。

Command = '' 
while Command.lower() != 'exit': 
    print("For a full list of commands type [help]") 
    Command = input() 
    if Command.lower() == "help": 
     ... 
    # elif Command == '' 
    # put the rest of your logic here. 
+0

これを修正する可能性のあるwhileループの例を表示できますか?私はそれをどのようにループバックするのかをよく理解していません。 –

0

コマンドを実行して評価する場所にコードブロックを囲む必要があります。何かのように:

while IsCharacterAlive: 
    Command = input() 
    ... 
関連する問題