这是一套关于 SLG(策略类)游戏产品设计的书。它不讲渲染、不讲服务端、不讲买量投放,它讲的是一个 SLG 的数值与商业化怎么被设计出来,并且每一处设计都能被跑出来的数字检验。
卷二《数值平衡与商业化运营》回答两个问题:一支队伍为什么强、一个玩家多久能长大、一次抽卡要花多少(第 1–8 章),以及钱从哪来、人怎么留住、一个赛季怎么收尾(第 9–16 章)。卷一《产品架构与经济系统》解决的是「有哪些系统、经济怎么不崩」,是本卷的前置。
这套书与站内既有内容的分工
站内已经有不少相邻内容,写清楚分工比重复写一遍更有价值:
- 游戏商业核心指标详解 是 ARPU / LTV / CAC 的指标词典,给的是定义。本卷第 11 章在其上做建模——把 LTV 拆到 SLG 的付费点(资源包、加速、月卡、抽卡),跑出回本周期。
- 独立游戏平衡与经济手册 是单机/独立游戏口径(Hades、Celeste、Slay the Spire),它的数值在通关时结束。本卷第 2、4 章是 SLG 持续运营口径——数值要跨赛季活着。
- 赛季重置原则 给的是通用重置原则。本卷第 8 章给的是跨赛季膨胀控制的可跑方案:世界地图重开、排行榜结算、继承与压缩怎么算。
- 经济系统运营 checklist 是产业清单。本卷第 14 章给的是可跑的活动奖励预算模型。
- SLG 技术架构专题 的 9 篇讲技术架构(前后端分层、模块拆分、协议),明说「不讨论具体玩法数值」。本套讲的正是它没讲的那一半:产品与数值。
- 城市 SLG 原型 PRD
是单个原型的 PRD 文档。本套的
bastion是一套配置驱动、可断言、可回放的工程。
为什么这套书能「跑」
产品与数值书最容易写成散文——道理都对,落不了地。这套书给自己定了一条硬规矩:每一节至少有一个可运行的产物。
贯穿全书的是一个虚构的 SLG 《王朝纪元》 和一套工具链 bastion:
bastion/
config/ # 唯一真源:resources / buildings / units / battle / season / pricing
sim/ # Python:读 config 跑平衡仿真,产出 JSON + CSV + SVG
proto/ # TypeScript:读 config 跑可玩原型,node --test 断言
关键设计是一份配置、两处消费:config/ 是设计的唯一真源,sim/ 用它跑数值平衡,proto/ 用它跑可玩原型。改一个数字,两边结果都变——这就把「数值」变成了可以回归测试的东西。本卷与卷一共享同一份 config/,season.json 与 pricing.json 是卷二的公共输入。
跨语言逐位一致是这套工程的地基。如果 Python 和 TypeScript 对同一份配置算出不同的数,那「唯一真源」就是假的。所以
config/里的增长率一律写成整数比(growthNum: 122/growthDen: 100),系数与概率写成整数百分比(counterMultiplierPct: 150、critChancePct: 25),幂运算在 TS 侧用BigInt,除法一律整数地板除。涉及随机的部分用自实现的确定性 PRNG(两侧同算法同种子),不吃运行时随机数实现。这些约定在附录 C 有完整索引。
可运行性口径
本套用五档标注每个代码块,代码块头部的注释里写着它属于哪一档:
| 层 | 含义 | 怎么验证 |
|---|---|---|
| S 仿真层 | Python 数值仿真:成长曲线拟合、战力校验、掉落与保底期望、抽卡期望成本、匹配公平性、赛季膨胀、LTV 与留存漏斗、显著性检验 | python3 sim/<name>.py --config config/,产出 JSON + CSV + SVG |
| P 原型层 | TypeScript 配置驱动原型:确定性战斗结算、阵容强度、赛季结算与过渡 | node --test 'proto/**/*.test.ts' |
| D 静态层 | 产品文档、卡池结构、定价档位表、实验设计表、配置表 schema | schema / lint 校验 |
| X 不可复现 | 真实竞品后台数据、真实买量投放(CAC / ROI)、真实用户调研与留存 | 正文显式标注「需真实业务环境,命令行不可复现」 |
| B 基准 | 拟合残差、期望与模拟对照、匹配分收敛、赛季膨胀偏差 | 产出 JSON,软告警不硬失败 |
两条纪律贯穿全书:
- 不编造竞品后台数字。率土之滨、三国志·战略版、万国觉醒、COK 这些真实竞品只作「公开可观察机制」的对照引用并标注观察时点,不会写成「实测」。
- 所有数字来自本机实跑。正文里的每一个数字都是脚本真跑出来的输出,并且会写明「同机相对量级,绝对数值不可移植」。
全书目录
第三部分:数值平衡与成长(第 1–8 章)
第 1 章 属性与战力模型——一支队伍为什么强
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 属性分类与派生属性 | 基础属性、派生属性与依赖关系 |
| 1.2 | 战力公式设计与校验 | 战力公式与同型校验(S) |
| 1.3 | 属性膨胀与公式的可扩展性 | 版本迭代下公式怎么不塌 |
第 2 章 成长曲线设计——多久能长大
| 节 | 文章 | 核心内容 |
|---|---|---|
| 2.1 | 线性、指数、对数与分段曲线 | 四类曲线的适用场景与代价 |
| 2.2 | 等级与养成成本曲线 | 升级成本与时间门槛(S) |
| 2.3 | 曲线拟合与反推目标体验 | 从目标体验反推参数(S) |
第 3 章 战斗数值基础——一次交锋怎么算
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 伤害公式与减伤模型 | 伤害、护甲与减伤边界 |
| 3.2 | 命中、暴击与随机性 | 随机项与确定性 PRNG(S) |
| 3.3 | 确定性战斗结算 | 可复现的回合结算(P) |
第 4 章 兵种与阵容数值——怎么配才强
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 兵种三角与克制矩阵 | 克制环与胜率矩阵(S) |
| 4.2 | 阵容加成与组合强度 | 组合加成与强度评分 |
| 4.3 | 强度评估与平衡迭代 | 强度扫描与平衡迭代(S+B) |
第 5 章 掉落与概率——运气怎么被设计
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | 掉落表与概率分布 | 掉落表结构与分布 |
| 5.2 | 伪随机与保底机制 | 伪随机与保底 pity(S) |
| 5.3 | 期望、方差与体验区间 | 期望方差与体验带(S) |
第 6 章 抽卡与礼包数值——要花多少钱
| 节 | 文章 | 核心内容 |
|---|---|---|
| 6.1 | 卡池结构与概率公示 | 卡池结构与公示口径 |
| 6.2 | 期望成本与「多少抽出货」 | 期望成本与出货分布(S) |
| 6.3 | 礼包性价比与价值锚点 | 礼包性价比与锚点(S) |
第 7 章 匹配与分段——跟谁打
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 匹配分与 ELO / Glicko | 匹配分模型与收敛 |
| 7.2 | 分段与段位设计 | 段位切分与分布目标 |
| 7.3 | 匹配公平性仿真 | 匹配公平性仿真(S+B) |
第 8 章 赛季数值膨胀控制——怎么跨赛季不失控
| 节 | 文章 | 核心内容 |
|---|---|---|
| 8.1 | 跨赛季膨胀的成因与代价 | 膨胀成因与代价核算 |
| 8.2 | 重置、继承与压缩 | 重置继承压缩方案(S) |
| 8.3 | 老玩家回归与新玩家追赶 | 回归与追赶曲线(S) |
第四部分:商业化与赛季运营(第 9–16 章)
第 9 章 付费点设计——玩家为什么掏钱
| 节 | 文章 | 核心内容 |
|---|---|---|
| 9.1 | 付费动机与付费点布局 | 付费动机与付费点布局 |
| 9.2 | 首充、月卡与通行证 | 三类常规付费点设计 |
| 9.3 | 付费节奏与体验保护 | 付费节奏与体验保护线 |
第 10 章 定价与折扣——卖多少钱
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 定价锚点与档位设计 | 定价锚点与档位梯度 |
| 10.2 | 折扣、限时与稀缺 | 折扣与稀缺性仿真(S) |
| 10.3 | 价格弹性与副作用 | 价格弹性与副作用 |
第 11 章 LTV / ARPU 与回本——这笔账划不划算
| 节 | 文章 | 核心内容 |
|---|---|---|
| 11.1 | 漏斗与留存曲线 | 漏斗与留存曲线 |
| 11.2 | LTV 建模与回本周期 | LTV 建模与回本(S) |
| 11.3 | CAC 与买量口径 | CAC 口径与不可复现边界(X) |
第 12 章 留存与漏斗分析——人怎么留下来
| 节 | 文章 | 核心内容 |
|---|---|---|
| 12.1 | 新手漏斗与 D1/D7/D30 | 新手漏斗与留存口径 |
| 12.2 | 流失预警与召回 | 流失预警与召回(S) |
| 12.3 | 留存与付费的联合分析 | 留存与付费联合分析(S) |
第 13 章 A/B 实验与灰度——怎么证明改对了
| 节 | 文章 | 核心内容 |
|---|---|---|
| 13.1 | 实验设计与分流 | 实验设计与分流 |
| 13.2 | 显著性、样本量与常见陷阱 | 显著性与样本量(S) |
| 13.3 | 从实验到决策 | 从实验结果到决策 |
第 14 章 活动与赛季制——节奏怎么排
| 节 | 文章 | 核心内容 |
|---|---|---|
| 14.1 | 赛季结构与节奏 | 赛季结构与节奏 |
| 14.2 | 活动模板与奖励预算 | 活动奖励预算仿真(S) |
| 14.3 | 赛季结算与过渡 | 赛季结算与过渡 |
第 15 章 联盟与 GVG 运营——一群人怎么打
| 节 | 文章 | 核心内容 |
|---|---|---|
| 15.1 | 联盟生态与社交压力 | 联盟生态与社交压力 |
| 15.2 | GVG 匹配与战场设计 | GVG 匹配与战场仿真(S) |
| 15.3 | 联盟健康度指标 | 联盟健康度指标 |
第 16 章 综合:一份可交付的 SLG 设计案——把两卷装起来
| 节 | 文章 | 核心内容 |
|---|---|---|
| 16.1 | 把两卷装配成完整设计案 | 两卷装配成设计案 |
| 16.2 | 全链路仿真验收 | 全链路仿真验收(S/P/B) |
| 16.3 | 原型回放与设计案交付 | 原型回放与交付 |
附录
| 篇目 | 核心内容 |
|---|---|
| 附录 C:全书公式、参数与数据集索引 | 两卷公式、config/ 参数与 out/ 数据集总索引(S+B) |
三条阅读路径
路径 A:数值策划的建模课(第 1–8 章顺序读)
从属性与战力模型开始,经成长曲线、战斗数值、兵种阵容、掉落概率、抽卡礼包、匹配分段,到赛季膨胀控制。这条路径回答「一个玩家的强度是怎么长出来的、一次交战是怎么算出来的」。读完你能跑出战力校验表、克制胜率矩阵和抽卡期望成本。
路径 B:商业化与运营课(第 9–16 章顺序读)
从付费点设计开始,经定价折扣、LTV 与回本、留存漏斗、A/B 实验、活动赛季、联盟 GVG,到设计案装配。这条路径回答「钱怎么赚、人怎么留、赛季怎么收」。读完你能跑出一条 LTV 曲线和一个赛季的膨胀诊断。
路径 C:只看商业化(第 9 → 11 → 12 章)
如果你只想搞懂付费与回本这一件事,读第 9 章(付费点)、第 11 章(LTV 与回本)、第 12 章(留存漏斗)。这三章是商业化部分的核心,其余章节可以按需回填。
常见问题速查
| 你想解决的问题 | 看哪节 |
|---|---|
| 战力公式该怎么定? | 1.2 |
| 新版本加了属性,公式还成立吗? | 1.3 |
| 成长曲线该用指数还是分段? | 2.1 |
| 想反推「玩家第几天满级」怎么办? | 2.3 |
| 伤害公式怎么设减伤上限? | 3.1 |
| 暴击该不该有? | 3.2 |
| 兵种克制倍率怎么定? | 4.1 |
| 阵容加成会不会失衡? | 4.3 |
| 掉落概率怎么设才不挨骂? | 5.3 |
| 保底该设多少抽? | 5.2 |
| 抽满一个卡池期望要多少钱? | 6.2 |
| 礼包值不值这个价? | 6.3 |
| 匹配分该用 ELO 还是 Glicko? | 7.1 |
| 匹配公不公平怎么验证? | 7.3 |
| 赛季重置会不会把老玩家赶走? | 8.3 |
| 首充、月卡、通行证怎么排? | 9.2 |
| 打折会不会伤收入? | 10.3 |
| 多久能回本? | 11.2 |
| 留存掉了怎么查? | 12.1 |
| 实验结果该怎么看? | 13.2 |
| 活动奖励发多少合适? | 14.2 |
| GVG 战场怎么设计? | 15.2 |
| 整个设计案怎么装起来? | 16.1 |
环境准备
正文里的代码块都可以在本机复现。需要的东西只有两样,下面这段 S 层脚本会替你确认,并盘点卷二共享配置的规模:
# file: sim/num_readiness.py
# tier: S
# verify: python3 sim/num_readiness.py --config config/
"""卷二环境与配置自检:确认运行时可用,并盘点卷二共享配置的规模。"""
from __future__ import annotations
import argparse
import json
import os
import shutil
import subprocess
import sys
def load(path: str) -> dict:
with open(path, encoding="utf-8") as fh:
return json.load(fh)
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--config", default="config/")
args = ap.parse_args()
ok = True
try:
import numpy
import pandas
print(f"python {sys.version.split()[0]} numpy {numpy.__version__} pandas {pandas.__version__}")
except ImportError as e: # pragma: no cover
ok = False
print(f"python 缺依赖:{e}(需要 numpy 与 pandas)")
node = shutil.which("node")
if not node:
ok = False
print("node 未安装(需要 Node 26 或更高)")
else:
ver = subprocess.run([node, "-v"], capture_output=True, text=True).stdout.strip()
major = int(ver.lstrip("v").split(".")[0])
note = "" if major >= 26 else " (低于 26,原生 TypeScript 可能不可用)"
print(f"node {ver}{note}")
ok = ok and major >= 26
season = load(os.path.join(args.config, "season.json"))
pricing = load(os.path.join(args.config, "pricing.json"))
print(f"season 赛季 {season['seasonLengthDays']} 天 / 准备 {season['prepDays']} 天 / 结算 {season['settlementHours']} 小时")
print(f"pricing 档位 {len(pricing['tiers'])} 档 / 折扣 {len(pricing['discount']['tiers'])} 档")
print("卷二能力阶梯:战力公式 → 成长曲线 → 概率期望 → 商业化 → 赛季运营")
print("OK 环境就绪" if ok else "FAIL 环境不满足")
return 0 if ok else 1
if __name__ == "__main__":
raise SystemExit(main())
本机实跑输出:
python 3.14.6 numpy 2.5.1 pandas 3.0.3
node v26.5.0
season 赛季 60 天 / 准备 3 天 / 结算 24 小时
pricing 档位 5 档 / 折扣 3 档
卷二能力阶梯:战力公式 → 成长曲线 → 概率期望 → 商业化 → 赛季运营
OK 环境就绪
- Python 3 加
numpy与pandas:S 层仿真用。拟合用 numpy 手写最小二乘(本机没装 scipy)。 - Node 26 或更高:P 层原型直接跑 TypeScript,不需要
tsc、不需要npm install、不需要package.json。断言用 Node 内置的node --test。
图表不用 matplotlib——本套的 SVG 是纯 Python 用标准库 xml.etree 画出来的,零依赖、可复现。环境与复现的完整说明见卷一的附录 A
,本卷的公式与参数总索引见附录 C
。
明确不在本套范围内
为了让边界清楚,下面这些这套书不讲:客户端表现与美术管线、UI 视觉设计、引擎与渲染、服务端实现(站内已有《MMO 服务器开发》四卷本 )、买量与投放实操、真实竞品后台数据、法务与合规、发行与渠道商务。
产品架构、系统地图、功能架构与经济闭环在卷一《产品架构与经济系统》,共 15 章 45 节。
本页是全书目录。可以从卷一《产品架构与经济系统》 开始读,或直接进入第 1 章 1.1 属性分类与派生属性 。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。