我打算为XNA游戏制作一个记分牌,但是我在弄清楚如何制作方面遇到了一些麻烦。完成关卡后,玩家会在出现提示时输入他的名字。他的名字和时间将被记录在一个文本文件中:
sam 90
james 64
matthew 100
我正试图找出一种方法,只按时间对数据进行排序,而不考虑名称。
我还没有开始编码,但如果有人能给我任何想法,我将不胜感激。
答案 0 :(得分:6)
首先,使用File.ReadAllLines(...)
读取文本文件,以便获得字符串数组。然后迭代数组并将每个字符串拆分为空白空间(假设用户不能在其名称中输入空格)并在第二个元素上排序,这应该是分数。您必须将其转换为int.Parse(...)
的字符串才能正确订购。
string[] scores = File.ReadAllLines("scorefile.txt");
var orderedScores = scores.OrderByDescending(x => int.Parse(x.Split(' ')[1]));
foreach (var score in orderedScores)
{
Console.WriteLine(score);
}
//outputs:
//matthew 100
//sam 90
//james 64
我建议使用分号之类的东西来分隔名称和分数而不是空格,因为这样可以更容易处理用户被允许在其名称中输入空格的情况。
答案 1 :(得分:2)
为什么不把它变成一个数据库文件,.sdf你可以根据需要随时轻松创建。最适合跟踪数据,以便进行排序和将来重复使用。
SQLite专为此目的而设计,使基本的CRUD操作变得轻而易举。如果游戏增长,您还可以加密数据库文件,并希望开始使用它作为下载/上传高分并与朋友/世界分享分数的方式。
不要误会我的意思,这绝对比简单地解析文本文件更有用,但它是未来的证明,你可以在不需要编写解析器和复杂的搜索例程的情况下获得大量功能。等
XML是一个明确的其他选择,或JSON。所有3个都是不错的选择。一个纯文本文件可能不是可行的方式,因为最终可能会让你工作更多。
答案 2 :(得分:0)
将分数表创建为
name::score
并阅读每一行及其上
string line = "Sam::255";
string name = line.split("::")[0];
也与得分相似。