首页 > 解决方案 > 如何比较字符属性?

问题描述

例如口袋妖怪,水>火>玻璃......等

怎么比较属性??

标志计算??

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

标签: c++

解决方案


我假设您想要创建一个口袋妖怪元素列表和一个表格,说明哪个元素胜过哪个元素。

由于这是一个非常不规则的表,我建议您将其创建为一个外部文件,该文件被读入然后评估。可能从引发订单的元素列表开始,然后是类似 CSV 的块:

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

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

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

但是对于这样的事情,硬编码是一个糟糕的解决方案。不过,像enum class Relation和 向量这样的结构relations是您在阅读后想要拥有的。如果到目前为止您还没有读入数据,您可能需要一段时间才能做到这一点,但这将是一个值得的练习。

枚举是我真正推荐你使用的东西,因为它在代码中清楚地说明了事情,astronger比 bool 说的更多,甚至更糟糕的是整数(如果关系被描述为 3,你需要看它向上),而且您可以轻松地扩展它(如slightly strongerfar stronger)。

请注意,尤其是 CSV 数据的阅读器已经存在,您可以使用其中之一。但同样,一开始是很好的练习,并不难,有一些关于如何解析文件的教程,比如我如何在 C++ 中读取和解析 CSV 文件?.

通用界面如下:

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 可能不适合此平台。一个关于编程的通用论坛可能会更好,你在一个线程中一个接一个地问几个问题。


推荐阅读