Untitled
unknown
plain_text
3 years ago
2.2 kB
7
Indexable
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()));
}
}
}
}
}
Editor is loading...