using System.Text.Json;
namespace Snake.Avalonia.Views;
///
/// Persists high score to a JSON file in the user's local app data.
///
public static class HighScoreManager
{
private static readonly string FilePath;
static HighScoreManager()
{
var appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var dir = Path.Combine(appData, "SnakeAvalonia");
Directory.CreateDirectory(dir);
FilePath = Path.Combine(dir, "highscore.json");
}
public static int Load()
{
try
{
if (File.Exists(FilePath))
{
var json = File.ReadAllText(FilePath);
var data = JsonSerializer.Deserialize(json);
return data?.Score ?? 0;
}
}
catch
{
// Corrupted file — reset
}
return 0;
}
public static void Save(int score)
{
try
{
var data = new HighScoreData { Score = score, Date = DateTime.UtcNow.ToString("O") };
var json = JsonSerializer.Serialize(data);
File.WriteAllText(FilePath, json);
}
catch
{
// Silently fail — high score is non-critical
}
}
private sealed class HighScoreData
{
public int Score { get; set; }
public string Date { get; set; } = string.Empty;
}
}