# 游戏系统设计实战

把设计方法论落地到真实游戏系统中——匹配/经济/战斗/房间服务器

前置知识:第01章 系统设计方法论 + 3_1_java-backend-deep-dive(后端实现)


阅读指南(初学者必看)

为什么你需要学习游戏系统设计实战?

第01章学了设计方法论,但方法论本身不产出代码。本章把 DDD、设计模式、架构模式落地到四个最核心的游戏系统:匹配、经济、战斗、房间服务器。这是从"懂理论"到"能设计"的桥梁。

学完本章,你能回答:

  • 匹配系统的 ELO/MMR 算法怎么实现?等待时间和匹配质量怎么平衡?
  • 游戏经济系统怎么防通胀?货币产出和回收怎么设计?
  • 战斗系统的框架怎么设计?回合制和实时制有什么不同?
  • 房间服务器怎么支持水平扩展?

本文结构

第一部分:匹配系统——让对局势均力敌
第二部分:经济系统——让虚拟经济不崩溃
第三部分:战斗系统框架——让打架有章法
第四部分:房间服务器架构——从单机到分布式

一、匹配系统

匹配算法:
1. ELO 匹配:根据胜负调整分数,匹配相近分数的玩家
2. MMR 匹配:改进版 ELO,考虑更多因素(队友水平、对手水平、角色熟练度等)
3. 分层匹配:新手/初级/中级/高级,先在同层匹配
4. 放宽策略:等待时间越长,匹配范围越宽

匹配流程:
玩家点击匹配 → 加入匹配队列 → 匹配服务定时扫描
→ 找到合适对手 → 创建房间 → 通知双方

Q:ELO 和 MMR 有什么区别? A:ELO 只看胜负,MMR 还考虑更多因素。ELO 是公开的"段位分",MMR 是隐藏的"真实水平分"。匹配用 MMR,展示用 ELO。


二、经济系统

货币体系:
- 金币:游戏内获取,通用
- 钻石:充值获取,高级
- 公会币:公会活动获取,公会商店

防通胀:
- 产出控制:每日/每周获取上限
- 回收机制:装备升级、技能学习、商店购买
- 税收:交易手续费

防作弊:
- 服务端验证所有交易
- 数值范围检查(不能为负数)
- 交易日志审计

Q:经济系统通胀了怎么办? A:治标——增加回收(限时商店、消耗活动、交易税上调);治本——降低产出(削弱刷金效率、增加获取上限)。最好的办法是防患于未然:上线前做经济仿真,模拟 6 个月后的货币流通量。


三、战斗系统框架

战斗系统架构:
BattleManager
├── BattleConfig(配置:规则、时间、人数)
├── Team[](队伍)
│   └── Fighter[](战斗者)
│       ├── Attributes(属性:HP/ATK/DEF/SPD)
│       ├── Skills[](技能列表)
│       └── Buff[](状态效果)
├── TurnManager(回合管理 / 实时管理)
├── EffectResolver(效果结算)
├── DamageCalculator(伤害计算)
└── BattleRecorder(战斗记录,用于回放)

Q:实时战斗和回合制战斗的架构差异大吗? A:核心差异在 TurnManager。回合制是"轮流行动",TurnManager 管理行动队列和速度排序;实时制是"同时行动",TurnManager 管理技能冷却和 GCD。其他部分(属性、技能、Buff、伤害计算)是通用的。


四、房间服务器架构

4.1 基本架构演进

简单版(单机)

接入层(Gateway)
  ↓
房间服务器(单机,所有房间)
  ↓
数据库(Redis存房间状态,MySQL持久化)

适用:小项目,1000人以内。

进阶版(多房间服)

接入层(Gateway)
  ↓
房间服务管理器(选哪个房间服)
  ↓
房间服务器1、房间服务器2、...
  ↓
共享数据层(Redis存房间状态)

适用:中型项目,几千-几万人在线。

4.2 房间分配策略

策略 说明
轮询(Round Robin) 1→2→3→1→2→3… 简单但不均匀
随机(Random) 随便选,更不均匀
最少连接(Least Connection) 选当前人数最少的房间服!推荐!
Hash取模 房间ID哈希,固定分配给某台

4.3 服务状态管理

方案 说明
单机内存 简单,但房间服挂了数据全丢
Redis 推荐!存房间状态,共享给所有房间服
Redis+MySQL Redis存当前状态,MySQL持久化备份

4.4 扩容与容错

扩容:加机器,加房间服,最少连接策略自动分配新玩家到新房间服。

容错

策略 说明
快速失败(Fail Fast) 房间服挂了,不再分配新玩家到那里
心跳检测 房间服定期报心跳,超时认为挂了
房间数据备份 状态尽量存Redis,房间服挂了数据不丢

实践任务

  • 任务1:实现 ELO 匹配算法,模拟 1000 场对局,验证匹配质量
  • 任务2:设计一个游戏经济系统(3种货币 + 产出/回收表),用 Excel 仿真 6 个月的通胀率
  • 任务3:实现战斗系统框架(BattleManager + Fighter + Skills + Buff),支持回合制
  • 任务4:在战斗系统中添加 Buff 系统(增伤/减伤/眩晕/持续伤害),测试 Buff 叠加逻辑
  • 任务5:为战斗系统添加回放功能(用命令模式记录每一步操作),支持战斗回放和统计
  • 任务6:设计房间服务器架构,实现最少连接分配策略和心跳检测

与其他章节的关联

本章内容 关联章节 关联点
匹配系统 第03章 帧同步Lockstep 匹配完成后创建房间,房间内用帧同步
匹配系统 第04章 状态同步 大型 MMO 的匹配可能涉及跨服匹配
经济系统 第09章 游戏运营与商业化 活动系统的奖励是经济系统的产出源头
战斗系统 第10章 游戏架构设计模式 ECS 架构非常适合战斗系统的实体管理
战斗系统 第03章 帧同步Lockstep 战斗系统的同步方式决定了架构设计
DDD 落地 第01章 系统设计方法论 匹配/经济/战斗就是三个限界上下文
房间服务器 第13章 弱网优化与实战 房间服的稳定性直接影响弱网体验

上一章:06-自定义UDP协议与KCP 下一章:08-游戏安全与反作弊