我正在使用C ++编写一个简单的ASCII Roguelike RPG,我正常使用@字符代表播放器。
我将这些关卡存储在.txt文件中,这样没有编程知识的人就可以编辑和创建自己的关卡。
当我运行游戏时,我会逐行打开第一级文件和 push_back 级别的字符串向量。
我可以通过坐标访问矢量中的某个字符,例如:
char certainChar = levelData[3][3];
我要求以最快的方式执行相反操作:获取仅在向量中出现一次的char的坐标。
有什么建议吗?
答案 0 :(得分:1)
这归结为搜索无序列表/数组。
对于每一行:对于此行中的每个字符:这是所需的字符吗? - >是的 - >记录索引并返回。
如果您的等级很小,这没关系。
更快捷的方法是将@ -coordinates分别存储在您的关卡文件中,当然也可以在程序执行期间跟踪它们。
答案 1 :(得分:1)
尝试使用此功能
std::pair<int, int> findCoordinates(std::vector<std::string> > & levelData) {
for (unsigned int i = 0; i < levelData.size(); ++i) {
std::size_t found = levelData[i].find('@');
if (found != std::string::npos) return std::make_pair(i, found);
}
return std::pair<int, int>();
}
但对于包含长字符串的大型向量,这可能会非常慢。