Как получить предмет в текстовой игре?

Вопрос или проблема

Я пытался придумать код для добавления предмета в мой инвентарь в текстовой игре, но пока не смог разобраться. Вот мой текущий код:

rooms = {
    'Entrance': {'west': 'Catacombs A', 'north': 'Main Hall'},
    'Catacombs A': {'east': 'Entrance', 'item': 'Lesser Artifact'},
    'Main Hall': {'north': 'Great Hall', 'east': 'Catacombs B', 'south': 'Entrance', 'west': 'Necron Tomb',
                  'item': 'Dog Tags'},
    'Necron Tomb': {'east': 'Main Hall', 'item': 'Supplies'},
    'Catacombs B': {'west': 'Main Hall', 'north': 'Storage Room', 'item': 'Lesser Artifact'},
    'Storage Room': {'south': 'Catacombs B', 'item': 'Supplies'},
    'Great Hall': {'east': 'Repair Hub', 'south': 'Main Hall', 'item': 'Dog Tags'},
    'Repair Hub': {'west': 'Great Hall', 'item': 'Necron Lord'}  # Злодей
}

current_room = 'Entrance'
inventory = []

print('Вы являетесь членом отряда Ультрамаринов, который получил задание вернуть 6 предметов из '
      'некроновского объекта на орбитальной планете, прежде чем доберется до Некронского Лорда. Вы и ваши братья прорываетесь через вход, куда вы пойдете первыми?')

def move_rooms(current_room, directions):
    current_room = rooms[current_room]
    new_room = current_room[directions]
    return new_room

while True:
    print('Вы находитесь в', current_room)
    directions = input('Введите направление: north, east, south, west, get item, или exit.')
    if directions in rooms[current_room]:
        current_room = move_rooms(current_room, directions)
    if directions == 'exit':
        print('Вы провалили задание Императора и своих братьев...')
        break
    elif directions not in rooms[current_room]:
        print('Вы не можете пойти в эту сторону.')

Я пробовал создать функцию для получения предмета, сделав это

def get_item(item, inventory):
    if item in current_room:
        inventory.append(item[current_room])
        return inventory

Python выдал ошибку и попросил определить item, даже несмотря на то, что он находится в моем словаре rooms. Я совсем новичок в Python, поэтому у меня большие трудности, любая помощь будет высокой оценена!

Итак, я экспериментировал с этим и, кажется, нашел метод, который будет работать. Я сделал функцию, которая принимает currentroom и ваш инвентарь. Она будет искать в словаре этой комнаты, есть ли предмет, и если да, добавит его в таблицу инвентаря. Код выглядит следующим образом:

rooms = {
'Entrance': {'west': 'Catacombs A', 'north': 'Main Hall'},
'Catacombs A': {'east': 'Entrance', 'item': 'Lesser Artifact'},
'Main Hall': {'north': 'Great Hall', 'east': 'Catacombs B', 'south': 'Entrance', 'west': 'Necron Tomb',
              'item': 'Dog Tags'},
'Necron Tomb': {'east': 'Main Hall', 'item': 'Supplies'},
'Catacombs B': {'west': 'Main Hall', 'north': 'Storage Room', 'item': 'Lesser Artifact'},
'Storage Room': {'south': 'Catacombs B', 'item': 'Supplies'},
'Great Hall': {'east': 'Repair Hub', 'south': 'Main Hall', 'item': 'Dog Tags'},
'Repair Hub': {'west': 'Great Hall', 'item': 'Necron Lord'}  # Злодей
}

current_room = 'Storage Room'
inventory = []
items="item"

def get_item(currentroom, inventory):
    roomtosearch = rooms[currentroom]
    if items in roomtosearch:
        found = roomtosearch[items]
        inventory.append(found)
    else:
        print('Такой предмет не существует')

get_item(current_room, inventory)
print(inventory)

Вы можете добавить условие в свой цикл while true, что когда введено это направление, если оно “item”, то оно вызовет функцию get_item(), ищущую этот предмет в комнате. Например:

while True:
    print('Вы находитесь в', current_room)
    directions = input('Введите направление: north, east, south, west, get item, или exit.')
    if directions in rooms[current_room]:
        current_room = move_rooms(current_room, directions)
    if directions == 'exit':
        print('Вы провалили задание Императора и своих братьев...')
        break
    if directions == 'item':
        get_item(current_room, inventory)
    elif directions not in rooms[current_room]:
        print('Вы не можете пойти в эту сторону.')

Я увидел ваш комментарий, провел еще несколько тестов и понял, что последовательность нарушена, потому что она ищет, есть ли предмет в комнате, а он есть, и если это проверка “item” выполняется, прежде чем запустить функцию get_item, она установит текущую комнату на предмет, что вызовет ошибку get_item. Решение этой проблемы заключается в том, чтобы переформулировать оператор get_item и проверить его перед moveroom, и если проверка get_item верна, она не будет запускать функцию moveroom. Мой новый код выглядит следующим образом:

while True:
    print('Вы находитесь в', current_room)
    directions = input('Введите направление: north, east, south, west, get item, или exit.')
    if directions == 'item':
        print(current_room)
        get_item(current_room, inventory)
    elif directions in rooms[current_room]:
        current_room = move_rooms(current_room, directions)
        print(current_room)
    elif directions == 'exit':
        print('Вы провалили задание Императора и своих братьев...')
        break
    elif directions not in rooms[current_room]:
        print('Вы не можете пойти в эту сторону.')

Проверьте, правильно ли вы вводите данные для функции get_item и передается ли переменная item как список. Я думаю, что items используется как строка внутри словаря “rooms”, но индексируется как список в вашей определенной функции. (проблема в курсиве)

def get_item(item, inventory):
    if item in current_room:
        inventory.append(*item[current_room]*)
        return inventory

Ответ или решение

Для того чтобы реализовать добавление предметов в инвентарь в текстовой игре, необходимо рассмотреть несколько ключевых моментов. Давайте пройдемся по важным компонентам и шагам, которые помогут вам настроить эту функциональность в вашем коде.

Определение структуры данных

Ваша структура данных для комнат уже прописана в виде словаря, что является отличным подходом. Следующим шагом будет добавление логики для взаимодействия с инвентарем:

rooms = {
    'Entrance': {'west': 'Catacombs A', 'north': 'Main Hall'},
    'Catacombs A': {'east': 'Entrance', 'item': 'Lesser Artifact'},
    'Main Hall': {'north': 'Great Hall', 'east': 'Catacombs B', 'south': 'Entrance', 'west': 'Necron Tomb', 'item': 'Dog Tags'},
    'Necron Tomb': {'east': 'Main Hall', 'item': 'Supplies'},
    'Catacombs B': {'west': 'Main Hall', 'north': 'Storage Room', 'item': 'Lesser Artifact'},
    'Storage Room': {'south': 'Catacombs B', 'item': 'Supplies'},
    'Great Hall': {'east': 'Repair Hub', 'south': 'Main Hall', 'item': 'Dog Tags'},
    'Repair Hub': {'west': 'Great Hall', 'item': 'Necron Lord'}  # Villain
}

Реализация Инвентаря

Инвентарь можно реализовать через простой список:

inventory = []

Функция для получения предмета

Теперь создадим функцию get_item, которая будет проверять, есть ли предмет в текущей комнате, и добавлять его в инвентарь, если он существует:

def get_item(current_room, inventory):
    if 'item' in rooms[current_room]:  # Проверяем, есть ли предмет в комнате
        item = rooms[current_room]['item']  # Получаем предмет
        inventory.append(item)  # Добавляем в инвентарь
        del rooms[current_room]['item']  # Удаляем предмет из комнаты
        print(f'Вы взяли {item}.')  # Подтверждение успешного получения предмета
    else:
        print('В этой комнате нет предмета для забирания.')

Реализация игрового цикла

Теперь нам необходимо интегрировать эту функцию в игровой цикл, добавив возможность пользователю вводить команду для получения предмета:

current_room = 'Entrance'  # Начальная комната

while True:
    print('Вы находитесь в', current_room)  # Отображаем текущую комнату
    directions = input('Введите направление: north, east, south, west или get item для получения предмета, exit для выхода: ')

    if directions == 'get item':  # Если вводится команда для получения предмета
        get_item(current_room, inventory)
    elif directions in rooms[current_room]:  # Проверяем, можно ли переместиться
        current_room = move_rooms(current_room, directions)  # Переход в новую комнату
    elif directions == 'exit':  # Выход из игры
        print('Вы покинули игру.')
        break
    else:
        print('Вы не можете пройти в этом направлении.')  # Ошибка при неправильном вводе

Оптимизация и завершение

Теперь у нас есть завершенная логика для перемещения между комнатами и получения предметов. Убедитесь, что в процессе игры вы предоставляете пользователю четкие сообщения, чтобы обеспечить интуитивное взаимодействие с игрой. Также подумайте о добавлении методов для просмотра текущего инвентаря или проверки, какие предметы доступны в конкретной комнате в будущем.

Данная стратегия не только позволит вам просто управлять инвентарем, но и создаст основу для расширения игры, добавляя новые функции и элементы в дальнейшем.

Оцените материал
Добавить комментарий

Капча загружается...