текстовое приключение — как добавить предметы в структуру / класс «инвентарь», не определяя каждый заранее?

Пока что это самая неловкая вещь, которую я когда-либо встречал. У меня установлено целое число, чтобы пометить, сколько зелий, ключей у игрока есть, но я не уверен, как именно я могу получить случайные предметы, такие как камни, процессор (в случае Dunnet), палка, лопата и т. Д.

Я не хочу выяснять каждый элемент в игре и присваивать ему переменную. Должен быть более легкий путь. Я подумал об использовании двух массивов, одного типа string и одного типа int, для выполнения этой работы — но это не сработает по разным причинам. Во-первых, я не могу сделать строку stringname [10], я вижу проблемы, связывающие два, и … список можно продолжать, я уверен, что так не получится.

Все остальное — класс между прочим, я не люблю использовать структуры (но это будет использоваться во всем коде и доступно везде), пока мой код:

struct Inventory{
int Keys;
int Potions;
int getinventory() const { return Keys, Potions; }
void addkey(int amt){ Keys += amt; }
void addpotion(int amt){ Potions += amt; }
void usepotion(){Potions -= 1;}
void usekey()
{
if (Keys >> 0)
{
Keys -= 1;
}
else if (Keys << 1)
{
cout << "You do not have a key!" << endl;
}
}
};

Я определенно все еще работаю над getinventory (), потому что, ну, я не уверен, что я делаю с этим кодом, или даже если я его использую. это единственный способ заставить это работать, определить КАЖДУЮ переменную, когда я создаю ее в игре и добавляю?

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

0

Решение

Способ, которым это решается в LPMud (и подобных), заключается в создании шаблона общего объекта. Общий шаблон будет иметь такие вещи, как краткое описание, длинное описание, определение веса, стоимости и т. Д.

Определенные типы объектов затем наследуют этот класс. Например, зелье — это объект со всеми этими атрибутами, но у него также есть дополнительные действия (функции), которые можно выполнять, и, возможно, различные атрибуты … Например, вкус и цвет.

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

Таким образом, вам просто необходим ваш инвентарь, чтобы иметь возможность обрабатывать общий объект. Сами объекты могут определять дополнительные атрибуты и действия. Это также означает, что вам не нужно предварительно определять каждый отдельный объект как его собственную уникальную переменную.

1

Другие решения

Как насчет создания такой структуры:

struct InventoryItem
{
enum { Key, Potion, Rock, Stick, Shovel } type_;
unsigned int num_;
}

а затем есть Inventory содержать что-то вроде std::vector InventoryItem.

0