時間で回復する体力(HP)の計算方法


ソシャゲによくある、消費した体力(や行動力)が時間経過により回復するやつをどう実装するかのメモ。

データ構造

プレイヤーデータに以下を保持する。

1. 更新時体力値(最後に体力を更新した時の値)
2. 更新日時

「現在」の体力値算出方法

「更新日時」が入っていない場合、体力はMAXのはずなので「更新時体力値」をそのまま返す。
「更新日時」が入っている場合、「更新時体力値」に、「更新日時」から現在日時までに回復するべき値を加算して返す。
例えば、「更新時体力値」が4、「更新日時」が10分前で、5分ごとに体力が1回復する仕様の場合、4 + 2 = 6を返す。
(例がややこしくなるので省いているが、当然最大値切り捨て処理も必要)

注意点

大事なのは、算出時に「更新時体力値」を更新しないこと。
なぜかというと、表示箇所は多いため、プレイヤーデータが頻繁に更新されることになり、ロックの問題と負荷の問題が発生するから。

じゃあ「更新時体力値」は、どんな時に更新するかというと、アイテムを使って「全快させた時」や、クエストなどで「消費した時」など。
全快時は「更新日時」をクリアして、消費時は現在日時をセットし直すことを忘れないように。

また、全快時に体力上限値が増えた時、「更新日時」が入っていない状態のままだと、回復しないことになってしまうので、「更新日時」をセットしなければいけない。

  • このエントリーをはてなブックマークに追加