Search code examples
pythoninventory

Simple Game Inventory


so I am trying again to post this in a correct manner, but I am struggling with adding items to an inventory for a very simple text based game for a class project. The output should be as folllows:

You are in (room)
Inventory: []
You see a (item)
What do you wish to do?

In my game, the player will type a command like get Sword to pick up an item. If that item isnt in the room they are in it should output You cant get that item here. Once the player gets the item in the room, it should be added into the inventory and removed from the room so that the input reads:

You are in (room)
Inventory: [Sword]
You dont see anything useful
What do you wish to do?

I am having trouble getting the inventory to update and then the item no longer being in the room. When I am in the room I try to get the item and it says You cant get that item here even if the item is in the room. Below is a simplified version of my code, any help is appreciated greatly.

# A dictionary for the simplified text game that links a room to other rooms.
rooms = {
        'Entrance Hall': {'North': 'Great Hall', 'East': 'Gallery', 'West': 'Library', 'item': 'None'},
        'Library': {'East': 'Entrance Hall', 'item': 'Book'},
        'Gallery': {'West': 'Entrance Hall', 'item': 'Sword'}
    }

instructions = 'To move type: go North, go East, go West, go South' \
               'to get items type get Item, ex: get Sword\n '

directions = ['go North', 'go South', 'go East', 'go West']
pick_up_items = ['get Ale', 'get Book', 'get Armor', 'get Sword', 'Necromancer', 'get Knife', 'get Candle']

print(instructions)
current_room = 'Entrance Hall'
item_in_room = 'None'
inventory = []

while True:
    print('You are in the {}.'.format(current_room))
    print('Inventory:', inventory)
    if item_in_room == 'None':
        print("You don't see anything useful")
    else:
        print('You see a', item_in_room)

    # gets the users input
    command = input('\nWhat do you wish to do? ')  # this controls the movement
    if command in directions:
        command = command.split()[1]
        if command in rooms[current_room].keys():
            current_room = rooms[current_room][command]
            item_in_room = rooms[current_room]['item']
        else:
            # if the player inputs a bad movement
            print('You cant go that way!')
    # Checks to see if the player types a 'get' command and adds the item in the room to the players inventory.
    if command in pick_up_items:
        command = command.split()[1]
        if command in rooms[current_room].keys():
            inventory.append(current_room['item'])
        else:
            # if the player inputs a item not in the room
            print('You cant get that item here!')

Solution

  • From what I can see, your check for items is wrong. Your item is in the rooms[current_room]['item'] not rooms[current_room].keys()

    if command == rooms[current_room]['item']:
        inventory.append(rooms[current_room]['item']) #another error i found out
        rooms[current_room]['item'] = 'None' #make sure that you check that command isn't None or it will be added as an Item
    # other stuff
    

    If you are planning on placing multiple items in a room, I suggest that you convert the item key in all dictionaries to a list to make the checking easier. Also, go item will also pass your direction check and raise an error.