所以我正在为一个行星与僵尸类型的模拟游戏上课,我正在使用Qt Creator GUI和C ++。我们需要做的一件事是,在启动时,游戏窗口将尝试读取两个文件:“ pvz_levels.csv ”和“ pvz_players.csv “来自预先指定的主目录。
级别文件的格式为“level:sequence:rows:start:interval:decrement”和“sequence”本身是以逗号分隔的格式(1,1,1,2,3,1,3,1,3,3),这是僵尸出现的序列。如果目录中不存在此文件,则程序将退出并显示错误。
播放器文件的格式为“timestamp:player:level”;最后一次比赛的时间,球员的名字和最后一次尝试的等级。如果此文件不存在,程序将以静默方式跳过此操作并以新播放器的身份启动。如果确实存在,则必须读取并解析该文件,然后在程序中使用该文件进行计算等。
所以,我在阅读和解析这些文件时遇到了很多麻烦。此外,我们需要将用户数据保存在这些文件中,并且在下次启动时,用户应该可以通过从下拉列表中选择各自的用户来继续他们的游戏。他们还应该能够删除任何用户。
我对c ++基础知识非常熟练,但这是我的第一次GUI体验,我的教授没有详细介绍它,所以我需要对这个项目提供很多帮助。
感谢能够提供帮助的任何人!
答案 0 :(得分:0)
将代码查找到可用的“csv解析器”,它代表“逗号分隔变量”。你需要几乎相同,除了你使用分号而不是逗号。似乎通过更改一个字符,您可以为您完成解析。
你或许可以找到一个csv解析器来接受要用作解析字符的字符(我以前见过它们)。
如果您希望我能找到合适的csv解析器供您使用,但现在您知道您正在寻找什么“csv解析器c ++代码”,它应该是一个快速的Google。
此外,大多数csv解析器都希望将字符串括在双引号(“)中,但这很容易修改。
答案 1 :(得分:0)
一些提示:
只需使用QFile
打开文件即可。设置QTextStream
并使用QTextStream::readLine()
将所有行读入QStringList。现在在列表中保存的QString上使用QString::split()
来获取存储在该行中的单个值。从那里,您可以轻松使用QString::to*
函数将值转换为您想要的类型。
保存只需反转程序。
使用QString("%1,%2,%3").arg(timestamp).arg(player).arg(level)
设置一行并将其放入QTextStream
。如果流连接到文件,则会将其写入文件。
答案 2 :(得分:0)
我已经成功实现了这样的CSV读取:
std::unique_ptr<QFile> csv_worker(new QFile(resource_path));
QTextStream input_csv(csv_worker.get());
QList<QStringList> data
while(!input_csv.atEnd())
{
//removes the carriage return symbol and splits the elements
QStringList line = input_csv.readLine().remove(QRegExp("\r")).split(","); //replace here with :
data << line;
}
csv_worker->close();
它读取完整的文件,每行生成一个QStringList。 对于QStringList中的第二个元素,让我们说(1,1,1,2,3,1,3,1,3,3},你必须在子QStringList中另外拆分,然后用类似的东西去掉括号这样:
QStringList sequence = data[i][1].remove(QRegExp("{")).remove(QRegExp("}")).split(",");