Как правильно спроектировать структуру инвентаря Персонажа? Здравствуйте!
Пытаюсь сделать систему инвентаря главного персонажа для игры в жанре 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, но и другие языки сгодятся, хоть псевдокод).

21 Авг 2019 в 07:04
158 +1
1
Ответы
1

Для более удобной и расширяемой структуры инвентаря главного персонажа вам могут помочь следующие рекомендации:

Создайте базовый класс Item, от которого будут наследоваться все предметы в игре (оружие, броня и т.д.). В этом классе можно определить базовые атрибуты и методы, которые будут общими для всех предметов.

Разделите инвентарь на разные категории (например, оружие, броня, зелья и т.д.). Можно использовать словарь или список объектов для хранения предметов каждой категории.

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

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

Пример кода на Python:

class Item:
def __init__(self, name):
self.name = name
class Weapon(Item):
def __init__(self, name, damage):
super().__init__(name)
self.damage = damage
class Armor(Item):
def __init__(self, name, defense):
super().__init__(name)
self.defense = defense
class Hero:
def __init__(self, name, hp=100):
self.name = name
self.hp = hp
self.inventory = {
'weapons': [],
'armor': []
}
def add_item(self, item):
if isinstance(item, Weapon):
self.inventory['weapons'].append(item)
elif isinstance(item, Armor):
self.inventory['armor'].append(item)
def show_inventory(self, category):
if category in self.inventory:
for item in self.inventory[category]:
print(item.name)
else:
print('Invalid category')
sword = Weapon('Sword', 30)
bow = Weapon('Bow', 20)
helmet = Armor('Helmet', 10)
hero = Hero('Hero')
hero.add_item(sword)
hero.add_item(bow)
hero.add_item(helmet)
hero.show_inventory('weapons')

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

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир