-1

I've been having trouble making movement that works in my python adventure game. When run the player can move to a different room but when trying to move back into a room the code stops.

Here is the 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"
  • Consider using PEP8 (https://www.python.org/dev/peps/pep-0008/#prescriptive-naming-conventions) naming conventions, as long as it doesn't make sense to break it. With your code it is hard for other programmers to quickly recognize if a name is referring to a variable or a class. – Ted Klein Bergman Jul 16 '16 at 17:03

2 Answers2

0

You should probably wrap the whole shebang in a while loop. Right now your code does the following...

  1. intro
  2. Run the room A1 logic
  3. Run the room B1 logic
  4. Exit

After that last while loop is no longer true, there is no more code for it to go to (and no way for it to get back to the A1 loop).

Looking at your code, you already did this once!

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

Use the exact same pattern for your main command loop.

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.
Paul Becotte
  • 9,767
  • 3
  • 34
  • 42
0

You should enclose a block of code where you taking and evaluating commands to the one additional big while loop. Something like:

while IsCharacterAlive:
    Command = input()
    ...
openhs
  • 41
  • 2