Как сделать так, чтобы 2 экземпляра класса ссылались друг на друга? - PullRequest
0 голосов
/ 14 сентября 2018

Так что у меня возникла небольшая проблема с текстовой игрой, которую я делал. Игра работает, принимая команду, которая ссылается на функцию, затем функция ищет то, что ищет игрок. Например, «исследовать элемент1» будет печатать описание элемента1 из словаря местоположения.

Проблема, с которой я столкнулся, заключается в том, что я не могу установить местоположение игрока с моим текущим расположением. Я хочу, чтобы игрок начинал в пещере, вводил go to forest и местоположение персонажа устанавливалось на forest. Однако до этого не доходит, потому что независимо от того, в каком направлении я объявляю два, я нажимаю на NameError. Я хочу иметь возможность перемещаться между двумя.

cave = location(
    name = "CAVE NAME",
    desc = "It's a cave, there's a forest.",
    objects = {'item1' : item1, 'item2' : item2, 'item3' : item3},
    adjacentLocs = {'forest' : forest}
)
forest = location(
    name = "The Central Forest",
    desc = "It's very woody here. There's a cave.",
    objects = {},
    adjacentLocs = {'cave' : cave}
)

Вот моя goTo() функция:

def goTo():
    target = None
    #Check inventory
    for key in pChar.inventory:
        if key.name.lower() in pChar.lastInput:
            print("\nThat's an object in your inventory. You won't fit in your backpack.")
            target = key
            break

    #Check scene objects
    if target == None:
        for key, loc in pChar.charLocation.objects.items():
            if key in pChar.lastInput:
                print("\nThat's a nearby object. You have essentially already gone to it.")
                target = key
                break

    #Check location list
    if target == None:
        for key, loc in pChar.charLocation.adjacentLocs.items():
            if key in pChar.lastInput:
                pChar.charLocation = loc
                print("\nYou amble on over to the {}.".format(pChar.charLocation.name))
                target = key
                break

    if target == None:
        print("That place doesn't exist.")

Как мне лучше всего сослаться на два класса друг в друге?

1 Ответ

0 голосов
/ 14 сентября 2018

Вы не можете ссылаться на объект, если он уже не существует.Вы можете создать свои местоположения в два прохода: во-первых, инициализировать их без каких-либо соседних местоположений.Затем определите смежные местоположения.Что-то вроде:

cave = location(
    name = "CAVE NAME",
    desc = "It's a cave, there's a forest.",
    objects = {'item1' : item1, 'item2' : item2, 'item3' : item3},
    adjacentLocs = {}
)
forest = location(
    name = "The Central Forest",
    desc = "It's very woody here. There's a cave.",
    objects = {},
    adjacentLocs = {}
)

cave.adjacentLocs["forest"] = forest
forest.adjacentLocs["cave"] = cave

(Это предполагает, что экземпляры местоположений присваивают свои смежные местоположения атрибуту с именем adjacentLocs. Вы не поделились реализацией своего класса, поэтому я не могу быть уверен в этой деталиЗаменить на любое подходящее имя.)

...