资源分布的均衡性(Poisson Disk Sampling)探索
在 SLG 游戏的外围州等初始区域,资源分布的均衡性对玩家体验至关重要 —— 既需要随机性避免单调,又要防止资源过度密集或稀疏导致的策略失衡。
泊松圆盘采样(Poisson Disk Sampling)
正是解决这一问题的理想方案,而米切尔最佳候选算法(Mitchell's Best-Candidate Algorithm)
则是实现泊松圆盘分布的高效近似方法。
什么是泊松圆盘采样?
比如下图,左边是随机生成的点,右边是泊松盘采样生成的点。
泊松圆盘采样的核心特性是:任意两个采样点之间的距离不小于预设阈值(最小距离), 任何两个点的距离都不会隔得太近。
这一特性完美适配 SLG 初始区域的资源分布需求
- 既能保证资源点的随机性,
- 又能避免聚集(防止玩家扎堆争夺)或过度分散(避免玩家跑图成本过高)。
- 玩家出生点选择也可以参考这种算法,保证每位玩家两两之间的初始分布不会过近
在二维空间中,这种分布类似棋盘上的棋子摆放:每个棋子周围一定范围内不会有其他棋子,但整体布局仍保持随机自然的视觉效果。
米切尔最佳候选算法:泊松圆盘的高效近似实现
米切尔算法通过 “候选点竞争” 机制,在保证采样点间距的同时,高效生成近似泊松圆盘分布的点集。
- 其核心逻辑是:为每个待生成的点随机生成多个候选位置,选择与已有采样点距离最远的候选点作为最终采样点。
算法步骤(以 SLG 资源点生成为例):
-
初始化参数
- 设定区域范围(如外围州的地图边界: x∈[x_min, x_max] , y∈[y_min, y_max] )
- 设定资源点最小间距 r (确保平衡性,如 r=50 游戏单位)
- 设定候选点数量 k (通常取 30-50, k 越大越接近理想泊松分布,但性能消耗略高)
-
生成第一个采样点
- 在区域内随机选择一个初始点(如第一个资源点),加入采样点集合 S 。
-
迭代生成后续采样点
- 对于每个待生成的点,在区域内随机生成 k 个候选点(需在地图边界内)。
- 对每个候选点,计算它与 S 中所有已有采样点的最小距离 d 。
- 从 k 个候选点中,选择 d 最大的候选点(即与已有资源点最远的点)。
- 若该候选点的最小距离 d ≥ r (满足最小间距要求),则将其加入 S ;否则,放弃该轮生成(避免资源点过近)。
-
终止条件
- 当生成的采样点数量达到预设资源点总数,或连续多轮无法生成符合条件的点时,停止迭代。
伪代码实现(简化