I’m creating a room exploration game with Python but am having issues with item collection and the win condition being met (collecting all items to ‘win’ and losing if not all items are collected). Room movement, help and quitting function but I’m confused where to begin with items. I created an elif for ‘get’ to collect items but it didn’t work. If I could get help with getting items from my dictionary would help a lot. Thank you.
rooms = {'Start room': {'name': 'Start room', 'west': 'West room', 'east': 'East room', 'north': 'Hallway', 'text': 'You are in the Start room.'}, 'Hallway': {'name': 'Hallway', 'north': 'Hallway2', 'item': 'chips', 'text': 'You are in the Hallway.'}, 'Hallway2': {'name': 'Hallway2', 'north': 'Hallway3', 'item': 'soda', 'text': 'You are in the Hallway2.'}, 'Hallway3': {'name': 'Hallway3', 'north': 'Final room', 'item': 'stick', 'text': 'You are in the Hallway #3.'}, 'Side room': {'name': 'Side room', 'east': 'Hallway3', 'item': 'cookie bug', 'text': 'You are in the Side room.'}, 'Final room': {'name': 'Final room', 'south': 'Hallway3', 'text': 'You are in the Final room.'}, # boss room 'West room': {'name': 'West room', 'east': 'Start room', 'item': 'crown', 'text': 'You are in the West room.'}, 'East room': {'name': 'East room', 'west': 'Start room', 'item': 'cape', 'text': 'You are in East room.'}} def get_item(item_wants, current_room, inventory): if 'item' in rooms[current_room]: item_can_get = rooms[current_room]['item'] if item_wants != item_can_get.lower(): print(f'There is no {item_can_get} in this room') else: print(f'You just picked up {item_wants}') inventory.append(item_wants) return item_wants def help_file(DIRECTIONS): print(f"Use {DIRECTIONS} to move! If you would like to quit, type 'quit'.") def get_input(): arg = '' # default if no arg input_list = input('Enter move, get or exit:').split() command = input_list[0] if len(input_list) > 1: arg = input_list[1] return command, arg def main(): inventory = [] DIRECTIONS = ['north', 'south', 'east', 'west'] current_room = 'Start room' while True: # location print('You are in {}.'.format(current_room)) print("Inventory:", inventory) # get user input c, direction = get_input() # moving if c == 'move' and direction in DIRECTIONS: if direction in rooms[current_room]: current_room = rooms[current_room][direction] else: print(f'You cannot go {direction} from this room') elif c == 'get': pass elif c == 'help': help_file(DIRECTIONS) elif c == 'quit': print('Game quitting...') break else: print('Invalid statement') if current_room == 'Final room' and len(inventory) < 6: print('You lost ! You forgot to collect all the items! GAME OVER...') break if current_room == 'Final room' and len(inventory) >= 6: print('You did it! You collected all the items and are with your cool new friend! The end!') break print() main()
Advertisement
Answer
In testing out your code it appeared where you were getting stuck was with the “getting” of items within a room. With that, I focused on tweaking the “get_item” function. Following is a copy of your code with some tweaks to the dictionary so that one could move about rooms a little easier and a refined “get_item” function.
rooms = {'Start room': {'name': 'Start room', 'west': 'West room', 'east': 'East room', 'north': 'Hallway', 'text': 'You are in the Start room.'}, 'Hallway': {'name': 'Hallway', 'north': 'Hallway2', 'south': 'Start room', 'item': 'chips', 'text': 'You are in the Hallway.'}, 'Hallway2': {'name': 'Hallway2', 'north': 'Hallway3', 'south': 'Hallway', 'item': 'soda', 'text': 'You are in the Hallway2.'}, 'Hallway3': {'name': 'Hallway3', 'north': 'Final room', 'south': 'Hallway2', 'west': 'Side room', 'item': 'stick', 'text': 'You are in the Hallway #3.'}, 'Side room': {'name': 'Side room', 'east': 'Hallway3', 'item': 'cookie', 'text': 'You are in the Side room.'}, 'Final room': {'name': 'Final room', 'south': 'Hallway3', 'text': 'You are in the Final room.'}, # boss room 'West room': {'name': 'West room', 'east': 'Start room', 'item': 'crown', 'text': 'You are in the West room.'}, 'East room': {'name': 'East room', 'west': 'Start room', 'item': 'cape', 'text': 'You are in East room.'}} item_list = ['chips', 'soda', 'stick', 'cookie', 'crown', 'cape'] # Added this for a simplified check of what items have been acquired def get_item(item_wants, current_room, inventory): # Enhanced this function. if 'item' in rooms[current_room]: item_can_get = rooms[current_room]['item'] if item_wants != item_can_get.lower(): print(f'There is no {item_wants} in this room') else: got_item = False for i in range(len(inventory)): if (inventory[i] == item_wants): print("you already have this item") got_item = True if (got_item == False): print(f'You just picked up {item_wants}') inventory.append(item_wants) got_all = True for i in range(len(item_list)): if (item_list[i] not in inventory): got_all = False print("You need to find", item_list[i]) return item_wants def help_file(DIRECTIONS): print(f"Use {DIRECTIONS} to move! If you would like to quit, type 'quit'.") def get_input(): arg = '' # default if no arg input_list = input('Enter move, get or quit:').split() command = input_list[0] if len(input_list) > 1: arg = input_list[1] return command, arg def main(): inventory = [] DIRECTIONS = ['north', 'south', 'east', 'west'] current_room = 'Start room' while True: # location print('You are in {}.'.format(current_room)) print("Inventory:", inventory) # get user input c, direction = get_input() # moving if c == 'move' and direction in DIRECTIONS: if direction in rooms[current_room]: current_room = rooms[current_room][direction] else: print(f'You cannot go {direction} from this room') elif c == 'get': get_item(direction, current_room, inventory) elif c == 'help': help_file(DIRECTIONS) elif c == 'quit': print('Game quitting...') break else: print('Invalid statement') if current_room == 'Final room' and len(inventory) < 6: print('You lost ! You forgot to collect all the items! GAME OVER...') break if current_room == 'Final room' and len(inventory) >= 6: print('You did it! You collected all the items and are with your cool new friend! The end!') break print() main()
Give that a try.