초보자들이 게임저장 시점을 다음 2가지로만 생각할거임.
1. 게임이 종료되거나 홈키를 눌렀을때
(중간중간 저장이 안되어서 겜튕기면 좆댐)
2. n초마다 게임저장
(겜키고 아무짓도 안할때 낭비가 심함)
내가 소개할건 게임내 골드나 경험치같은 재화가 바뀔때마다 저장시킴
맨 마지막 딱 한 번만 저장 시키는거임
sealed class MyInfo : IDisposable
{
private int exp;
public int Exp
{
get => exp;
set
{
exp = value;
Save();
}
}
private int gold;
public int Gold
{
get => gold;
set
{
gold = value;
Save();
}
}
private Timer saveTimer = new Timer(2000);
public MyInfo()
{
saveTimer.Elapsed += (s, e) =>
{
Console.WriteLine($"SAVED!! Exp : {Exp} Gold : {Gold}");
saveTimer.Stop();
};
}
private void Save()
{
if (saveTimer.Enabled)
saveTimer.Stop();
saveTimer.Start();
}
~MyInfo()
{
saveTimer.Dispose();
}
public void Dispose()
{
GC.SuppressFinalize(this);
saveTimer.Dispose();
}
}
class Program
{
static void Main(string[] args)
{
MyInfo info = new MyInfo();
while (true)
{
for (int i = 0; i < 100; i++)
{
info.Exp += 1;
info.Gold += 1;
}
Console.ReadLine();
}
}
}
Reactive Programming의 debounce개념이라 보면됨.
타이머 시간이 너무짧으면 저장 호출 빈도가 많아질거고
너무 길면 유저들이 저장안된다고 ㅈㄹ할거임.
너네가 알아서 지정하셈.
좋은 방식인듯. 엣지 케이스를 조금만 더 고려해도 좋을 거 같은데 만약에 타이머가 유지되는 채로 계속해서 골드를 획득해서 저장이 계속 미뤄지는 상황을 방지하기 위해서 하드 리밋을 두는 건 어떨까
나는 시간마다 이전에 값과 달라진걸로 체크 했지만 이것도 나쁘지않은덧