Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

回合

每位玩家都在回合结算之前,根据自己的观测选择动作。你只有在下一次观测中才能看到对手的行动,并作出反应。

本页的回放都是在 6 × 8 地图上进行的简短脚本对局,由天梯所用的卡带运行。每段回放都从它要展示的时刻的前一回合打开,所以按一下右方向键就能播放。查看器把死亡画成蚂蚁死亡格子上的空心圆环,并从每个击杀它的敌方蚂蚁引出一条线(两只互相击杀的蚂蚁会画出两条在中点相接的线);被摧毁的蚁丘画成虚线方框。

六个步骤,按顺序

步骤结算后果
1. 移动执行移动,然后移除碰撞的蚂蚁己方蚂蚁之间也会互相撞死
2. 战斗在幸存者之间结算战斗死在蚁丘上的蚂蚁摧毁不了蚁丘
3. 摧毁幸存的敌方蚂蚁摧毁它们所站的蚁丘被摧毁的蚁丘不再出生蚂蚁
4. 出生储存的食物在空闲的蚁丘上变成蚂蚁被占据的蚁丘阻碍扩张
5. 采集附近的食物进入蚁巢这些食物要到之后的回合才能出生蚂蚁
6. 新食物放置新的食物蚂蚁可以在之后的回合采集

这些步骤之后,引擎把每个蚁群的视野并入其已知信息,推进回合计数,并检查结束条件。

移动与碰撞

蚂蚁每回合向北、东、南、西移动一格,或者原地不动。引擎把走进水域或走上食物的移动视为原地不动:两者都拒绝该目的地,蚂蚁留在原处。没有指令的蚂蚁同样原地不动。移动在两个方向的边缘都会环绕;见世界。

引擎在每只蚂蚁的最终目的地检查碰撞。如果两只或更多蚂蚁到达同一格,它们全部死亡,不论属于谁。走上一只原地不动的己方蚂蚁也算碰撞。两只相邻的蚂蚁互换位置不算碰撞,因为它们的目的地不同;战斗仍会在它们的新位置上进行。

碰撞只会发生在你自己的蚂蚁之间。两只有可能到达同一格的敌对蚂蚁,上一回合最多相隔两格,距离平方最远为 4,所以它们早已在彼此的攻击范围内,而两只互在范围内的敌对蚂蚁绝不可能都在战斗中幸存。唯一的例外是在那场战斗之后出生的蚂蚁,因为出生在回合中晚于战斗。

指令数组按位置对应,顺序与 mine 相同:按格子行优先排列,与你的蚂蚁出生的先后无关。第 0 项是你占据的最上面一行里的蚂蚁,同一行取最左边的,而这每回合都可能是不同的蚂蚁。

红方采集蚁丘下方的食物,向东走一步,一只新蚂蚁出现在它身后的蚁丘上,所以在第 2 回合红方的两只蚂蚁并排站立,蚁丘上的那只是第 0 项。按右方向键:第 3 回合把第 0 项向东送到另一只蚂蚁所在的格子。两只蚂蚁都死在那里,同一格上有两个圆环,而两次死亡都没有击杀者。蓝方始终不动。红方没有蚂蚁了,引擎把红方的蚁丘算作被蓝方摧毁,并结束对局。

战斗

环绕后的距离平方不超过 5 的敌方蚂蚁就在攻击范围内。碰撞处理之后,引擎数出每只蚂蚁攻击范围内的敌方蚂蚁数量;这个数就是该蚂蚁的集火值。己方蚂蚁不计入。

只要范围内有任何一只敌方蚂蚁的集火值小于或等于自己的,蚂蚁就会死亡。只有当它面对的每只敌方蚂蚁集火值都比它高,它才能幸存;范围内没有敌方蚂蚁的蚂蚁则安然度过战斗。

引擎先算出所有集火值,再移除任何蚂蚁,所以将死的蚂蚁仍然计入本回合的比较,死亡不会连锁。

移动后的位置集火值结果
一对一,互在范围内都是 1都死亡
两只己方蚂蚁各自在同一敌方蚂蚁的范围内,没有其他敌人己方各 1;敌方 2己方幸存;敌方死亡
二对二,全部互在范围内都是 2全部死亡
一行四个相邻格子:A A B B外侧 1;内侧 2内侧死亡;外侧幸存

最后两种情况蚂蚁数量相同,结果却不同。你的模型除了衡量双方兵力,还要衡量位置和支援。

两只蚂蚁进入彼此的攻击范围,而双方都没有支援,那么集火值相等,两只都死亡。你永远看不到一只蚂蚁与范围内的另一只对峙,因为距离拉近的那一回合,战斗就已结算。

第 1 回合,两只蚂蚁各自离开蚁丘一步,相隔四列,距离平方为 17,在 5 的范围之外。按右方向键:第 2 回合红方向东一步,蓝方向西一步,距离平方变为 5,两只蚂蚁互相击杀:每种颜色各有一条线从它的圆环引出,两条线在中点相接。对局就此结束,地图上没有蚂蚁了。

支援会改变结果,而且你能看到。两只蚂蚁在同一回合进入一只落单敌方蚂蚁的范围,它们各自面对一个敌人,而它面对两个:它的集火值是 2,它们的是 1,所以它死亡,它们两只都活下来。如果相隔一回合到达,就是上面的情况重演两次。

红方采集蚁丘旁的食物并出生第二只蚂蚁,蓝方则从自己的蚁丘向西走。第 2 回合,红方两只蚂蚁排成一列,蓝方距离较近的那只两格。按右方向键:第 3 回合红方向南一步,蓝方向西一步,这让蓝方同时进入两只红方蚂蚁的范围。两条线通向蓝方的圆环,没有一条通向红方的:蓝方面对两个敌人而死,每只红方蚂蚁面对一个而活。蓝方没有蚂蚁了,引擎把蓝方的蚁丘(虚线方框)算作被红方摧毁,并以 3–0 结束对局。

摧毁蚁丘

幸存的敌方蚂蚁站在尚存的蚁丘上就会摧毁它,获得 +2 分,蚁丘的主人失去 1 分。在碰撞或战斗中死亡的进攻者摧毁不了任何东西。你自己的蚂蚁不能摧毁你的蚁丘。

最后这条规则正是蚁丘难以攻下的原因。站在自己蚁丘上的蚂蚁覆盖距离平方 5 以内的每一格,直线上可达两格之外,所以单独一只进攻者踏入这个圈子就会与防守者同归于尽,摧毁不了任何东西。要攻下有防守的蚁丘,你需要支援,或者等防守者离开。下面的回放展示第二种情况:脚本先让蓝方的蚂蚁走离蚁丘,于是红方未经战斗就摧毁了蚁丘。

蓝方的蚂蚁在前三回合向北走了三格并停在那里,离开了自己蚁丘的范围。红方向南走了三格,正沿着蓝方所在的行向东走。第 6 回合它离蚁丘只有一格。按右方向键:第 7 回合红方站上蚁丘,蚁丘因为已经不复存在而画成虚线方框,比分从 1–1 变为 3–0,摧毁者 +2,主人 −1。没有敌方蚁丘尚存,最终名次再也不会改变,所以引擎以 rank_stabilized 结束对局。红方自己的蚁丘毫发无损,仍然可以出生蚂蚁。

食物与新蚂蚁

每单位储存的食物在一个无蚂蚁占据的己方蚁丘上出生一只蚂蚁。有多个蚁丘空闲时,最久没有被“触碰”的那个先出生;蚁丘在出生蚂蚁时,以及有自己的蚂蚁站在上面时,算作被触碰。若相同,则取地图文件中先列出的蚁丘;地图文件列出蚁丘的方式,保证每个席位的第一个蚁丘都是地图上同一个蚁丘按偏移量移动后的位置。每个蚁丘每回合最多出生一只蚂蚁,因为新蚂蚁随即占据了它。没有蚁丘空闲时,食物在蚁巢里等待。

采集使用的半径平方为 1:食物所在的格子和它正交相邻的四格。如果只有一个蚁群有幸存的蚂蚁在范围内,它就收下这份食物;范围内没有蚂蚁,食物就留在原地。多个蚁群争夺的食物,引擎会将其销毁。但在当前的攻击半径和采集半径下,这种情况不可能出现,因为敌对的蚂蚁不可能都在同一份食物的采集范围内幸存。

本回合采集的食物最早要到下一回合才能出生蚂蚁,所以一种有效的扩张方式是:一只蚂蚁走下蚁丘,同时另一只在附近采集。

出生还在战斗之后进行,这对防守方有利:防守者死在自己蚁丘上的蚁群,可以在同一回合用蚁巢里已有的食物补上一只。蚁巢空了之后,蚁丘就不再产出防守者。

第 1 回合红方采集蚁丘旁的食物:那一帧里食物消失了,但没有蚂蚁出现。按右方向键:第 2 回合采集者走下蚁丘,新蚂蚁站在蚁丘上。某一回合采集的食物在下一回合变成蚂蚁,绝不会更早。蓝方展示规则的另一半。它同样在第 1 回合采集了蚁丘旁的食物,却始终没有出生新蚂蚁,因为它自己的蚂蚁一直站在新蚂蚁唯一能出现的格子上。

不发指令

游戏让没有指令的蚂蚁留在原地。模型调用失败则是另一回事:平台把缺失或失败的回答记为一次判罚,以不移动代替,并在达到判罚上限时将该席位判负。要让每一回合的调用都成功:你的适配器必须能求值,你的计算图必须在时限内返回它声明的策略头。让每只蚂蚁都原地不动的策略同样是一种回答,只需给每只蚂蚁的 - 打最高分。见动作。