我目前正在开展网络游戏。游戏结束后,玩家姓名和分数将被发送到服务器进行存储。玩家可以从主菜单访问这些高分。
一旦服务器上存储了5个分数,只有超过当前存储分数的分数才会添加到数据库中。
Highscores存储在字典(string,int)中,然后按值排序。
我正在努力创建一个方法,该方法将获得一个高分项(名称,分数),并根据highscores词典进行检查。如果得分足够高,字典将被重新排序并包含新值。
答案 0 :(得分:1)
我会创建一个字典变量,只需添加分数即可。然后,当我需要获得高分时,返回一个有序的可枚举KeyValuePair类型。
public class HighScore
{
static Dictionary<string, int> scoreBook = new Dictionary<string, int>()
{
{ "Sam", 300 },
{ "Frodo", 200 },
{ "Bilbo", 100 },
};
public static void Main(string[] args)
{
AddScore("Gandolf", 250);
foreach (var entry in GetTopScores())
{
Console.WriteLine("{0}: {1}", entry.Key, entry.Value);
}
}
public static void AddScore(string name, int score)
{
scoreBook.Add(name, score);
}
public static IOrderedEnumerable<KeyValuePair<string, int>> GetTopScores()
{
var sortedScoreBook = from entry in scoreBook orderby entry.Value descending select entry;
return sortedScoreBook;
}
}
答案 1 :(得分:0)
我个人不会在这里使用Dictionary<TKey,TValue>
,我认为KeyValuePairs的SortedList与比较器可以更好地工作。但如果你坚持,在这里你去:
private int numberOfHighScoresToKeepTrackOf = 5;
private Dictionary<string,int> _scoresDictionary = new Dictionary<string, int>();
public void AddScore(KeyValuePair<string, int> newScore)
{
if (_scoresDictionary.Count < numberOfHighScoresToKeepTrackOf)
_scoresDictionary.Add(newScore.Key, newScore.Value);
else if (_scoresDictionary.Values.Min() < newScore.Value)
_scoresDictionary.Add(newScore.Key, newScore.Value);
var top = _scoresDictionary.OrderByDescending(pair => pair.Value).Take(Math.Min(_scoresDictionary.Count, numberOfHighScoresToKeepTrackOf));
_scoresDictionary = top.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
}