[TOC]
整个地图基于模仿吃鸡的模式,故事背景暂定,一些细节名字有待修正,本文档现(2018/8/6)谨作面向选手风格的规定。每支参赛队伍由至多四人组成,最终全队提交至多四个不同的AI(如不足则用样例AI来补)。所有参赛队伍的AI将控制相应角色同时被随机投放到地图各处,在地图上获取装备、补给等,经过战斗直到只剩下一支队伍的角色存活时游戏结束。本文中将以玩家指代参赛选手,以AI指代参赛选手所写程序,以角色指代AI所控制的在游戏中进行战斗的对象。
游戏基于平面直角坐标系标的表示法,角色模型统一为一个半径为$0.5m$的圆,地图大小为$1000m\times1000m$,玩家只需要根据的视野处理范围内的信息。游戏将以帧作为回合界限(即调用玩家AI的频率),并以每秒2帧(2fps)的速度进行。
玩家的指令接口包括移动、攻击、拾取、无线电。某些情况下一个指令可能需要不止一帧的时间(CD)来完成,需注意角色在某指令导致的CD期间不可接受相同指令(如正在开枪时无法接受攻击指令),AI需要分析局面,合理发送指令来博取优势、取得胜利。发送一次指令时,需要指明指令名、给定该指令的相关参数,无效的参数和指令也将被无视,且同一回合相同指令只能发送一条,如果违背则采用后来居上的原则。
处于某种指令CD下时试图发出其他指令的冲突关系如下:
做......时 | 移动 | 攻击 | 拾取 | 无线电 |
---|---|---|---|---|
试图移动 | 覆盖 | 允许 | 无效 | 允许 |
试图攻击 | 允许 | 无效 | 无效 | 允许 |
试图拾取 | 打断 | 打断 | * | 允许 |
试图无线电 | 允许 | 允许 | 允许 | * |
解释:
- 一般指令采用“执行后出现CD”的原则,比如某种武器攻击的CD如果是5(仅举例,具体CD以最新规则为准),那么在发出指令后子弹就会射出,但是之后5个回合内玩家无法执行任何攻击指令。四个指令对应四个独立CD,CD互不干扰;
- 同一回合发送多条相同类型指令将采取后覆盖前的原则;
- 无线电指令一般是1,与其他指令互不冲突,同一回合多条无线电指令后覆盖前;
- 拾取指令CD是1,CD期间其他所有指令无效,移动、攻击若正在执行则被拾取打断(但是CD并未消失),在拾取结束后恢复原来状态(如果CD仍未结束)。
- 攻击CD时新的攻击指令;
- 移动时可以用新的移动打断原来的,这个行为有利有弊,详见移动部分。
- 选手可以通过查看自身的状态(status)及上表来判断可以执行哪些操作,通过查看各个CD合理规划。
总的来说,给出如下的状态转移图:
具体指令解释如下:
- ##### 简介
移动是一个3CD的指令,移动方向将由移动角度指令决定,移动速度(每次移动指令移动距离)一般固定为,影响移动速度的要素见后,移动时遇到障碍物(地形、角色、道具)自动停止,视野朝向由面向角度指定,下一帧角色将视线将调整到该方向。特别的,在飞机上或者跳伞时也可以发出移动指令,此时移动角度将无效,仅仅根据面向角度调整视野方向。移动指令后的三个回合分别移动移动距离的20%、50%、30%,玩家可以通过及时更新指令调整移动节奏。
- #####指令参数
- 移动角度:一个
float
量,应当不小于0且不超过360,采用角度制,以视线为基准。 - 面向角度:一个
float
量,应当不小于0且不超过360。
- ##### 简介
发送攻击指令后将使用指定武器朝指定方位进行攻击,攻击应当指明用来攻击的武器编号,攻击角度,以及可能有的特殊参数。攻击指令一定会有CD,由武器决定,不合法的攻击指令同样被无视。
- ##### 指令参数
- 攻击角度:一个
float
量,取值范围为(0, 360],计算方法是相对视角逆时针的角度。 - 武器ID:一个
unsigned int
量,指明自己用来攻击的武器的编号。 - 特殊参数:一个
int
(宏)量,只对部分特殊武器生效,将在武器部分给出。在表示
- ##### 简介
当角色感知内有可拾取的物品时,可以通过发送拾取指令来捡起目标物品,需要指定物品ID,拾取本身无CD,但是某些特殊即捡即用物品可能会产生使用CD(详见物品 部分)。对于某些特殊物品可能需要用到附加参数。不合法的拾取指令将被无视,同一回合内不同角色拾取同一物品将随机决定一个人拾取成功。
- ##### 指令参数
- 物品ID:一个
unsigned int
量,指明操作对象的物品ID,如果指定ID不是拾取范围内的物品,会被无视。 - 附加参数:一个
int
量,某些特殊物品需要用到。
####d.无线电
- ##### 简介
无线电指令是本游戏团队合作的精髓,借助我们封装好的接口,玩家可以给队友发送一些如“按兵不动”、“撤退”等无线电消息,并且接收者可以获取发送者ID、坐标、血量等信息,这些消息将被封装在消息结构体里。(如果玩家不满足于给出的无线电,亦可用一个32位整数在自行编码)
- ##### 指令参数
- 目标ID:一个
unsigned int
量,表示目标的ID。另外通信兵有额外参数,在通信兵处给出。 - 消息:一个
unsigned char/int
量,作为发送的消息传出,给出的消息可在选手接口 查询。
视觉是获取游戏信息的主要途径,每名角色始终有三个关于重要视觉的重要变量:视线、视角和视距。角色的视野为一个扇形区域,视线即扇形的中心线,扇形区域将沿中心线顺逆时针各转视角的半角,我们将视觉可以获取信息的地方称作视野范围,具体来说可以参考下图(俯视图):
图中的direction所给定的红线就是视线,β=180°就是视角(仅举例,实际参数未必是这么多),红色线段的长度,也即扇形半径,既是视距,而图中的粉色区域与绿色区域的并集就是视野范围。需要注意的是游戏给出的信息仅仅是视野范围内可获取的信息,但是可能会遇到障碍物,比如上图中我们假设x正半轴上有一堵高墙,那么绿色范围的信息AI不可获取,此时AI只能获取到x正半轴上有一堵墙。
在实际游戏中通常只有视线是AI可以自行决定的,视角和视距都由角色的职业、物品、所处地形等决定,AI只能获取这些参数而不能改变,角色一帧里所有视觉获取的元素保存在一个列表中(平地地形即为无元素,不会列入),该列表每个元素包含信息如下:
- ID:一个
unsigned int
型变量,包括角色/地形/物品都有统一化的ID。 - 类型:一个枚举值,给出具体的元素类型(角色、具体地形类型、具体物品类型)
- 详情:一个结构体,不同类型元素包含不同信息,具体内容参见(角色信息 /地形 /物品)
视觉作为主要信息获取途径,通常是AI主动获取,而听觉则是一个被动获取信息的过程。游戏中的听觉信息主要分为两大来源:环境声音与无线电。获取到的听觉信息会放到一个队列里,如果没有及时获取,则会在下一帧里自动清空。玩家可以通过相关接口获取声音消息来源、内容以及其他信息,AI理应每回合将该队列遍历一遍并做出判断。所有的声音信息均包括消息、发送者和时延,其中消息是一个32位整数承载消息所含的信息,玩家可以通过给定接口解析消息得到一个结构体,发送者是一个unsigned int
作为信源ID,时延是一个型变量告诉接收者这则消息距离发送过去了多少帧。听觉相关特征如下:
- 环境声音:信源ID为-1(即0xffffffff),消息中包含声音类型与方向。
- 无线电:见无线电 部分
附表:不同类型声音的发出时机与宏
声音类型 | 发出时机 | 传播距离 | 宏 |
---|---|---|---|
脚步声 | 移动速度时发出 | ||
枪声 | 子弹出膛时发出 | 物品 部分给出 |
物品是对游戏中各类可获取、可使用物的一个统称,可分为装备、道具。其中,不同的物品属性决定了一个物品的基本特征,而同类物品又有各自独特的属性,这里将详细列出。
- 装备:角色可以重复使用的物品,装备均有一个值(耐久度)来衡量其使用程度,当耐久度为0时装备将永久消失。装备又可以分为防具和武器,具体说来防具的耐久度即为防具的磨损度,遭受攻击时视情况损失耐久度,武器的耐久度则是指子弹数(特别的,近战武器也有类似的概念)。同类装备只能携带一件,拾取装备后将自动丢弃同类装备,且装备是不会作为障碍物阻拦角色移动的。
- 道具:一次性使用的物品,具体种类较多,拾取规则视具体物体而定。物品同样不会阻碍角色移动。
a.通用步枪
装备-主武器 耐久度 30 攻击距离 360 攻击CD 2 伤害系数 45
b.通用手枪
装备-副武器 耐久度 15 攻击距离 35 攻击CD 3 伤害系数 35
c.通用机枪
装备-主武器 耐久度 100 攻击距离 300 攻击CD 2 伤害系数 40 特性 攻击时降低50%移动速度
d.通用冲锋枪
装备-主武器 耐久度 30 攻击距离 200 攻击CD 1 伤害系数 25
e.通用狙击枪
装备-主武器 耐久度 15 攻击距离 550 攻击CD 20 伤害系数 80
f.连射狙击枪
装备-主武器 耐久度 30 攻击距离 550 攻击CD 5 伤害系数 50
g.通用霰弹枪
装备-主武器 耐久度 10 攻击距离 30 攻击CD 8 伤害系数 200 特性 伤害随与攻击目标间距离递减
h.通用迫击炮
装备-主武器 耐久度 5 攻击距离 600 攻击CD 40 伤害系数 220 特性 伤害随投掷点与目标间距离递减,发出攻击指令等待CD完成后攻击才会生效,期间发出其他指令会打断攻击 特殊参数 给定投掷点与玩家间距离,无法被地形阻挡
i.通用手榴弹
装备-投掷武器 耐久度 1 攻击距离 50 攻击CD 0 伤害系数 120 特性 伤害随投掷点与目标间距离递减 特殊参数 给定投掷点与玩家间距离,可被地形阻挡
部分稀有道具可设定为仅可从密码箱中得到
a.扩容弹夹
特性 拾取后增加所有武器50%耐久度(下取整)
b.消音器
特性 拾取后降低枪声传播范围
c.一次性密码破译器
特性 可以让非黑客角色开启密码箱,使用后消失
d.绷带
使用CD 40 特性 回复30点生命值,发出使用指令等待CD完成后道具才会生效,期间发出其他指令会打断
e.医疗包
使用CD 60 特性 回复60点生命值,发出使用指令等待CD完成后道具才会生效,期间发出其他指令会打断
f.医疗箱(稀有)
使用CD 80 特性 回复100点生命值,发出使用指令等待CD完成后道具才会生效,期间发出其他指令会打断
g.无人机
特性 为你提供距离300内视野,使用期间发出其他指令会打断
h.作战车(稀有)
特性 属性等同于一个装备2级甲的角色,装备通用机枪,使用后该战车自动行动
i.炮台
特性 属性等同于一个装备2级甲的角色,装备通用机枪,无法移动,自动攻击距离300内敌人,玩家无法获取炮台视野 PS:是否需要设置持续时间
j.防弹衣
耐久度 100 特性 分为1,2,3级甲,分别减少受到伤害的30%/40%/55%,受到攻击时会减少受到伤害80%的耐久度
k.倍镜
特性 分为2,4,8倍镜,使用后会减少两侧共30/60/90度视角,增加100/250/400视距,并提高50/100/150武器射程,使用霰弹枪、迫击炮、手榴弹不会提供额外射程
l.信号干扰器
特性 属性等同于一个装备1级甲的角色,无法移动,无法攻击,其距离600内敌方队伍无法接收无线电,带有通信兵的队伍不受干扰,可回收 PS:为了迎合下通信兵避开干扰的特点设置的,可以无视。。。
m.密码箱
简介:我得不到的别人也不可能得到,虽然你打不开它,但可以带走它 特性 随机出现在地图各处,打开后可获得强力武器和道具,仅黑客和携带有一次性密码破译器的角色可以打开它
地形是指非平地部分的地形,没有任何特性的平地不被考虑为地形(但仍然占有一个位置,作为一些情况下的缺省值)。地形有两种形状,圆形与四边形:圆形地形玩家获取信息可以得到其圆心坐标与半径,以下简称圆;四边形区域玩家可以得到其四个顶点坐标,以下简称方。所有地形均不可被破坏。
- 描述:即无地形
- 形状:无
- 特性:无
- 描述:路边常见的树木,大小不一,常被用作掩体。也不知道这些树是什么做的,大炮都炸不烂……
- 形状:圆
- 特性:可遮挡视野,阻拦子弹(注:某些情况下不可阻拦,详见物品 部分),不可通行。
- 描述:高度惊人统一的矮墙,明明看上去是石头,偏偏像钛合金一样坚硬,明明看着不怎么高,偏偏就是翻不过去。
- 形状:方
- 特性:子弹有50%概率被遮挡,炮弹无法穿过,不可通行。
- 描述:比矮墙还高的草丛,拿来混淆视听绝对方便。
- 形状:圆
- 特性:角色圆心在草丛中时视为角色在草丛中,角色到草丛距离(计算到草丛边界最近距离)大于时无法看到该草丛中角色。
- 描述:常在河边走,哪能不湿鞋?早晚都要湿,干脆走进去。
- 形状:方
- 特性:角色圆心在浅滩中时视为在浅滩中,在浅滩移动速度下降30%,有20%概率不被子弹击中。
- 描述:大海无量……哎呀又呛水了!
- 形状:方
- 特性:角色圆心在深水中时视为在深水中,角色在深水中移动速度下降50%,有50%概率不被子弹击中,每回合损失HP。
- 描述:看着不高不矮的峭壁,跳下去应该能活命吧?
- 形状:方
- 特性:峭壁四条边分为低侧、高侧、同侧,子弹、角色均无法从峭壁低侧射往高侧,地处角色的视距蔓延到高侧时会被强行缩减为,高侧角色移动往低侧时会损失HP。
-
描述:谁说上山容易下山难?我看顺着斜坡滚下去挺便捷的~
-
形状:方
-
特性:斜坡四条边分为低侧、高侧、同侧,角色从高侧向低侧移动时速度上升30%,反之下降30%,视野范围与一般子弹经斜坡往上只能蔓延到斜坡区域(解释见下图)。
(图示中AB都将不可能看见或用直线式子弹击中C,无论视距与攻击距离是否充足)
角色信息指的AI可以获取的关于自己所操控角色的全部内在信息,包括:HP、视线、视距、视角、坐标、装备。以下给出这些信息的概念,可见/不可见指其他人能否通过视觉感知到这些信息,需要注意的是可见性对敌人和队友没有差异,需要向队友透露特别信息可用无线电来完成。
- HP:Heal Point,血量,该值一个0到100之间的浮点数,受到伤害后会降低,降至0时角色死亡。除0外不可见。
- 视线/视距/视角:见感知 。视线可见,视距与视角不可见。
- 坐标:即角色圆心坐标。可见。
- 装备:见物品 。可见。
每一个AI在游戏开始前都应该选择一个职业决定自己角色的特殊属性,职业一旦选择不可更改,且同一支队伍AI不得选择重复的职业,玩家应当合理选择职业以组成强大的队伍。所有职业描述与特性如下:
简介:人在江湖走,哪能不挨刀?挨刀不要紧,我有医疗兵!医疗兵理应是团队不可缺少的一部分,能够携带药品,救治队友,甚至让HP降为0的队友获得新生。
特性:可以对队友使用药品(效果降至80%);可以对HP为0的队友使用药品以复活角色(药品效果降至50%)。
定位:奶妈
语录:“我还能再救一个!”
简介:说好的团队作战,怎么又玩成个人英雄主义了?苟利队伍生死以,无论祸福我指挥!通信兵能够使用波段的高频信号进行通信,避开干扰,从而更高效地传播信号,增强队友发送无线电的能力。
特性:可以群发无线电;队伍里有通信兵时所有队员发送无线电的传播速度将翻倍。
定位:统领
语录:“嘀……嘀嘀嘀……嘀……嘀嘀嘀嘀……”
简介:那一天,我选择了该死的红色药丸,从此漫步在命运与虚实的谎言中……黑客拥有极高的软件能力,精通C++以外所有编程语言,能够使用四维传送门,解锁密码箱以获取高级装备。
特性:可以破解随机投放的密码箱并暴露出其中的装备。
定位:辅助
语录:“我深刻地怀疑我们所处的世界是二维的,到底是谁蒙蔽了我们的双眼?”
简介:屏息,凝神,静候——一击必杀!狙击手精通狙击之道,善于用狙击枪进行弱点攻击,能够最大程度地发挥出狙击的作用。
特性:使用狙击枪时有伤害加成。
定位:输出
语录:“形神合一,攻敌一处。”
一个圆形的圈子会缓缓向圈内随机某个点缩进,这个圈子称为毒圈,圈内区域是安全区,圈外区域是毒区。毒区内的玩家将持续受到伤害,毒圈在一定时间后会坍塌到一个点(如果游戏能持续那么长时间的话),此时全图皆为毒区。玩家需要在毒圈向内缩进时和时间赛跑,在安全区内以保证生命安全。
毒圈会以时间分段的模式移动,即匀速持续移动一段时间,再停滞一段时间,玩家每一帧会收到当前毒圈的圆心、半径,下一状态毒圈的圆心,半径,毒圈是否在移动,以及变成下一状态(下次开始移动或下次停止移动)所需的帧数。
- 执行玩家指令
- 拾取立刻执行,如果多人拾取统一物品只有一人会成功
- 拾取成功后状态变为拾取
- 移动指令仅仅做玩家移动方向改变,暂不移动
- 攻击只刷新CD,保存指令信息,但是并未产生实际效果
- 无线电消息发出,但是还未传播
- 玩家移动
- 玩家物理位置改变
- 破解密码箱等操作此阶段结算
- 此阶段可能产生脚步声
- 炮弹飞行
- 只结算移动,遇到障碍停止
- 炮弹预爆炸标记在此阶段
- 伤害结算
- 将所有正负伤害进行累加计算
- 炮弹爆炸同步
- 暂不考虑死亡(即一帧内子弹可能出现鞭尸)
- 死亡结算
- 毒圈伤害也在此结算
- 以伤害结算完后hp≤0作为死亡依据
- 死亡玩家不再执行无线电接收步骤
- 物品信息刷新
- 死亡玩家掉落物刷新
- 随机物品刷新也在此阶段完成
- 声音刷新
- 只是声音的传播,产生不在此阶段
- 若判定声音传到,则刷新玩家的声音列表
- 玩家视野、cd等属性刷新
- cd若减为0则产生相应效果
- 真正的攻击发生在此阶段(攻击cd刷新为0时),枪声亦然
- 若状态为拾取则在此阶段恢复正常(因此玩家不可能接收到自己的拾取状态)