2

我打算为 XNA 游戏制作记分牌,但我在弄清楚如何做时遇到了一些麻烦。玩家在完成一个关卡后,会在提示时输入他的名字。他的姓名和时间将记录在一个文本文件中,如下所示:

sam 90
james 64
matthew 100

我试图找出一种方法来仅按所用时间而不考虑名称来对这些数据进行排序。

我还没有开始编码,但如果有人能给我任何想法,我将不胜感激。

4

3 回答 3

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

我建议使用分号之类的东西来分隔名称和分数而不是空格,因为这样在允许用户在其名称中输入空格的情况下更容易处理。

于 2012-11-05T12:55:12.930 回答
2

为什么不把它做成一个数据库文件,.sdf,如果需要,您可以轻松地即时创建它。最适合跟踪允许排序和未来重用的数据。

SQLite 正是为此目的而设计的,使基本的 CRUD 操作变得轻而易举。如果您的游戏增长并且您想开始使用它作为下载/上传高分并与朋友/世界分享分数的方式,您还可以加密数据库文件。

不要误会我的意思,这肯定比简单地解析文本文件要多一点工作,但它是面向未来的,您可以立即获得很多功能,而无需编写解析器和复杂的搜索例程等。

XML 是一个明确的其他选择,或者 JSON。这3个都是不错的选择。纯文本文件可能不是要走的路,因为最终可能会导致您做更多的工作。

于 2012-11-05T12:52:23.240 回答
0

创建分数表为

name::score

并阅读每一行

string line = "Sam::255";
string name = line.split("::")[0];

也做类似的分数。

于 2012-11-05T15:42:32.073 回答