0

我有一个简单的游戏,我想用名字保存高分,然后在另一个表单上显示它,但按分数的降序排列。我想用 txt 文件来做,保存没问题,我只保存如下:Adam,200,John,100 等。显示它们也不是问题,但如何对它们进行排序?那么如何将分数与名称联系起来呢?

4

5 回答 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 回答