如果把 CS/CSGO 地图先忽略具体美术、掩体和高度,只看“玩家如何从一个战术区域移动到另一个战术区域”,它基本可以被看成一个带权、有几何嵌入、并且具有阵营非对称性的图。
最基础的抽象就是:
\[G=(V,E)\]
其中:
\(V\):关键战术区域,例如出生点、包点、交火点、控制点、转点枢纽
\(E\):区域之间可以通行的路径
边权 \(w(e)\):通过这条路径所需的时间
节点/边还可以附加更多属性:视野、掩体、宽度、危险度、投掷物影响、声音传播等
比如经典的 Dust2,极度简化后其实可以画成:
A点
/ \
A大 小道
| |
T出生 -- 中路 -- CT出生
| |
B洞 ---- B点
这已经非常接近一个图论问题了。
但真正有意思的是:地图设计里的很多经验法则,其实可以分别对应到不同的数学问题。
1. “转点时间” = 最短路径问题
地图里最基础的量之一就是:
从区域 A 到区域 B 最快需要多久?
这就是经典的 shortest path。
\[d(u,v)=\min_{p:u\rightarrow v}\sum_{e\in p}w(e)\]
比如:
T 出生 → A 点
T 出生 → B 点
CT 出生 → A 点
CT 出生 → B 点
A 点 → B 点
这些距离之间的比例,实际上决定了大量地图节奏。
例如设:
\[d(T,A)=18s\]
\[d(CT,A)=10s\]
那么 CT 有约 8 秒建立防守阵地。
而如果:
\[d(A,B)=20s\]
那么假打 A 后转 B 的成本就很高。
所以很多所谓的“地图节奏”,其实可以首先转化成一个距离矩阵:
\[D= \begin{pmatrix} d(T,A)&d(T,B)&d(T,M)\\ d(CT,A)&d(CT,B)&d(CT,M)\\ ... \end{pmatrix}\]
地图设计师实际上是在调这个矩阵。
2. “这个位置为什么这么重要?” = 中介中心性
CS 地图里有一些位置一旦控制,整个地图都会发生变化。
比如:
Mirage 中路
Dust2 中路
Inferno 香蕉道
Ancient Donut / Mid
图论里有一个很适合描述这种现象的指标:
Betweenness Centrality,中介中心性
\[C_B(v)= \sum_{s\neq v\neq t} \frac{\sigma_{st}(v)}{\sigma_{st}}\]
其中:
\(\sigma_{st}\):从 \(s\) 到 \(t\) 的最短路径数量
\(\sigma_{st}(v)\):经过节点 \(v\) 的最短路径数量
直觉就是:
有多少重要路线必须经过这个地方?
如果一个节点的 betweenness 极高,它就是一个天然的战略枢纽。
所以“抢中路为什么重要”,可以部分数学化为:
\[C_B(\text{Mid}) \gg C_B(\text{其他区域})\]
但这里还有一个重要设计问题:
如果:
\[C_B(\text{Mid}) \rightarrow 1\]
也就是几乎所有路线都必须经过中路,那么地图通常会变得过于单一。
所以设计好的地图往往是:
中路很重要,但不是唯一答案。
3. “一条路被烟封了是不是整个进攻都没了?” = 最小割问题
这是我觉得和 CS 地图设计特别契合的一个概念:
Minimum Cut。
假设你想从 T 出生到 A 点。
如果只存在:
T ---- 通道 ---- A
那么只要控制“通道”这一条边,就完全阻断进攻。
这个图的 edge connectivity 很低。
而如果:
路线1
/ \
T --- --- A
\ /
路线2
那么至少需要控制两个入口。
可以问:
\[\lambda(T,A)=?\]
即:
至少封锁多少条独立路径,才能完全切断 T 到 A 的连接?
这其实非常像 CS 里的防守结构。
一个包点如果只有一个 chokepoint:
T ---> 门 ---> Site
通常会很难设计得有趣。
因为防守方只需要集中资源控制一个 cut。
而如果:
A Main
/
T ----- A Site
\
Connector
那么进攻者就可以制造多方向压力。
4. “为什么夹击很强?” = 节点不相交路径
图论里有个非常漂亮的概念:
vertex-disjoint paths。
如果 T 到 A 有两条不共享关键节点的路径:
\[P_1:T\rightarrow A\]
\[P_2:T\rightarrow M\rightarrow Connector\rightarrow A\]
那么就可以形成真正意义上的 split。
比如:
A Main
/ \
T ------- A
\ /
Mid--Connector
这其实是很多 CS 地图最核心的拓扑结构:
\[Spawn \rightarrow \begin{cases} Main\\ Mid\rightarrow Connector \end{cases} \rightarrow Site\]
所以 CS 里的:
A split
B split
mid control
connector control
在图论语言里,很多时候就是在争夺:
独立路径的数量和控制权。
甚至可以直接用 Menger's theorem 理解:
两个区域之间有多少条互不共享节点的路径,就等价于至少需要控制多少个节点才能完全切断它们。
这和 chokepoint 设计非常接近。
5. “为什么有些地图转点特别舒服?” = 图的直径
定义:
\[diam(G)=\max_{u,v}d(u,v)\]
即整个地图中最远两个战术节点之间的最短距离。
如果地图 diameter 太大:
转点慢,信息价值持续时间长,赌博防守成本高。
如果 diameter 太小:
防守转点极快,进攻假打价值下降。
因此地图宏观尺度其实可以理解为控制:
\[diam(G)\]
但更重要的是几个局部距离:
\[d(A,B)\]
\[d(M,A)\]
\[d(M,B)\]
\[d(CT,A),d(CT,B)\]
它们共同决定 rotational geometry。
6. “地图是不是太线性?” = 环路数量
一个极端的坏地图可能是:
T -- A -- B -- C -- CT
这是树状甚至近似线性的。
没有多少绕路选择。
而优秀 CS 地图通常存在很多 cycle:
Mid
/ \
T -- -- A
\ /
B -------
玩家可以:
\[A\rightarrow Mid\rightarrow B\rightarrow A\]
形成闭环。
Cycle 带来的东西很多:
回防路线
绕后
fake
lurk
信息博弈
二次转点
所以可以用一个很简单的量:
\[\mu=|E|-|V|+1\]
对于连通图,这个是 cycle rank。
它大致表示图里有多少个独立环。
当然不是“越高越好”。
太低:
地图线性。
太高:
路线过于复杂,信息价值降低,防守边界模糊。
所以可能存在某种“合适的 cycle density”。
7. CS 地图其实是“两张图”
因为 CT 和 T 使用同一空间,但路径价值完全不同。
比如同一条路径 \(e\):
\[w_T(e)\neq w_{CT}(e)\]
并不一定是移动速度不同,而是因为:
CT 经过这里可能安全
T 经过这里需要清很多角
CT 可以预瞄
T 需要暴露在多个视线里
某个位置容易被 AWP 控制
所以更准确可以定义:
\[G_T=(V,E,W_T)\]
\[G_{CT}=(V,E,W_{CT})\]
同样一张地图,对两个阵营来说实际上是不同的 weighted graph。
这就是 CS 地图设计最有趣的一点。
8. 边权甚至不是常数
简单模型:
\[w(e)=travel\ time\]
更真实的模型则应该是:
\[w(e)= \alpha T(e) +\beta R(e) +\gamma I(e) +\delta U(e)\]
其中:
\(T(e)\):移动时间
\(R(e)\):死亡风险
\(I(e)\):暴露信息量
\(U(e)\):utility 消耗
比如 Banana 可能只有 6 秒路程,但因为要吃:
HE
molotov
flash
spam
实际“成本”非常高。
所以游戏里的“距离”并不是欧几里得距离:
\[d_{game}(A,B)\neq d_{euclidean}(A,B)\]
更像一个风险加权的最短路径问题。
9. 但单纯图论还不足以描述 CS 地图
这是最重要的限制。
如果只画:
A -- B -- C
你会丢失很多 CS 最重要的信息:
谁先看到谁
掩体
架枪角度
peek advantage
路径宽度
高低差
投掷物
声音
穿墙
交火距离
所以我会把一张 CS 地图拆成至少 三张相互耦合的图:
Movement Graph
描述:
人能怎么走。
Visibility Graph
如果两个区域之间可以直接形成视线:
\[(v_i,v_j)\in E_{vision}\]
Utility Graph
描述:
烟、火、闪能够影响哪些区域。
于是一个区域可能:
Movement:
A ---- B
Visibility:
A ========= C
Utility:
D ~~~~~~~~> B
虽然 A 和 C 不能直接走过去,但它们可能能交火。
这就比单纯的 path graph 准确很多。
10. 把“CS 地图设计”抽象成一个数学优化问题
可以写成:
\[\max_G \quad F( RouteDiversity, TimingBalance, StrategicDepth, InformationValue, CombatQuality )\]
subject to:
\[d(T,A)-d(CT,A)\in[a_1,a_2]\]
\[d(T,B)-d(CT,B)\in[b_1,b_2]\]
\[k(T,A)\ge 2\]
\[k(T,B)\ge 2\]
\[C_B(M)\in[c_1,c_2]\]
\[diam(G)\in[d_1,d_2]\]
也就是说我们希望:
包点有至少两种进攻方式,中路具有战略价值,但不能成为唯一必争节点,CT 有时间建立防守,但不能转点快到让 fake 失去意义,整个地图有足够环路产生绕后、lurking 和转点,但又不能复杂到信息毫无价值。
这已经非常接近一个多目标图优化问题。
总结
你的直觉其实可以继续往前推一步:
CS 地图不是“把几个交火点用路径连接起来”,而是在设计一个有权重、有环、有瓶颈、有阵营非对称性的网络,然后再把这个网络嵌入二维/三维几何空间。
甚至可以反过来做地图设计:
先生成图 → 检查图论性质 → 再把图 embedding 成实际地图。
这会很像 procedural level generation。
而且这里面其实很可能能发展出一套挺系统的“CS 地图拓扑理论”:用 最短路径、minimum cut、betweenness centrality、cycle rank、vertex-disjoint paths 这 5 个指标,就已经能解释相当大一部分“为什么某些 CS 地图结构好玩”。