c++ - 如何比较字符属性?
问题描述
例如口袋妖怪,水>火>玻璃......等
怎么比较属性??
标志计算??
buff 和 debuff 可以使用 &, | 位操作。但是,我不知道如何计算角色属性的属性。[火,水,玻璃..等]
解决方案
我假设您想要创建一个口袋妖怪元素列表和一个表格,说明哪个元素胜过哪个元素。
由于这是一个非常不规则的表,我建议您将其创建为一个外部文件,该文件被读入然后评估。可能从引发订单的元素列表开始,然后是类似 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 stronger
和far 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 可能不适合此平台。一个关于编程的通用论坛可能会更好,你在一个线程中一个接一个地问几个问题。
推荐阅读
- git - 有没有办法将分支重置为 master 但保留提交历史记录?
- python - 列表元素的公平划分
- sql-server-2017 - SQL 作业未运行。错误:无法获取有关 Windows NT 组/用户“域\用户名”的信息,错误代码 0x2
- database-design - 在数据库中存储选择冲突/需求的良好架构是什么?
- javascript - 响应标头为空
- python - 如何附加到现有的 csv 字典或使用 python csv 添加行?
- java - 在 Java / Hibernate 中将 @Formula 与集合一起使用
- javascript - 如何从Javascript中的数组中删除带有空字符串的对象?
- wordpress - (更新)使用 WPML 获取第二语言的 WooCommerce 类别
- python - python列表中的选项卡\ n