0

到目前为止,这是我遇到的最尴尬的事情。我将它设置为整数来标记玩家拥有多少药水、钥匙,但我不确定如何获得随机物品,如岩石、CPU(在 Dunnet 的情况下)、棍子、铲子等。

我不想弄清楚游戏中的每个项目并为其分配一个变量。必须有一个更简单的方法。我曾想过使用两个数组,一个是字符串,一个是 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(),因为我不确定我在用这段代码做什么,或者即使我正在使用它。是我要让它工作的唯一方法,在我在游戏中创建它并添加它时定义每个变量?

我本来打算用这种方式处理武器和怪物……但是没有动态系统来存货实在是太糟糕了。我想专注于解析用户输入,而不必回到我的主要类始终如一的标题中......而且我什至还没有完全写完这个故事,所以我不知道发生了什么...... .

4

2 回答 2

1

LPMuds(和类似的)解决这个问题的方法是创建一个通用对象模板。通用模板将包含简短描述、详细描述、定义权重、值等内容。

然后特定的对象类型继承这个类。例如,药水是具有所有这些属性的对象,但它还具有可以采取的附加动作(功能)和可能的不同属性……例如味道和颜色。

武器可以从该通用类继承,将伤害和命中百分比等定义为通用概念。然后,剑可以继承此武器(继承通用对象)并可以进一步精炼。

通过这种方式,您只需要您的库存能够处理通用对象。对象本身可以定义额外的属性和动作。这也意味着您不需要将每个对象都预定义为它自己的唯一变量。

于 2015-04-06T23:40:43.190 回答
0

如何创建这样的结构:

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

然后Inventory包含类似std::vectorInventoryItem 的东西。

于 2015-04-06T23:40:08.330 回答