Steam Families:共享一个游戏库,不必占住整座游戏库
Steam Families 让家庭成员共享符合条件的游戏,同时保留个人存档。并发限制落在每款游戏的副本数量上:不同游戏可以同时玩,同一游戏需要足够副本。
先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。
01
代码思考
按游戏借副本,按用户留进度
实现一个内存中的家庭游戏借用模块。家庭有游戏 X 两份、Y 一份,用户为 A、B、C。用户可申请开始玩某游戏、结束自己的游玩、保存该游戏的进度文字,并读取个人进度与各游戏空闲份数。每人同一时刻最多玩一款游戏;只有正在玩该游戏的人可以保存自己的进度。
- 没有空闲副本或用户已有游玩记录时,开始请求应拒绝且状态不变。结束后归还副本,但保留个人进度;未在游玩的用户结束时不改变状态。操作依次执行,所有编号均有效。
- A、B 开始 X 后,C 申请 X 应拒绝,但申请 Y 应成功。A 保存 X 的进度“第三关”并结束后,X 空闲一份;B 的进度仍为空,A 的进度仍为“第三关”。C 仍在玩 Y 时申请 X 应拒绝;C 结束 Y 后再申请 X 应成功,A 的进度仍不变。
- 交付可运行模块和这组调用,解释副本占用与个人记录怎样组织。无需等待队列、登录或持久化。
查看思路
先画清三个关系:用户当前在玩什么、某游戏被占几份、用户在某游戏留下什么进度。考虑哪些关系在结束游玩时消失,哪些必须保留;用 C 换游戏和 A 结束后的读取检查是否意外锁了整库或删除了个人数据。