为游戏创建用户(阅读和解析CSV文件)

时间:2014-11-18 23:15:50

标签: c++ qt file parsing user-interface

所以我正在为一个行星与僵尸类型的模拟游戏上课,我正在使用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体验,我的教授没有详细介绍它,所以我需要对这个项目提供很多帮助。

感谢能够提供帮助的任何人!

3 个答案:

答案 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(",");