В текстовой RPG объект Player не имеет атрибута loot, как присвоить ему атрибут loot? - PullRequest
0 голосов
/ 30 мая 2020

Примечание: я относительно новичок в Python и кодировании. Я создаю текстовую RPG, следуя инструкциям в книге под названием Make Your Own Python Text Adventure авторства Phillip Johnson . Я завершил книгу и теперь прислушиваюсь к ее советам, чтобы настроить свою игру и создать свои собственные объекты и классы.

Я пытаюсь создать плитку карты под названием LootTile, которая позволяет игроку подбирать предмет добычи под названием Fancy Chocolate и автоматически хранить его в своем инвентаре. Однако я продолжаю получать разные ошибки относительно добычи. Первый, самый большой, который я не знаю, как исправить, - это AttributeError.

Я знаю, что мне, вероятно, придется создать атрибут добычи в классе Player, но я не уверен, как это сделать. Приветствуются любые указатели. Я размещу здесь свой Traceback и связанный с ним код.

Traceback

Traceback (most recent call last):
  File "C:\Users\Timothy Hall\Desktop\Yradel_Game\Yradel_Game5.py", line 102, in <module>
    main()
  File "C:\Users\Timothy Hall\Desktop\Yradel_Game\Yradel_Game5.py", line 49, in main
    room.modify_player(player)
  File "C:\Users\Timothy Hall\Desktop\Yradel_Game\world.py", line 132, in modify_player
    player.loot = player.loot + self.loot
AttributeError: 'Player' object has no attribute 'loot'

player.py

class Player:
    def __init__(self):
        self.inventory = [items.Dagger(), items.BreadRoll(), items.Potion()]
        self.x = world.start_tile_location[0]
        self.y = world.start_tile_location[1]
        self.hp = 100
        self.gold = 100
        self.victory = False
        # self.loot = ?

world.py

class LootTile(MapTile):
    def __init__(self, x, y):
        self.loot = items.FancyChocolate
        self.loot_claimed = False

    def modify_player(self, player):
        if not self.loot_claimed:
            self.loot_claimed = True
            player.loot = player.loot + self.loot
            print("You've retrieved a Fancy Chocolate!")
    def intro_text(self):
        if self.loot_claimed:
            return """The underbrush looks the same here, time to move on!"""
        else:
            return """There is a tree stump with a yummy looking piece of chocolate on it."""

1 Ответ

0 голосов
/ 08 июля 2020

я из Аргентины, так что все мои игры «передняя часть» на испанском языке sh, но я добился того же, что и вы, сделав это следующим образом:

class ItemTile(MapTile):
    def __init__(self, x, y, item):
        self.item = item
        self.item_claimed = False
        super().__init__(x, y)
 
    def add_loot(self, player):
        player.inventory.append(self.item)
 
    def modify_player(self, player):
        if not self.item_claimed:
            self.item_claimed = True
            self.add_loot(player)
        
class ChoriRoom(ItemTile):
    def __init__(self, x, y):
        super().__init__(x, y, items.ChoriPan())
 
    def intro_text(self):
        if self.item_claimed:
            return """
            aca no hay nada
            """
        else:
            return """
        Te encontras un choripan calentito sobre una mesa abandonada
        en un restobar.
        """

class BirraRoom(ItemTile):
    def __init__(self, x, y):
        super().__init__(x, y, items.Birra())
 
    def intro_text(self):
        if self.item_claimed:
            return """
            aca no hay nada
            """
        else:
            return """
        Te encontras una birra tibia en el marco de una ventana
        Medio un asco, pero anda a saber cuando vas a conseguir una fría.
        """

i не знаю, как это очень хорошо объяснить на английском sh, но я считаю, что это довольно понятно, один родительский класс предметов, а затем дочерний класс для каждого "добываемого предмета", который нужно подбирать каждый раз, когда вы идете в первый раз время в любой «дочерний» тайл «родительского» элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...