在一个荒芜,饱受战争摧残的世界中,城市被暴徒和小偷所淹没,文明以小型,孤立的工业合作社的形式重塑了自己,散布在整个先前无人居住的地区。这些社区的存在依赖于称为““子”的雇佣军团队,他们在未驯服的领土上寻找有价值的材料出售给合作社。随着这些材料变得越来越稀缺,报废已变得越来越困难和危险。脆弱的人类工人大多已被称为“机器人”的远程机器人替身所代替,典型的雇佣军更可能是熟练的程序员,而不是武装的焊工。随着人类报废的存在减少,雇佣军之间的相互尊重也减少了。机器人不仅具有收集废料的能力,而且还可以防御废品,在某些情况下,可以用武力将其收起。Bot程序员不遗余力地制定新的策略,以超越竞争对手的废品,从而导致攻击性越来越强的机器人,这对于在社区墙外冒险的人们来说是另一种危险。
(是的,徽标被搞笑地裁剪了)
欢迎使用Scrappers!
这是Scrappers的早期版本,其中未实施废料收集和工厂。从根本上说,这是“向上射击”。
您是一名雇佣兵程序员,其任务是创建一个程序来远程引导您的机器人,以击败竞争对手的报废团队。您的机器人是类似于蜘蛛的机器,其核心是电力和盾构发电机,周围环绕着许多配有抓取,切割和攻击工具的附件。发电机每刻可产生12个功率单位(pu)(刮板的时间单位)。您可以控制这种力量在机器人的三个主要需求之间的分配方式:机芯,护盾和火力。
爬虫机器人是非常敏捷的机器,可以轻松地在遇到的任何障碍物上方,下方和周围移动。因此,冲突不是程序需要考虑的事情。您可以自由分配机器人可用的全部12pu或全部12pu,只要您进行整数交易即可。将0pu分配给机器人的移动功能会使它无法移动。分配2pu将使机器人能够在每个滴答声中移动2个距离单位(du),5pu将导致5du / tick,11pu将导致11du / tick,依此类推。
机器人的盾牌生成器会在他们的身体周围投射出偏转能量的气泡。盾牌在弹出之前最多可以偏转1点伤害,从而使您的机器人处于暴露状态,直到它的盾牌生成器生成足够的功率以将盾牌重新固定到位。您可以自由分配所有,部分或不分配给机器人的12pu作为其屏蔽。将0pu分配给机器人的防护罩意味着它永远不会生成防护罩。分配2pu可使机器人在12个滴答中生成2个新盾,或者每6个滴答生成一次。5pu将导致每12个滴答中有5个更新盾牌,依此类推。
通过在其焊接激光器中建立电荷,您的机器人可以在短距离内以相当的精度发射破坏性光束。就像生成盾牌一样,您的机器人的发射速度取决于分配给其激光器的功率。将0pu分配给机器人的激光器意味着它永远不会触发。分配2pu可使机器人在每12个滴答声中触发2个,依此类推。机器人的激光将一直传播,直到遇到物体或消失为止,因此请注意友善的射击。尽管您的机器人非常准确,但它们并不完美。您应该期望+/- 2.5度的精度差异。随着激光束的传播,其粒子逐渐被大气偏转,直到激光束在足够的距离内变得无害为止。激光在空白点范围内造成1点伤害,每行进的机器人长度造成的伤害降低2.5%。
爬虫程序机器人具有足够的自治能力来处理基本功能,但是依靠您(他们的程序员)来使它们作为一个整体有用。作为程序员,您可以为每个单独的机器人发出以下命令:
- 移动:指定机器人将朝其移动的坐标。
- 目标:确定一种在功率分配允许时瞄准并开火的机器人。
- 力量:在机芯,护盾和火力之间重新分配力量。
技术游戏详情
您需要熟悉三个程序。该游戏引擎是重提升,并提供了TCP API玩家程序连接到。播放器程序就是您要编写的程序,这里我提供了一些带有二进制文件的示例。最后,渲染器处理游戏引擎的输出以产生战斗的GIF。
游戏引擎
您可以从此处下载游戏引擎。启动游戏后,它将开始在端口50000(当前不可配置)上侦听玩家的连接。一旦收到两个玩家连接,它将向玩家发送READY消息并开始游戏。播放器程序通过TCP API将命令发送到游戏。游戏结束后,将创建一个名为scrappers.json的JSON文件(目前也无法配置)。这就是渲染器用来创建游戏GIF的东西。
TCP API
播放器程序和游戏引擎通过TCP连接来回传递第四个换行符终止的JSON字符串进行通信。可以发送或接收的五种不同的JSON消息。
准备好消息
READY消息从游戏发送到播放器程序,并且仅发送一次。该消息告诉玩家程序其玩家ID(PID)是什么,并提供游戏中所有机器人的列表。PID是确定哪些机器人对敌人友好的唯一方法。有关以下机器人字段的更多信息。
{
"Type":"READY", // Message type
"PID":1, // Player ID
"Bots":[ // Array of bots
{
"Type":"BOT",
"PID":1,
"BID":1,
"X":-592,
...
},
...
]
}
机器人讯息
BOT消息从游戏发送到玩家程序,并在机器人的属性发生更改时发送。例如,当投影盾牌或更改健康状况时,将发送BOT消息。机器人ID(BID)仅在特定玩家中唯一。
{
"Type":"BOT", // Message type
"PID":1, // Player ID
"BID":1, // Bot ID
"X":-592, // Current X position
"Y":-706, // Current Y position
"Health":12, // Current health out of 12
"Fired":false, // If the Bot fired this tick
"HitX":0, // X position of where the shot landed
"HitY":0, // Y position of where the shot landed
"Scrap":0, // Future use. Ignore.
"Shield":false // If the Bot is currently shielded.
}
移动讯息
MOVE消息是从玩家程序到游戏的命令(但可以将其视为对机器人的命令)。只需确定要移动的机器人和坐标即可。假定您正在命令自己的机器人,因此不需要PID。
{
"Cmd":"MOVE",
"BID":1, // Bot ID
"X":-592, // Destination X coordinate
"Y":-706, // Destination Y coordinate
}
目标讯息
TARGET消息告诉您的一个机器人针对另一个机器人。
{
"Cmd":"TARGET",
"BID":1, // Bot ID
"TPID":0, // The PID of the bot being targeted
"TBID":0, // The BID of the bot being targeted
}
电源信息
POWER消息在移动,火力和护盾之间重新分配给机器人可用的12pu。
{
"Cmd":"POWER",
"BID":1, // Bot ID
"FPow":4, // Set fire power
"MPow":4, // Set move power
"SPow":4, // Set shield power
}
竞赛
如果您有足够的勇气去探索未驯服的土地,那么您将参加与佣兵同行的双重淘汰赛。请为您的提交创建答案,然后粘贴您的代码或提供指向git repo,gist等的链接。任何语言都可以接受,但是您应该假设我对这种语言一无所知,并包括运行程序的说明。根据需要创建尽可能多的提交,并确保为其命名!
该采样播放器程序将包括在比赛,所以我强烈建议测试你的机器人对付他们。比赛将在我们收到四份独特的计划后大约两周开始。祝好运!
--- Winner's Bracket ---
** Contestants will be randomly seeded **
__________________
|___________
__________________| |
|___________
__________________ | |
|___________| |
__________________| |
|________________
__________________ | |
|___________ | |
__________________| | | |
|___________| |
__________________ | |
|___________| |
__________________| |
|
--- Loser's Bracket --- |___________
|
___________ |
|___________ |
___________| |___________ |
| | |
___________| | |
|___________ |
___________ | | |
|___________ | |___________|
___________| |___________| |
| |
___________| ___________|
其他重要信息
- 游戏以12节拍/秒的速度运行,因此您收到消息的频率不会超过每83毫秒左右一次。
- 每个漫游器的直径均为60du。防护罩不占用额外空间。下图显示了+/- 2.5%的精度,在一定距离内击中机器人的几率:
- 此图表示激光损伤随距离的衰减:
- 机器人的准确性和激光衰减可以结合起来计算出其每次射击的平均伤害。也就是说,机器人在一定距离内射击时将造成的平均伤害。下图表示每次射击的伤害:
- 机器人的激光起源于机器人中心和边缘之间。因此,堆叠您的机器人会导致友善之火。
- 敌对机器人之间的距离大约为1440du。
- 如果经过120次滴答声(10秒)而没有造成任何伤害,则游戏结束。
- 胜者是拥有最多机器人的玩家,然后是游戏结束时最健康的玩家。
了解渲染的图像
- 玩家1用圆圈表示,玩家2用六角形表示。
- 机器人的颜色代表其功率分配。红色越多,表示发射的功率就越多。蓝色越多,盾牌越多。绿色越多,运动就越多。
- 机器人身体中的“洞”表示损坏。孔越大,受到的伤害越大。
- 机器人周围的白色圆圈是盾牌。如果机器人在回合结束时具有防护罩,则会显示该机器人。如果防护罩因受到损坏而弹出,则不会显示。
- 机器人之间的红线代表所拍摄的照片。
- 杀死机器人后,将显示一个大的红色“爆炸”。