脚本机器人沃兹!
结果已经公布,刺客是我们的冠军,赢得了3场比赛中的2场!感谢所有提交脚本机器人的人!特别感谢BestOpportunityBot的号角,它显示了出色的路径并充分利用了所有操作选项。
地图1
刺客很早就拿出BestOpportunityBot,其余的比赛很无聊。详细的按此播放。
- 刺客:10 HP,造成10点伤害,受到3点伤害
- 避免者v3:10点生命值,造成0点伤害,受到0点伤害
- 完成吞噬:10马力,造成0点伤害,受到0点伤害
- 最佳机会竞猜:0 HP,造成3点伤害,受到10点伤害
地图2
BestOpportunityBot完成了本场比赛的大部分工作,但刺客最终将他带走。详细的按此播放。
- 刺客:2点生命值,造成10点伤害,受到9点伤害
- 最佳机会竞猜:0 HP,造成32点伤害,受到10点伤害
- 避免者v3:0点生命值,造成0点伤害,受到12点伤害
- 完成吞噬:0 HP,造成0点伤害,受到11点伤害
地图3
BestOpportunityBot将所有人推入了这场比赛的陷阱。很酷。详细的按此播放。
- 最佳机会竞猜:10 HP,造成30点伤害,受到0点伤害
- 刺客:0 HP,造成0点伤害,受到0点伤害
- 完成吞噬:0 HP,0造成的伤害,0受到的伤害
- 避免者v3:0 HP,0造成的伤害,0受到的伤害
感谢您的回答!由于只有4个脚本机器人,我们将放弃三场免费比赛的比赛计划,以下每张地图上都有一场比赛。获胜记录最高的脚本机器人获胜。如果出现平局,我们将突然死亡,其中打破平局的脚本机器人将首先获胜。
您应该选择接受的任务是编写一个脚本机器人,该脚本机器人可以遍历ASCII映射并销毁其对手。每场战斗都将采取基于随机启动顺序回合制游戏的形式,其中每个Scriptbot都有机会花费自己的能量点(EP)采取行动。GameMaster脚本将输入并解释每个Scriptbot的输出。
环境
每个Scriptbot都包含在其自己的目录中,在该目录中可以从map
和stats
文件中读取文件并对其进行读/写data
操作。该data
文件可用于存储任何可能有用的持久性信息。
统计文件
该stats
文件包含有关您的对手的信息,其格式如下。每个玩家代表在单独的行上。第一列是玩家ID(@
表示您)。第二列是该玩家的健康状况。
1,9HP
@,10HP
3,9HP
4,2HP
地图文件
该map
文件可能看起来像这样...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... 或这个...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... 或这个...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
...或者看起来可能完全不同。无论哪种方式,使用的字符及其含义都将保持不变:
#
一堵墙,不可逾越,不可穿透。1
,2
,3
...表示敌对玩家的数字。这些数字对应于stats
文件中的播放器ID 。!
陷阱。移到这些位置的脚本机器人将立即死亡。@
您的脚本机器人的位置。您可以自由移动的开放空间。
游戏玩法
GameMaster脚本将为Scriptbot分配随机的启动顺序。然后,Scriptbot仍在运行时按此顺序调用。脚本机器人具有10个生命值(HP),每回合以10个能量点(EP)开头,它们可以用来移动或攻击。在每个回合开始时,Scriptbot会治愈1点生命值,或者如果已经达到10点生命值,则会被授予一张额外的EP(因此有时运行策略可能是可行的)。
当只有一个Scriptbot幸存下来或经过100转后,战斗就结束了。如果在战斗结束时还存在多个Scriptbot,则根据以下条件确定它们的位置:
- 最健康。
- 造成的伤害最多。
- 受到的伤害最多。
脚本机器人输入
GameMaster会将战斗地图打印到一个名为map
Scriptbot可以读取的文件。地图可以采用任何形式,因此Scriptbot能够解释它很重要。您的Scriptbot将使用一个指示EP的参数来调用。例如...
:> example_scriptbot.py 3
脚本机器人将一直被调用,直到它花费所有EP或最多花费10 11次。每次调用前都会更新map和stats文件。
脚本机器人输出
脚本机器人应将其动作输出到sout。可能的操作列表如下:
MOVE <DIRECTION> <DISTANCE>
每则收费1 EP
DISTANCE
。该MOVE
命令将您的Scriptbot在地图上移动。如果有障碍物,例如墙壁或其他Scriptbot,GameMaster会尽可能移动您的Scriptbot。如果给定的DISTANCE
值大于Scriptbot的剩余EP,则GameMaster将移动Scriptbot,直到其EP用完。DIRECTION
可以是任何罗盘方向N
,E
,S
,或W
。PUSH <DIRECTION> <DISTANCE>
每则收费1 EP
DISTANCE
。该PUSH
命令使一个脚本机器人可以移动另一个脚本机器人。发出命令的Scriptbot必须直接位于要推送的Scriptbot的旁边。如果没有阻止脚本机器人被推动的对象,则两个脚本机器人都将沿指示的方向移动。DIRECTION
并且DISTANCE
与MOVE
命令相同。ATTACK <DIRECTION>
花费一张EP。该
ATTACK
命令直接在发出Scriptbot的旁边并按指定的方向对任何Scriptbot造成1点伤害。DIRECTION
与MOVE
命令相同。PASS
轮到你了。
支持的语言
为了使这对我来说合理,我将接受以下语言:
- 爪哇
- Node.js
- 蟒蛇
- 的PHP
您只能使用通常随语言一起打包的库。请不要让我找到晦涩的库来使您的代码正常工作。
提交与评审
在下面发布您的Scriptbot源代码,并给它一个好名字!还请列出您使用的语言版本。所有Scriptbot都会被审查为伪造,因此请做好评论,不要混淆您的代码。
您可以提交多个条目,但是请使它们完全唯一,而不是同一条目的版本。例如,您可能想要编写Zerg Rush机器人和Gorilla Warfare机器人的代码。没关系。请勿发布Zerg Rush v1,Zerg Rush v2等。
在11月7日,我将收集所有答案,那些通过初步审查的答案将添加到比赛括号中。冠军将获得公认的答案。理想的支架如下所示。由于可能不完全是16个条目,因此某些括号最终可能只是三个甚至两个机器人。我会尽力使支架尽可能公平。任何必要的偏爱(例如,如果需要再见一周)将给予首先提交的机器人。
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
问答环节
我确定我错过了一些细节,请随时提问!
我们是否可以相信地图文件始终被#符号包围?如果没有,如果机器人试图从地图上走开,会发生什么?-BrainSteel
是的,地图将始终以#为边界,并且您的Scriptbot将在这些边界内启动。
如果在PUSH命令中指定的方向上没有机器人,该命令如何起作用?-BrainSteel
GameMaster将不执行任何操作,将花费零EP,并再次调用Scriptbot。
未使用的EP会累积吗?-feersum
否。每个Scriptbot都会以10 EP开始回合/回合。任何未花费的EP都会浪费掉。
我想我已经明白了,但只是要澄清一下:对于机器人A和B,事件的顺序是A @ 10EP-> MOVE MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP->攻击MAP_UPDATE B @ 9EP->攻击...或A @ 10EP->移动A @ 9EP->攻击... MAP_UPDATE B @ 10EP->推B @ 9EP->攻击... MAP_UPDATE吗?换句话说,一个控制器-机器人查询循环中的所有动作都是原子的吗?如果是这样,为什么循环?为什么不返回包含所有要完成的操作的单个文件?否则,机器人将不得不写出自己的状态文件来跟踪多动作序列。map / stats文件仅在第一个操作之前有效。-COTO
您的第二个示例很接近,但不太正确。在回合中,将反复调用Scriptbot,直到用完它们的EP为止,或最多11次。每次调用前都会更新map和stats文件。如果机器人发出无效的输出,则循环很有用。GameMaster将处理无效的输出并再次介入该机器人,从而使该机器人有机会纠正其错误。
您将发布GameMaster脚本进行测试吗?-IchBinKeinBaum
GameMaster脚本将不会发布。我鼓励您创建一个地图和统计文件来测试您的机器人行为。
如果机器人A将机器人B推入陷阱,机器人A的“损坏处理”点是否等于机器人B当前的健康状况?-迈克·斯威尼(Mike Sweeney)
是的,那是个好主意。僵尸将获得等于其被推入陷阱的任何僵尸的生命值的伤害点。
#
受其限制,并且您的Scriptbot将在这些范围内开始。
map
文件始终被#
符号包围?如果没有,如果机器人试图离开地图,会发生什么?