# 游戏系统设计实战
把设计方法论落地到真实游戏系统中——匹配/经济/战斗/房间服务器
前置知识:第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-游戏安全与反作弊