@Omniverse

Как правильно спроектировать структуру инвентаря Персонажа?

Здравствуйте!

Пытаюсь сделать систему инвентаря главного персонажа для игры в жанре RPG.
Интересует вопрос, как правильно спроектировать инвентарь главного героя, как хранить вещи (оружие, броня и прочее), как выбирать вещи из инвентаря. Как это все разумно организовать в объектно-ориентированном подходе?
Пока что я сделал такой набросок:
class Hero:    
    def __init__(self, name, hp = 100):
        self.name = name
        self.hp = hp
        self.weapons = [] #  инвентарь с оружием
        self.armor = [] # инвентарь с броней
    
    # добавить предмет в инвентарь
    def take(self, item):
        if isinstance(item, Weapon):
            self.weapons.append(item.__dict__)
        elif isinstance(item, Armor):
            self.armor.append(item.__dict__)

class Weapon:
    pass

class Sword(Weapon):
    def __init__(self, name = 'Меч', damage = 30):
        self.name = name
        self.damage = damage

class Bow(Weapon):
    def __init__(self, name = 'Лук', damage = 20):
        self.name = name
        self.damage = damage

class Armor:
    pass


Буду рад увидеть ваши примеры и советы (желательно на Python, но и другие языки сгодятся, хоть псевдокод).
  • Вопрос задан
  • 2685 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Инвентарь - это инвентарь. Он хранит любые предметы основываясь на из размерах и/или весе. Слоты - это уже специализированные ячейки, в которые можно поместить только те типы предметов, для которых эти слоты предназначены, например, оружие или броню.
Таким образом логично сделать базовый класс "предмет" (item), описывающий предметы с точки зрения хранения в инвентаре и общих манипуляций (покупка, продажа и т.п.) и дочерние классы "броня" (armor), "оружие" (weapon) и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект