您是一个有进取心的人,希望增加其控制下的土地。这很简单-离开您当前的土地,然后循环回到您的土地,该循环中的所有东西现在都归您所有。但是有一个问题!如果其他点以某种方式找到您的循环并穿过该循环,则您将死亡。
如果尚未尝试过,请转到Splix.io并尝试游戏。使用箭头键控制您的移动。
GIF
图片来源:http://splix.io/
细节
所有玩家都从200x200板上的随机位置开始。(我保留更改此内容的权利:)。您将有一定数量的动作来积累尽可能多的积分。得分如下:
- 您杀死的玩家人数乘以300
- 一轮结束时您拥有的土地数量
这就提出了别人可以偷走你的土地的观点。如果他们开始了与您的某些土地相交的循环,那么他们可以要求它。如果您在回合中死亡,则该回合的所有分都将丢失。
每个回合都有一个随机选择的玩家组(最多5个唯一的玩家)(可能会发生变化)。每个玩家都参加相同数量的回合。您的机器人的最终得分取决于其平均每游戏得分。每个游戏包括2000回合(可能随时更改)。所有漫游器都同时移动。
死亡案件
头屁股
两名球员在彼此对撞时死亡。即使两个玩家都在自己的空间边缘,这仍然是正确的。
但是,当只有一名玩家在他的土地上时,另一名玩家死亡。
线交叉
在这种情况下,只有紫色玩家死亡。
你不能越过自己的界限。
退出董事会
如果玩家试图退出棋盘,他将死亡并失去所有积分。
捕获区域
玩家在有足迹并再次进入自己的土地时将占领区域。
红色填充在两条红线之间。玩家不填写的唯一情况是其他玩家进入循环。需要明确的是,这仅在其他玩家本人处于循环中时才适用,而不仅仅是他所拥有的土地。玩家可以从另一个人手中夺取土地。如果玩家无法填写其足迹周围的区域,则足迹将直接转换为正常土地。如果另一个玩家落地循环中的玩家死亡,则该循环中的区域将被填充。每次玩家死亡时,都会重新检查棋盘上可以填充的区域。
控制器详细信息
控制器在这里。它与原始游戏非常相似,但由于技术原因,已进行了一些小的改动以使其更适合KotH。它是使用@NathanMerrill的KotHComm库构建的,并且在@NathanMerrill的大力帮助下也是如此。如果您在聊天室的控制器中发现任何错误,请告诉我。为了与KotHComm保持一致,我在整个控制器中都使用了Eclipse集合,但是只能使用Java集合库来编写机器人。
一切都打包在github版本页面上的uberjar中。要使用它,请下载它并将其附加到您的项目中,以便可以将其用于自动完成(IntelliJ的说明,Eclipse)。要测试您的提交,请使用运行jar java -jar SplixKoTH-all.jar -d path\to\submissions\folder
。确保path\to\submissions\folder
有一个名为的子文档java
,并将所有文件放在此处。不要在您的机器人中使用程序包名称(尽管KotHComm可能会使用它,但这只是麻烦一点)。要查看所有选项,请使用--help
。要加载所有机器人,请使用--question-id 126815
。
写一个机器人
要开始编写机器人,必须先扩展SplixPlayer
。
Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
- 在这里,您可以决定要让机器人执行哪一步。不得返回null。
HiddenPlayer getThisHidden()
- 获取的
HiddenPlayer
版本this
。对于将您的机器人与主板进行比较很有用。
- 获取的
enum Direction
- 价值观
East
(x = 1; y = 0)West
(x = -1; y = 0)North
(x = 0; y = 1)South
(x = 0; y = -1)
Direction leftTurn()
- 获取
Direction
,如果你犯了一个左转,你会得到。
- 获取
Direction RightTurn()
- 获取
Direction
,如果你做了一个向右转,你会得到。
- 获取
ReadOnlyBoard
这是您访问董事会的班级。您可以显示显示了玩家位置的木板的局部视图(20x20),也可以仅包含谁拥有和声明木板位置信息的全局视图(整个木板)。这也是您获得职位的地方。
SquareRegion getBounds()
- 检索电路板的尺寸。
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
- 获取董事会的全球地图。
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
- 与相同
getGlobal()
,除了它限制播放器周围20x20的区域,并显示播放器位置。
- 与相同
Point2D getPosition(SplixPlayer me)
- 获取玩家的位置。用作
board.getPosition(this)
。
- 获取玩家的位置。用作
Point2D getSelfPosition(ReadOnlyBoard)
- 获得您在董事会中的位置。用法:
Point2D mypos = getSelfPosition(board)
- 获得您在董事会中的位置。用法:
ReadOnlyGame
ReadOnlyGame
仅允许通过进入游戏中剩余的转数int getRemainingIterations()
。
ReadOnlySplixPoint
HiddenPlayer getClaimer()
- 获取
HiddenPlayer
声称分数的人的版本-宣称=线索。
- 获取
HiddenPlayer getOwner()
- 了解谁拥有观点。
HiddenPlayer getWhosOnSpot()
- 如果播放器位于此点上,则返回它的隐藏版本。仅适用于
getLocal()
。
- 如果播放器位于此点上,则返回它的隐藏版本。仅适用于
Point2D
与此处的其他类不同,Point2D
该类包含在KotHComm库中。com.nmerrill.kothcomm.game.maps.Point2D
Point2D(int x, int y)
int getX()
int getY()
Point2D moveX(int x)
Point2D moveY(int y)
Point2D wrapX(int maxX)
- 将
x
值包装在的范围内maxX
。
- 将
Point2D wrapY(int maxY)
- 将
y
值包装在的范围内maxY
。
- 将
int cartesianDistance(Point2D other)
- 这转化为玩家从点a移到点b需要转多少圈。
Clojure支持
Clojure编译器与捆绑在一起SplixKoTH-all.jar
,因此您可以将Clojure用于您的机器人!请参阅我的文章random_bot
以了解如何使用它。
调试机器人
控制器带有调试器以帮助测试策略。要启动它,请运行带有该--gui
选项的jar 。
为了调试器附加到您的罐子,请按照这些指示的IntelliJ,或者这些说明适用于Eclipse(Eclipse版本未经测试)。
如果您在代码中使用调试器,则可以使用它来帮助可视化您的机器人所看到的内容。makeMove
在您的漫游器的开始处设置一个断点,并确保它仅暂停当前线程。接下来,单击UI上的开始按钮,然后逐步执行代码。
现在,将它们放在一起:
正在运行的机器人
要与其他人一起运行您的机器人,您需要在发布页面上运行jar。这是标志列表:
--iterations
(-i
)<=int
(默认500
)- 指定要运行的游戏数。
--test-bot
(-t
)<=String
- 仅运行该机器人所包含的游戏。
--directory
(-d
)<=路径- 从中运行提交的目录。使用它来运行您的机器人。确保您的漫游器位于名为的路径的子文件夹中
java
。
- 从中运行提交的目录。使用它来运行您的机器人。确保您的漫游器位于名为的路径的子文件夹中
--question-id
(-q
)<=int
(仅使用126815
)- 从站点下载并编译其他提交。
--random-seed
(-r
)<=int
(默认为随机数)- 给跑步者撒一粒种子,这样使用随机的机器人就可以复制结果。
--gui
(-g
)- 运行调试器ui而不是运行锦标赛。最好与结合使用
--test-bot
。
- 运行调试器ui而不是运行锦标赛。最好与结合使用
--multi-thread
(-m
)<=boolean
(默认true
)- 在多线程模式下运行比赛。如果您的计算机具有多个核心,则可以更快地获得结果。
--thread-count
(-c
)<=int
(默认4
)- 如果允许多线程,则要运行的线程数。
--help
(-h
)- 打印与此类似的帮助消息。
要运行此页面上的所有提交,请使用java -jar SplixKoTH-all.jar -q 126815
。
格式化您的帖子
为了确保控制器可以下载所有机器人,您应遵循以下格式。
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
另外,请勿使用包声明。
计分板
+------+--------------+-----------+
| Rank | Name | Score |
+------+--------------+-----------+
| 1 | ImNotACoward | 8940444.0 |
| 2 | TrapBot | 257328.0 |
| 3 | HunterBot | 218382.0 |
+------+--------------+-----------+
如果规则的任何部分不清楚,或者您在聊天室的控制器中发现任何错误,请告诉我。