下载 App
开发日志 5 —— 增加离线奖励
放置游戏有个绕不开的问题:玩家关掉游戏之后,世界还转不转?
这个游戏的答案是转。离线期间 AI 仍在训练,回来时会告诉你离开了多久、它数了多少次组合。
规则
三条线卡住收益:
| 项 | 值 | 为什么 |
|---|---|---|
| 门槛 | 5 分钟 | 太短会让频繁切屏变成刷收益的手段 |
| 上限 | 2 小时 | 睡觉 8 小时和 2 小时收益一样,鼓励回来看看 |
| 效率 | 20% | 离线不能比在线划算,否则最优解是关掉游戏 |
第三条尤其重要。放置游戏的离线收益是安慰,不是策略——如果挂机比手动点更赚,游戏就变成比谁更能关机了。
一个必须先解决的问题:时间不能信
离线时长 = 现在 - 上次在线时间。如果这个「现在」读的是本机时间,玩家把系统时间往后调一天,就能白拿一天收益。
所以时间戳全部走服务器。上次在线时间写进云端,下次启动读回来,两端都是服务器时间,改本机时钟无效。读不到服务器时间时不发放——宁可漏发,也不能开这个口子。
踩的坑:顺序错了,离线时长永远是 0
这个 bug 我调了一阵。
启动流程是「结算离线收益」和「提交最新进度」两件事。它们都要读写云端那个时间戳字段。我一开始写成了先提交、再结算:
提交(把时间戳刷成「现在」)→ 结算(现在 - 现在 = 0 秒)结果每次启动都判定离线 0 秒,收益恒为 0。
正确顺序是先结算、后提交:
结算(现在 - 上次时间戳 = 真实离线时长)→ 提交(刷新时间戳,供下次用)代码里现在留了注释标注这个顺序,因为它看起来只是两行的先后,但错一步功能就整个失效,而且不报错——只是安静地永远发 0 收益。
兜底
云端请求可能挂起。如果结算请求一直不返回,后续的提交就被卡住了。
所以加了 5 秒超时:超时就跳过结算直接放行提交。少发一次奖励,好过整个存档链路卡死。
一点体会
离线收益看起来是「白送」,但它的真正作用是让离开变得没有代价。玩家关掉游戏时心里知道「它在长」,下次打开的动力就还在。
这也是为什么回来时会有一句「你回来了。」——数字之外,得让玩家感觉那个东西一直在那儿。






