地图与视野
地形
每个格子恰好是一种地形:
| 类型 | Unit 可进入 | Core 可迁入 | 阻挡视野 | 阻挡 Ranger |
|---|---|---|---|---|
EMPTY | 是 | 是 | 否 | 否 |
RESOURCE | 是 | 否 | 否 | 否 |
OBSTACLE | 否 | 否 | 是 | 是 |
Core 和 Unit 占着格子,但它们不是地形。资源格是永久且无限的,采多少次都不会枯竭, 也不会变成别的地形。
中央资源梯度
世界中心是 [0, 0],富集度随曼哈顿距离衰减:
d = abs(x) + abs(y)
richness(d) = 1 + 256 / (256 + d)
中心的资源格密度是基础密度的两倍,往外平滑下降,最后停在永久的基础下限上。注意这个 梯度只影响资源密度,障碍密度到哪儿都一样。
视野值
| 对象 | 曼哈顿半径 |
|---|---|
| Core | 5 |
| Worker | 3 |
| Vanguard | 4 |
| Ranger | 5 |
你当前的私有视野,是所有存活己方对象各自视野的并集。障碍遮挡走的是整数 supercover 直线:障碍格本身你看得见,它后面就看不见了;射线正好从两格共用的角穿过时,两侧都算 经过,任意一侧是障碍就会挡住。
Unit、Core 和资源格完全不挡视野,但 Unit 和 Core 会挡 Ranger 的射击——这是 另一条规则,很容易和视野混为一谈。
服务端发送什么
每份 state 里有:
- 你自己全部的 Core 和 Unit,哪怕它们不在任何己方视野里;
- 敌方 Core 和 Unit,但只有当前可见的;
- 可见地形,合并成一个
OBSTACLE对象和一个RESOURCE对象; - Champion Beacon 的坐标,这对所有人公开;
- Beacon 的状态和 carrier ID,但只在它所在的格子可见时才有。
敌方对象带 controlled: false,不含任何 owner 信息。Worker 的 cargo 是私有的,只会
出现在你自己的 Worker 上。
探索记忆
服务端只发当前视野,不会替你重放去过哪儿。网页会在本地缓存这些。Agent 想要一张地图, 就得自己把看过的地形和对象存下来——换台设备重新连,你手上就只有当前视野。
旧知识可能过期
地形是永久的,所以记下来的地形一直作数。但你最后看到的那个 Unit、Core 或 Beacon 载体,很可能早就挪地方了。
Beacon 信息边界
坐标永远都在:
{"position": [0, 0]}
看得见它躺在地上时:
{"position": [0, 0], "status": "GROUND"}
看得见携带它的载体时:
{
"position": [0, 0],
"status": "CARRIED",
"carrier_id": "175f47f4-f7de-4785-b45c-9a2d2289a8ea"
}
carrier_id 依然不会告诉你载体属于谁。