我有一个简单的游戏,我想用名字保存高分,然后在另一个表单上显示它,但按分数的降序排列。我想用 txt 文件来做,保存没问题,我只保存如下:Adam,200,John,100 等。显示它们也不是问题,但如何对它们进行排序?那么如何将分数与名称联系起来呢?
问问题
2232 次
5 回答
3
您需要以更明显的结构方式存储它们。因此,例如,您仍然可以使用文本文件,每行一个条目:
Adam,200
John,200
ETC
然后,您将从文件中读取它们,将每一行解析为一个HighScoreEntry
对象(当然,您必须创建HighScoreEntry
类),并将其添加到列表中。或者使用 LINQ 进行转换:
var highScoreEntries = File.ReadLines("highscores.txt")
.Select(line => HighScoreEntry.FromLine(line))
.ToList();
然后你可以使用:
var orderedScores = highScoreEntries.OrderByDescending(entry => entry.Score);
或者,您可以使用 XML 之类的东西来存储分数,这将提供更多的结构,并使某些解析稍微容易一些。
如果所有这些听起来都太难了,请尝试确定哪个确切步骤导致您出现问题。
于 2012-11-07T13:54:33.313 回答
0
可以尝试使用
List<Dictionary> myList
这基本上保留了一对键和值。你应该能够很容易地排序。
于 2012-11-07T14:17:07.690 回答
0
您可能想要创建一个如下所示的对象:
public class Player
{
string name;
long score; // i assume no decimal points
// getters/setters
}
然后像这样排序:
List<Player> players = new List<Player>();
players.Sort(delegate(Player player1, Player player2) { return player1.score.CompareTo(player2.score); });
于 2012-11-07T13:56:07.320 回答
0
您需要在项目中使用静态类。这个概念是,写一个类并在里面清除一个数组,我想给你看一个示例:
class score
{
public static int max = 0;
public static int john = 0;
}
现在,您可以从项目中的任何位置更改值,并提供给类。您可以创建一个包含您的用户名的数组。
现在,是时候制作您的新表单,并绘制标签和按钮了。
于 2012-11-07T13:57:00.370 回答
0
var scores = File.ReadLines("scores.txt")
.Select(line => {
string[] parts = line.Split(',');
return new { Name = parts[0], Score = int.Parse(parts[1]) };
})
.OrderByDescending(highScore => highScore.Score);
于 2012-11-07T14:10:54.343 回答