Как добавить элемент в список для последующего использования в операторе If - PullRequest
2 голосов
/ 28 января 2020

Я создаю текстовую игру, и у меня возникает проблема, когда я пытаюсь добавить Нож для передачи в Лес. Моя идея заключается в том, что игрок должен использовать опцию 'C', чтобы добавить Knife в инвентарь. И используйте это Knife для перехода в лес в опции 'B'. Любое решение, пожалуйста?

a1 = input('What you want to do? \nCheck some rock around you(A) \nGo to the Forest(B) \nSee around of the beach in the island(C) \n\n')
obj = []
def addknife():
    obj.append('Knife')
if a1.capitalize() == 'A':
    print()
    print('It is nothing else than a rock.')
elif a1.capitalize() == 'C':
    print()
    print('Walking for the beach, you encountered a Knife.')
    addknife()
    print(obj)
elif a1.capitalize() == 'B':
    if 'Knife' in obj:
        print('You can go to the forest.')
    else:
        print('The plants do not allow you to pass.')

1 Ответ

2 голосов
/ 29 января 2020

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

Может быть, начать с простого списка мест, и целочисленный индекс в этом списке:

#             index 0                   index 1         index 2               index 3
locations = [ "Rocky End of The Beach", "On The Beach", "Edge of The Forest", "In The Forest" ]
player_location = 0

Итак, на старте игроку может быть показано locations[ player_location ], что будет "Rocky End of The Beach".

Аналогично locations, возможно, может быть список объектов, которые лежат в каждом месте:

objects = [ [ ], [ "Knife" ], [ "Coconut", "Banana" ], [ ] ]

Очевидно, у нас есть список списков, поэтому, если player_location было 2, доступные объекты были бы [ "Coconuts", "Bananas" ]

Итак, чтобы показать описание местоположения игроку, теперь это комбинация местоположения и объектов:

def showLocation( player_location ):
    global locations, objects
    # show the location description
    print( locations[ player_location ], end='. ' )
    # show the location's objects
    if ( len( objects[ player_location ] ) > 0 ):
        print( "There is: " )
        for item in objects[ player_location ]:
            print( item, end=", " )
    print("") # end-of-line

Итак, на позиции «пляж» (player_location is 1), этот текст местоположения станет:

На пляже. Существует: Нож

Еще один список выходов может контролировать, каким образом игрок может двигаться из текущего местоположения, и другой список, указывающий, какой «ключ» необходим. Поэтому, если игрок находится в местоположении 0, он может перейти к 1 = пляж, 2 = край леса. Если игрок «на пляже», он может вернуться только к индексу = 0 (каменистый конец) и т. Д. c.

exits = [ [ 1, 2 ], [ 0 ], [ 0, 2 ], [ 1 ] ]   # numbers of joined locations
keys  = [ [ ], [ ], [ ], [ "Knife" ] ]         # objects needed to enter

keys указывает, какой предмет должен быть в владение до того, как им позволят войти в это место. Так что для первых 3 локаций, объект не нужен. Но чтобы войти в лес (доступ к которому можно получить только через «край леса»), игроку необходимо иметь «Нож».

Система простых списков, подобных этой, может определять набор правил о вашем местоположении. , тогда тот же самый код может попросить у игрока команды. Команда сравнивается с местоположением. Так, например, «получить банан» работает только в том случае, если в списке objects есть элемент «банан» с этим конкретным индексом player_location.

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

Написание псевдокода:

# Do Forever:
#     Show player the location description
#     Get input from player
#     if a movement command
#         if player has key-object to move, or no object needed
#             change the `player_location` index
#         else
#             Show "You need object XXX" to player
#     if a get/drop command and item valid
#         change the player & location objects list   
...