초보자들이 게임저장 시점을 다음 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개념이라 보면됨.

타이머 시간이 너무짧으면 저장 호출 빈도가 많아질거고

너무 길면 유저들이 저장안된다고 ㅈㄹ할거임.

너네가 알아서 지정하셈.