计数相关的功能在游戏中随处可见,计数管理也就变得十分重要了。计数主要分为分为按天,周,月,不切换这几种类型,实现计数器的关键在于判断当前时间与上次修改时间是否在同一天,同一周或者同一月等。这样在获取某种类型的计数器时,假如不在同一天,同一周或者同一月,那么就需要给计数器清零(不切换类型不需要在这里清零,可以手动设置)。实现如下:
class CounterMgr
{
int get_counter(int id);//获取一种计数器的值
void add_counter_day(int id, int num);//给天计数器的值增加num,如果不存在则新建这种id的计数器
void add_counter_week(int id, int num);//给周计数器的值增加num
void add_counter_month(int id, int num);//给月计数器的值增加num
void set_counter(int id, int num);//设置一种计数器的值
void load(...);
void save(...);
map<int, CounterData> _counter_map; //id, 数据
};
存档相关:
message CounterData
{
uint32 counter_id = 1;//计数器id
uint32 counter_type = 2;//计数器类型日,周,月等
uint32 update_time = 3;//最后一次更新计数的时间戳
uint32 counter_value = 4;//计数器的值
}
proto数据通过SerializeToArray后就可以转换为char*类型的数据了,然后再存档。