如何比较角色属性?

时间:2019-03-01 10:45:11

标签: c++

口袋妖怪的例子, 水>火 消防>玻璃...等

如何比较属性?

标志计算?

buff和debuff可以使用&,|位操作。 但是,我不知道如何计算角色属性的属性。  [火,水,玻璃等等。

1 个答案:

答案 0 :(得分:0)

我假设您要创建一个Pokemon元素列表和一个表,该表说明哪个元素胜过哪个元素。

由于这是一个高度不规则的表,因此建议您将其创建为外部文件,然后读取并进行评估。也许先从列出顺序的元素列表开始,然后是类似CSV的块:

Water,Fire,Plant
-,>,<
<,-,>
>,<,-

您也可以将其硬编码为数组:

enum class Relation { stronger, weaker, same };
vector<vector<Relation> > relations = { { same, stronger, weaker},
                                        { ....

但是对于这样的事情,硬编码是一个不好的解决方案。像enum class Relation和向量relations这样的结构是您阅读后想要的。如果您到目前为止尚未读入数据,则可能需要花费一些时间,但这将是一个值得的练习。

我真的建议您使用枚举,因为它表明代码中的内容很清楚,stronger的含义要比布尔值更多,甚至更糟的是整数(如果将关系描述为3,您需要查找它),并且可以轻松扩展它(例如slightly strongerfar stronger)。

请注意,特别是CSV数据读取器已经存在,您可以使用其中之一。但是,再次,从一开始就是不错的练习,而不是那么艰苦,这里有一些教程,介绍了如何解析How can I read and parse CSV files in C++?之类的文件。

常规界面如下:

enum class Relation { stronger, weaker, same };

class Relations
{
public:
    Relations(const string& file_name);
    Relation relationship(const string& element_1, const string& element_2) const;

private:
    vector<vector<Relation> > relations;
    vector<string> elements; // << stores the names of the elements and gives meaning to the entries of relations
};

更复杂的存储结构是map<string, map<string, Relation> > relations,其中的字符串存储元素的名称,使您可以像Relation relation = relations["Fire"]["Water"];一样访问它,但是如果您现在是一个初学者。优点是该结构不需要从外部开始就具有顺序的元素才有意义,而是将元素存储在内部,这在数据表示中更加有机。

我对这个答案有些过分,或多或少地向您提供建议,而不是回答您含糊的问题,请随时询问更多详细信息。但是最后,如果您是初学者,请注意SO可能不是适合此的平台。一个一般的编程论坛可能会更好,您可以在一个线程中互相问几个问题。