不对称的KOTH:抓住猫
更新: 由于Controller.java没有捕获到异常(仅错误),因此更新了主文件(包括新的子任务)。现在,它确实可以捕获错误和异常并打印它们。
这个挑战包括两个线程,这是cat线程,catcher线程可以在这里找到。
控制器可以下载 此处。
这是一个不对称的KOTH:每个提交都是猫还是一个捕手。每对猫和捕手之间都有游戏。猫和捕手的排名各不相同。
捕手
六角形网格上有一只猫。您的任务是尽快捕获它。每转一圈,您都可以在一个网格单元上放置一个水桶,以防止猫能够去那里。但是猫不是(也许)那么笨,每当您放置一个桶时,猫都会移动到另一个网格。由于网格是六角形的,因此猫可以向6个不同的方向移动。您的目标是用水桶包围猫,速度越快越好。
猫
您知道捕手想通过在您周围放水桶来接住您。当然,您会设法逃避,但是由于您是一只懒惰的猫(就像猫一样),您当时确实迈出了一步。这意味着您不能待在同一个地方,而是必须移至周围的六个景点之一。每当您看到捕手放了一个新的水桶时,您就会进入另一个牢房。当然,您尝试逃避的时间越长越好。
格网
网格是六边形的,但是由于我们没有六边形的数据结构,因此我们采用一个11 x 11
正方形的2d数组并模仿该六边形的“行为”,即猫只能在6个方向上移动:
拓扑是环形的,这意味着如果您踩到阵列“外部”的单元格,您将被转移到阵列另一侧的相应单元格。
游戏
猫从网格中的给定位置开始。捕手可以先走,然后猫及其捕手交替走动,直到猫被抓到为止。步骤数是该游戏的分数。猫试图获得尽可能高的分数,捕手试图获得尽可能低的分数。您参与的所有游戏的平均总和就是您提交的分数。有两个单独的等级,一个用于猫,一个用于捕手。
控制者
给定的控制器是用Java编写的。作为捕手或猫,您每个人都必须完整地实现一个Java类(已经有一些原始示例)并将其放置在players
包中(并更新Controller类中的猫/捕手列表),但是您也可以编写该类中的其他功能。控制器随附了简单的cat / catcher类的每两个工作示例。
该字段是一个11 x 11
2D int
数组,用于存储单元格当前状态的值。如果一个单元格为空,则它具有值0
;如果有一只猫,它具有值-1
;如果有一个存储桶,则有一个值1
。
您可以使用一些给定的功能:isValidMove()
/ isValidPosition()
用于检查您的移动(cat)/位置(catcher)是否有效。
每次轮到您时,takeTurn()
都会调用您的函数。参数包含当前网格的副本,并具有类似于read(i,j)
读取处的单元格的方法(i,j)
,以及isValidMove()/ isValidPosition()
检查答案是否正确的方法。这也可以管理环形拓扑的环绕,这意味着即使网格只有11 x 11,您仍然可以访问单元格(-5,13)。
该方法应返回一个int
包含两个元素的数组,这些元素代表可能的移动。对于猫来说,{-1,1},{0,1},{-1,0},{1,0},{0,-1},{1,-1}
它们代表了猫想去的位置的相对位置,而捕手则返回了他们想要放水桶的位置的绝对坐标{i,j}
。
如果您的方法产生无效举动,则您的提交将被取消资格。如果在您的目的地已经是一个铲斗或不允许该举动/目的地已经被占用(作为猫),或者如果已经有一个铲斗/猫(作为捕手),则该举动被视为无效。您可以使用给定的功能事先检查一下。
您的提交应该相当快地工作。如果您的方法每个步骤花费的时间超过200毫秒,则也将被取消比赛资格。(最好少得多...)
程序可以在步骤之间存储信息。
意见书
- 您可以根据需要进行任意数量的提交。
- 请不要显着改变您已经提交的内容。
- 请每个提交一个新的答案。
- 每个提交最好都具有唯一的名称。
- 提交内容应包括您班级的代码以及可以告诉我们您提交内容的工作方式的描述。
- 您可以在
<!-- language: lang-java -->
源代码前写一行,以自动突出显示语法。
计分
所有猫都将与所有捕手竞争相同的次数。我将尝试经常更新当前分数,当活动减少时将确定获胜者。
这项古老的Flash游戏启发了这一挑战
感谢@PhiNotPi进行测试并提供一些建设性的反馈。
当前分数(每对100场比赛)
Name Score Rank Author
RandCatcher 191962 8 flawr
StupidFill 212688 9 flawr
Achilles 77214 6 The E
Agamemnon 74896 5 The E
CloseCatcher 54776 4 randomra
ForwordCatcher 93814 7 MegaTom
Dijkstra 47558 2 TheNumberOne
HexCatcher 48644 3 randomra
ChoiceCatcher 43834 1 randomra
RandCat 77490 9 flawr
StupidRightCat 81566 6 flawr
SpiralCat 93384 5 CoolGuy
StraightCat 80930 7 CoolGuy
FreeCat 106294 3 randomra
RabidCat 78616 8 cain
Dijkstra's Cat 115094 1 TheNumberOne
MaxCat 98400 4 Manu
ChoiceCat 113612 2 randomra
main.Controller
,调用getCatchers()
和模拟/破坏捕手的响应takeTurn
?