战地:起源

一、背景介绍

《战地:起源》是以原生Python为引擎的实时策略游戏。在游戏当中,两名玩家将分别扮演红方和蓝方,并且相互对抗。双方的目的均为彻底消灭对方,并取得最终的胜利。

赤色帝国的人民最近很烦恼,因为隔壁的深蓝帝国的人总是在边境叫骂。

为了尊严,赤色帝国毅然向深蓝帝国宣战。

这是赌上了族谱的战争。这场战争必须胜利。不惜一些代价。

二、环境

在《战地:起源》当中,玩家需要编写代码来控制己方的机器人。比赛是回合制的,并且每场比赛将有1000回合。每一个回合中,每一个仍然在场上的机器人将有一次运行的机会。

① 地图

每一场比赛的地图将是一副二维的、大小在(32*32)与(64*64)之间的平面直角坐标系。

地图的每一格会有不同的可通过性。可通过性是一个在0.1与1.0之间的小数,可通过性越高代表当前的格子越容易通过。

地图上将会有一些基地作为建筑存在。建筑不可被摧毁、创造,只能够被易主。在游戏开始时,双方将会有1到3个初始基地,地图上最多将会有6个中立的基地。

公平起见,地图上的一切元素都是对称的。

② 能量

双方所拥有的资源被称为能量。每个单位都会有自己的能量储备并且基地之间的能量不能共享。能量只能由基地或者特殊兵种产出。

③ 充能

每一回合,双方的基地都会使用一部分能量来给最终兵器充能。花费最多能量的队伍将会产生能量共鸣,其最终兵器将会累计一个能量点。

三、单位

每个单位将会在一份独立的代码拷贝上运行,并且被分配一个随机的、不重复的、不小于10000的独有ID。

对于每个单位,行动包括移动和它的独特能力。除被动能力之外的每次行动都会导致冷却值上升,并且单位只能在其冷却值小于1时执行行动。

不同类型的单位具有不同的基本冷却值,执行行动后单位的冷却值将增加基本冷却值除以当前地图方块的可通过性。

无论单位是否选择执行动作,它的冷却值在每一回合都会减一。

① 属性

每个单位都具有能量值与防护值两个属性。玩家的基地可以通过转移自己的部分能量来制造除基地以外的单位。能量被表示为E。新建的士兵和无人机将会有10点初始冷却值。

O 基地 士兵 矿工 无人机
能量值 不可创建 E E E
最低能量值 1 1 1
初始防护值 当前能量值 ⌈1.0E⌉ ⌈1.0E⌉ ⌈0.7E⌉
初始冷却值 0 10 0 10
基本冷却值 2.0 1.0 2.0 1.5
行动半径 2 9 0 12
感知半径 40 25 20 30
探测半径 40 25 20 40
真实视野
能力 建造、充能 入侵 挖矿、进化 分析

注意:平方距离

为了方便起见,游戏中的一切距离都以平方距离计算。举例说明,两个x坐标相差3格,y坐标相差4格的位置的平方距离等于3*3+4*4=25,即实际距离(欧几里得距离)的平方根。

本文档中所提到的一切“距离”均指平方距离。

② 移动

除基地以外的单位可以向相邻的、未被占据的位置移动。在满足以下条件时,移动将会被成功执行:

一、单位的冷却值小于1。

二、目标位置与当前位置相邻(即周围的8格)。

三、目标位置没有被其他机器人占据。

移动后,单位的冷却值将增加。

③ 感知、探测和视野

地图上的每一个方块都有可通过性,每一个单位都有包括类型、能量值、防护值在内的属性。

所有的单位都可以感知周围方块的可通过性和在其上方的单位。每种单位都有一个感知距离,并且只能感知在这个范围之内的内容。

士兵和矿工并不具备真实视野,这意味着他们无法分辨士兵和矿工。在它们的感知下,所有的矿工都将被视为士兵。

与此同时,单位还可以探测周围的机器人,只获得它们的位置而非更加详细的信息。无人机有比感知范围更大的探测范围,所以它们能够探测到更远距离的单位。

④ 单位种类

士兵

士兵搭载了最先进的移动模块和最强力的入侵模块——这为它提供了其它兵种所没有的高机动性。士兵将会在地图上游走,并且可以选择发动一次在行动半径内的入侵。不过,因为技术的不足,士兵将会在发动入侵以后被彻底损毁。

感知:将会把矿工视为士兵。

入侵(主动能力):在行动范围内发起一次入侵(入侵的作用半径可选并且小于等于行动半径),作用范围内的所有单位将会被影响:

  • 决定发动入侵后,单位的能量将立即减10。如果单位的能量小于10,入侵将完全无效。

  • 扣除发动入侵所需的10点能量后,单位剩余的能量将会被均分为n份,每份的能量大小记作E,n为作用半径内除单位本身的单位数量。

  • 作用半径内单位友方的基地将会增加E点能量值。

  • 作用半径内单位友方的其他单位将会增加E点防护值,上限为其初始防护值,享受无人机的增益。

  • 作用半径内非单位友方(敌方或中立)的其他单位将会损失E点防护值,享受无人机的增益。

  • 如果目标单位的防护值为负数:士兵将会成为己方单位,防护值等于当前防护值的绝对值,上限为其初始防护值。矿工和无人机将会被摧毁。建筑将会被转换成己方单位。

矿工

矿工拥有独特的模块,这为它带来了能够产生新能量的能力。事实上,它并不是通过挖煤来产生新能量的——但是这并不影响它被冠以“矿工”的绰号。

感知:将会把矿工视为士兵。

挖矿(被动能力):在被创造的50回合以后,矿工将会为创造它的基地持续带来能量收益(如果这个基地还没有易主)。假设矿工的能量为x,它产生的能量将等于⌊(0.02+0.03*e^−0.001x)⋅x⌋。

进化(被动能力):在被创造的300回合以后,矿工将会进化为拥有同样能量和防护值的士兵。

无人机

无人机上所搭载的分析模块是所有矿工的噩梦——因为它能无视矿工的防护值,直接摧毁它们。

感知:无人机有比感知范围更大的探测范围

分析(主动能力):消耗10点防护值(防护值将不会被这个行为扣除到0以下),选中行动范围内的一个矿工,立即摧毁它,并且分析它的代码组成。这将为它友方士兵的入侵提供更多的帮助。在接下来的50回合以内,己方士兵将会得到一个乘算的入侵增益,增益系数等于1+0.001^(矿工能量)。如果同一时刻有复数个矿工的增益存在,增益系数以1+0.001^(未过期的矿工能量之和)计算、

基地

基地当中有建造其他种类的单位所必需的设备。基地不可被建造,亦不可被摧毁,只能通过士兵的入侵来易主。初始的双方基地拥有150点能量,中立基地拥有50到500点能量。

建造(主动能力):在相邻的、没有被占据的位置制造新的单位,并把基地当中部分能量转移到其中。

充能:花费一部分能量尝试能量共鸣。此行为并不会增加冷却值,也不被冷却值所限制。

每一回合开始时,每一个基地都会收到一些能量,具体数量以E(t)=⌈0.2*sqrt(t)⌉来计算,t为当前的回合数。

四、胜利

在《战地:起源》当中,双方的目的是赢得比赛。

双方都有最终兵器,并且将会在1000回合后准备完毕。每一回合,双方的基地都会使用一部分能量来给最终兵器充能。

每一回合,使用最多能量在充能上的基地将会产生能量共鸣,基地所属势力的最终兵器将会累计一个能量点。1000回合后,拥有更多能量点的最终兵器将会彻底摧毁对方的部队,并且赢得比赛。

充能最多的基地将会彻底损失充能所消耗的能量,同时对方充能最多的基地仅能回收其用于共鸣的能量的一半。这两个基地以外的基地将可以回收全部的能量。

如果双方充能最多的基地所使用的能量一样多,那么双方的最终兵器都无法获得能量点,并且都只能回收其用于共鸣的能量的一半。

胜利条件

如果场上一支队伍的所有单位被全灭,它将立即失败,即使1000回合是它的最终兵器能拥有更多的能量点。除此之外,1000回合以后将会按照以下因素依次判断胜负:

  • 一、最终兵器有更多的能量点。

  • 二、队伍拥有更多的基地。

  • 三、队伍所有单位的总能量更高。

  • 四、平局。

五、交流

单位只能感知自己周围的信息,并且在独立的代码副本之上运行——这意味着单位之间无法共享任何变量。

唯一可以用来传递信息的方式是旗帜。每一个单位都可以改变身上旗帜的颜色(不会增加冷却值,也不被冷却值所限制),并且获得感知范围内所有其他单位的旗帜。

旗帜的颜色是一个24位的非负整数(0-16777216)。

六、运行时限

为了防止玩家的代码陷入死循环,或者占用过多资源导致比赛运行总时间过长,所有单位的运行被限制在20ms之内,超过范围的机器人将会被中断运行,并且该回合不会执行任何的动作。

七、其他文件

开发文档