Untitled
unknown
plain_text
6 months ago
2.2 kB
1
Indexable
Never
class PlayerDataStorage : IPlayerDataStorage { private static PlayerDataStorage instance; private static readonly object lockObject = new object(); private readonly string filePath; private PlayerDataStorage(string path) { filePath = path; } public static PlayerDataStorage Instance { get { lock (lockObject) { if (instance == null) { instance = new PlayerDataStorage("result.txt"); } return instance; } } } public void Write(string name, int guesses) { lock (lockObject) { using (StreamWriter output = new StreamWriter(filePath, append: true)) { output.WriteLine(name + "#&#" + guesses); } } } public void ShowTopList() { lock (lockObject) { using (StreamReader input = new StreamReader(filePath)) { List<IPlayerData> results = new List<IPlayerData>(); string line; while ((line = input.ReadLine()) != null) { string[] nameAndScore = line.Split(new string[] { "#&#" }, StringSplitOptions.None); string name = nameAndScore[0]; int guesses = Convert.ToInt32(nameAndScore[1]); IPlayerData pd = new PlayerData(name, guesses); int pos = results.IndexOf(pd); if (pos < 0) { results.Add(pd); } else { results[pos].Update(guesses); } } results.Sort((p1, p2) => p1.Average().CompareTo(p2.Average())); Console.WriteLine("Player Games Average"); foreach (IPlayerData p in results) { Console.WriteLine(string.Format("{0,-9}{1,5:D}{2,9:F2}", p.Name, p.NGames, p.Average())); } } } } }