我目前正在研究pong的網絡遊戲。一旦遊戲結束,玩家名字和得分將被髮送到服務器進行存儲。玩家可以從主菜單訪問這些高分。如何檢查一個值是否高於字典元素
一旦存儲在服務器上的5個分數,只有擊敗當前存儲分數的分數被添加到數據庫中。
高分存儲在字典(字符串,int)中,然後按值排序。
我很努力地創造一種方法,它將採取高分條目(名稱,分數),並根據高分榜字典進行檢查。如果分數足夠高,字典將被重新排序幷包含新值。
我目前正在研究pong的網絡遊戲。一旦遊戲結束,玩家名字和得分將被髮送到服務器進行存儲。玩家可以從主菜單訪問這些高分。如何檢查一個值是否高於字典元素
一旦存儲在服務器上的5個分數,只有擊敗當前存儲分數的分數被添加到數據庫中。
高分存儲在字典(字符串,int)中,然後按值排序。
我很努力地創造一種方法,它將採取高分條目(名稱,分數),並根據高分榜字典進行檢查。如果分數足夠高,字典將被重新排序幷包含新值。
我會創建一個字典變量,並簡單地添加分數,因爲我去。然後,當我需要獲得高分時,返回一個有序的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;
}
}
就我個人而言,我不會在這裏使用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);
}
你到現在爲止嘗試過什麼?你可以發佈一些我們可以看一看的代碼嗎? –
如果您在使用列表而不是字典的情況下如何檢查值。它應該沒有太大的不同。 –
可能的重複[如何按值排序字典?](http://stackoverflow.com/questions/289/how-do-you-sort-a-dictionary-by-value) –