口袋妖怪的例子, 水>火 消防>玻璃...等
如何比较属性?
标志计算?
buff和debuff可以使用&,|位操作。 但是,我不知道如何计算角色属性的属性。 [火,水,玻璃等等。
答案 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 stronger
和far 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可能不是适合此的平台。一个一般的编程论坛可能会更好,您可以在一个线程中互相问几个问题。