在我独立开发的小游戏 《萌趣乐消消》 中,最近上线了一个常见但关键的机制——体力系统。很多休闲游戏都会有类似设定,目的是控制游戏节奏,同时增加玩家的长期留存。
🔹 规则设计
- 初始上限:30 点体力
- 消耗规则:进入任意关卡消耗 5 点体力
- 返还规则:如果通关,返还 3 点体力
- 自动恢复:每分钟恢复 1 点体力,直到达到上限
这样的设计有两个考虑:
- 保证玩家 玩一关有成本,避免无限刷;
- 通关能部分返还,给玩家成就感和正向反馈;
- 没有购买体力的机制,保持轻量化。
🔹 数据库设计
单独一张 UserStamina 表,字段:
openid:用户唯一标识stamina:当前体力值lastRecoverAt:上一次恢复时间
🔹 Service 层逻辑
写了一个 UserStaminaService,主要功能:
-
动态恢复
- 根据
lastRecoverAt算出过去多少分钟 - 每分钟恢复 1 点
- 更新数据库和 Redis 缓存
- 根据
-
消耗体力
- 每次进入关卡前,扣除 5 点
- 如果不足,则提示体力不足
-
通关返还
- 如果玩家胜利,在结算时自动返还 3 点体力
- 保证不超过上限
🔹 Redis 缓存
- key:
stamina:{openid} - 每次查询和更新都写 Redis,保证快速读写
- 同时同步数据库,防止丢数据
🔹 API 设计
在用户接口里新增:
GET /user/stamina→ 查询体力POST /user/stamina/consume→ 进入关卡扣 5 点POST /user/stamina/refund→ 通关后返还 3 点
🔹 总结
体力系统看似只是数值运算,但需要考虑:
- 节奏感:消耗与返还比例决定玩家是否“想继续玩”
- 公平性:通关返还避免“玩一关就掉 5 点”过于苛刻
- 技术实现:动态恢复 + Redis 缓存,保证性能