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

Creating users for game(reading and parsing CSV file)

本文关键字:CSV 文件 和解 读取 游戏 创建 用户      更新时间:2023-10-16

所以我正在为课堂开发一个行星与僵尸类型的模拟游戏,并将Qt Creator GUI与C++一起使用。我们需要做的一件事是,在启动时,游戏窗口将尝试从预先指定的主目录中读取两个文件:"pvz_levels.csv"和"pvz_players.csv"。

levels文件的形式是"level:sequence:rows:start:interval:decrement",而"sequence"本身是一个逗号分隔的列表,形式为(1,1,1,2,3,1,3,1,3,3),这是僵尸出现的顺序。如果目录中不存在此文件,程序将退出并显示错误。

玩家

文件的形式为"timestamp:player:level";分别是上次游戏的时间、玩家姓名和上次尝试的级别。如果此文件不存在,程序将以静默方式跳过此操作并以新播放器身份启动。如果它确实存在,则必须读取和解析该文件,然后在程序中用于计算等。

因此,我在阅读和解析这些文件时遇到了很多麻烦。此外,我们需要将用户数据保存在这些文件中,并且在下次启动时,用户应该可以通过从下拉列表中选择各自的用户来选择继续他们的游戏。他们还应该能够删除任何用户。

我精通 c++ 基础知识,但这是我的第一次 GUI 体验,我的教授没有详细介绍它,所以我需要这个项目的相当多的帮助。

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

代码查找到可用的"csv 解析器",该解析器代表"逗号分隔变量"。您需要几乎相同,除了使用分号而不是逗号。似乎通过更改一个字符,您可以解析。

你也许可以找到一个 csv 解析器,它接受要用作解析字符的字符(我以前见过它们)。

如果您希望我可以找到适合您使用的csv解析器,但是现在您知道要查找的"csv解析器c ++代码",那么它应该是一个快速的Google。

此外,大多数 csv 解析器希望字符串括在双引号 (") 中,但这很容易修改。

一些提示:

只需使用 QFile 打开文件即可。设置QTextStream并使用QTextStream::readLine()将所有行读取到 QStringList 中。现在使用列表中保存的 QString 上的QString::split()来获取此行中存储的单个值。从那里,您可以轻松地使用QString::to*函数将值转换为所需的类型。

为了保存,只需逆转该过程。使用:QString("%1,%2,%3").arg(timestamp).arg(player).arg(level)设置一行并将其放入您的QTextStream。如果流连接到文件,则会将其写入文件。

我已经成功地实现了这样的 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,3,3},您必须在子 QStringList 中另外拆分它,然后用如下所示的内容删除括号:

QStringList sequence = data[i][1].remove(QRegExp("{")).remove(QRegExp("}")).split(",");