2016-07-16 8 views
-1

Ich habe Schwierigkeiten, Bewegung, die in meinem Python-Adventure-Spiel funktioniert. Wenn der Spieler läuft, kann er in einen anderen Raum gehen, aber wenn er versucht, in einen Raum zurückzukehren, stoppt der Code. HierWhile Loop-Bewegung in Zork-like Python-Spiel

ist der Code:

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

Betrachten PEP8 (https://www.python.org/dev/peps/pep-0008/#prescriptive-naming-conventions) Namenskonventionen verwenden, solange es keinen Sinn macht, um es zu brechen. Mit Ihrem Code ist es für andere Programmierer schwer zu erkennen, ob sich ein Name auf eine Variable oder eine Klasse bezieht. –

Antwort

0

Sie sollen wahrscheinlich den ganzen Kram in einer while-Schleife wickeln. Gerade jetzt Ihr Code macht folgendes ...

  1. Intro
  2. Führen Sie den Raum A1 Logik
  3. Führen Sie den Raum B1 Logik
  4. Ausfahrt

Nach diesem letzten while-Schleife nicht ist länger wahr, es gibt keinen Code mehr, zu dem es gehen kann (und keine Möglichkeit, dass es zurück zur A1-Schleife geht).

Wenn Sie Ihren Code betrachten, haben Sie das schon einmal gemacht!

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

Verwenden Sie das exakt gleiche Muster für Ihre Hauptbefehlsschleife.

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

Können Sie ein Beispiel für eine while-Schleife anzeigen, die das Problem möglicherweise beheben kann? Ich verstehe nicht ganz, wie man es zurückführt. –

0

Sie sollten einen Code-Block umschließen, wo Sie Befehle an die eine zusätzliche große while-Schleife zu nehmen und zu bewerten. Etwas wie:

while IsCharacterAlive: 
    Command = input() 
    ...