ゲームをした日ごとのデータを保存して、どのように変化しているかを表示しようと思っています。最終的にはグラフで勝率を出したいのですが、データの蓄積部分が必要です。
日付と保存したいデータの組み合わせをクラスにして、それをリストで持てばやりたいことは可能そうでした。日ごとのデータクラスをDaily、それを保持するリストを持つクラスをLogとして話を続けましょう。
Dailyクラスは日付として、年、月、日の3つを持っていても良いし、DateTime構造体を持っていても良いです。DateTime構造体は日付の計算を楽にしてくれるので、計算のために使います。年、月、日の3つのパラメータからDateTime構造体が作れるので、どちらで保持しても情報は同じです。Dailyクラスは例えばスコアといったゲームの情報も持たせます。この情報は1日ごとに集計するものになります。
Logクラスの中にいくつものDailyが保持されているわけですが、日が進むにつれてDailyクラスは増えていきます。ゲームの開始からずっと保持していくとどれだけのデータが必要が決められないので、日数を区切って保存することにします。例えば30日分とかです。このように決めると、リストの要素は30が限界になります。 セーブする領域も30個のDailyクラスを保持できるようにしておけばいいです。(要素数が確定すると配列でも良いような気はします。Listを使う方が便利なので、Listを想定していますけど。)
日が進むと要らないDailyデータがリストに現れます。それは現在時刻から判断して、30日以前のものはいらないということです。
保持しているリストにあるDailyデータの日付と現在の日付の差をとって、何日間の差があるか調べればいいです。DateTime構造体同士の差を取ると、TimeSpan構造という間隔を表す構造体が得られます。この構造体はDaysで何日間の差があるか取得できるのでこれを使います。0であれば今日であり、正であれば未来になり、負の場合は過去です。今日を含めた過去30日分のデータを取るなら、0から-29までのデータを残します。
このようにして必要な期間のデータをリストに残すことができます。このリストの更新は今日のデータがあるかLogクラスに問い合わせて、新しく今日のデータを追加するときにリストの更新をすると効率的だと思います。
時間をごまかすチートの対策は記録程度では要らないですが、必要であればセーブに最終更新した日付を残しておけば良いです。この最終更新日時は常に過去であるはずなので、もし現在日時が最終更新日時よりも過去であったらチートしているということになります。
サーバーとか外部のものが使えるのであれば、そこの時刻と端末の時刻が正しいかを判定すれば良いでしょう。何かセーブするときに時刻を調べておかしくないか判定すれば、不正はできないと思います。
コメント