- 22, Oct 2024
- #1
Ты предприимчивая точка который хочет увеличить земли под своим контролем. Это довольно просто: выйдите за пределы своей нынешней земли и вернитесь на свою землю, и все, что находится в этой петле, теперь принадлежит вам. Но есть одна загвоздка. Если какая-то другая точка каким-то образом найдет вашу петлю и пересечет ее, вы умрете.
Если вы еще не пробовали, зайдите на Splix.io и попробуйте игру. Используйте клавиши со стрелками, чтобы контролировать свое движение.
гифка
Кредит: http://splix.io/
Особенности
Все игроки начинают со случайных позиций на доске 200x200. (Оставляю за собой право изменить это :). У вас будет определенное количество ходов, чтобы набрать как можно больше очков. Баллы подсчитываются по:
- Количество убитых вами игроков, умноженное на 300
- Количество земли, которой вы владеете в конце раунда
Это поднимает вопрос о том, что другие могут украсть вашу землю. Если они начнут петлю, пересекающую часть вашей земли, они смогут претендовать на нее. Если вы умрете во время раунда, вы потеряете все очки за этот раунд.
В каждом раунде участвует случайно выбранная группа игроков (максимум 5 уникальных игроков) (возможны изменения). Каждый игрок участвует в равном количестве раундов. Итоговый результат вашего бота определяется его средним баллом за игру. Каждая игра состоит из 2000 ходов (также возможны изменения). Все боты делают свои ходы одновременно.
Случаи смерти
Голова
Оба игрока умирают, когда сталкиваются головой. Это по-прежнему верно, даже когда оба игрока находятся на краю своего пространства.
Однако, когда только один из игроков находится на своей земле, другой игрок умирает.
Линия Креста
В этом случае умирает только фиолетовый игрок.
Нельзя переступать свою линию.
Выход из доски
Если игрок попытается покинуть доску, он умрет и потеряет все очки.
Область захвата
Игрок захватит территорию, когда у него появится след и он снова войдет на свою землю.
Красный цвет заполняет пространство между двумя красными линиями. Единственный случай, когда игрок не заполняет поле, — это когда другой игрок находится внутри цикла. Чтобы внести ясность, это применимо только тогда, когда в курсе событий сам другой игрок, а не только принадлежащая ему земля. Игрок может захватить землю у другого человека. Если игрок не может заполнить область, окруженную своим следом, след преобразуется в обычную землю. Если игрок внутри петли приземления другого игрока умирает, область в этой петле заполняется. Каждый раз, когда игрок умирает, доска снова просматривается в поисках области, которую можно заполнить.
Детали контроллера
Контроллер здесь. Она очень похожа на оригинальную игру, но в нее были внесены небольшие изменения, чтобы лучше подходить для KotH, а также по техническим причинам. Он построен с @НатанМеррилл's Библиотека КотХКомм, а также при существенной помощи @NathanMerrill. Пожалуйста, сообщите мне о любых ошибках, которые вы обнаружите в контроллере в чат. Чтобы соответствовать KotHComm, я использовал коллекции Eclipse во всем контроллере, но ботов можно писать только с использованием библиотеки Java Collections.
Все упаковано в убержар на упаковке. страница релизов на github. Чтобы использовать его, загрузите его и прикрепите к своему проекту, чтобы можно было использовать его для автозаполнения (инструкции по IntelliJ, Затмение). Чтобы проверить свои материалы, вы запускаете jar с помощью
. Ensure that+------+--------------+-----------+ | Rank | Name | Score | +------+--------------+-----------+ | 1 | ImNotACoward | 8940444.0 | | 2 | TrapBot | 257328.0 | | 3 | HunterBot | 218382.0 | +------+--------------+-----------+
[BotName], Java // this is a header
// any explanation you want
[BotName].java // filename, in the codeblock
[code]
имеет подпапку с именем java -jar SplixKoTH-all.jar -q 126815
, and to place all your files there. Do not use package names in your bots (although it may be possible with KotHComm, it's just a bit more trouble). To see all options, use -h
. Чтобы загрузить всех ботов, используйте --help
.
Написание бота
Чтобы начать писать бота, необходимо расширить 4
.
-
int
- Здесь вы решаете, какой ход должен сделать ваш бот. Не должен возвращать ноль.
-
-c
- Получите
--thread-count
версияtrue
. Useful for comparing your bot to the board.
- Получите
boolean
- Ценности
-
-m
(х = 1; у = 0) -
--multi-thread
(х = -1; у = 0) -
--test-bot
(х = 0; у = 1) -
-g
(х = 0; у = -1)
-
-
--gui
- Получите
int
который вы получите, если повернете налево.
- Получите
-
-r
- Получите
--random-seed
что вы получите, если повернете направо.
- Получите
126815
Это класс, где вы получаете доступ к доске. Вы можете либо получить локальный вид (20x20) доски с показанными позициями игроков, либо глобальный вид (всю доску) только с информацией о том, кто владеет и претендует на позиции на доске. Здесь вы также получите свою позицию.
-
int
- Узнайте размер доски.
-
-q
- Получите глобальную карту доски.
-
--question-id
- То же, что
java
, except that it is limited to a 20x20 area around your player, and that it shows player positions.
- То же, что
-
-d
- Получите позицию вашего игрока. Использовать как
--directory
.
- Получите позицию вашего игрока. Использовать как
-
String
- Получите свою позицию на доске. Использование:
-t
- Получите свою позицию на доске. Использование:
--test-bot
500
only provides access to the number of turns left in the game through int
.
-i
-
--iterations
- Получите
makeMove
version of who is claiming a point - claiming = a trail.
- Получите
-
--gui
- Узнайте, кому принадлежит точка.
-
random_bot
- Если игрок находится в этой точке, верните его скрытую версию. Работает только в
SplixKoTH-all.jar
.
- Если игрок находится в этой точке, верните его скрытую версию. Работает только в
int cartesianDistance(Point2D other)
В отличие от других классов здесь, maxY
is contained in the KotHComm library. y
-
Point2D wrapY(int maxY)
-
maxX
-
x
-
Point2D wrapX(int maxX)
-
Point2D moveY(int y)
-
Point2D moveX(int x)
- Оберните
int getY()
value to be within the range ofint getX()
.
- Оберните
-
Point2D(int x, int y)
- Оберните
com.nmerrill.kothcomm.game.maps.Point2D
value to be within the range ofPoint2D
.
- Оберните
-
Point2D
- Это означает, сколько ходов потребуется игроку, чтобы переместиться из точки А в точку Б.
Поддержка Clojure
Компилятор Clojure поставляется в комплекте с getLocal()
, so you can use Clojure for your bot! Refer to my HiddenPlayer getWhosOnSpot()
чтобы увидеть, как его использовать.
Отладка бота
Контроллер поставляется с отладчиком, помогающим тестировать стратегии. Чтобы запустить его, запустите jar с помощью команды HiddenPlayer getOwner()
option.
Чтобы прикрепить отладчик к вашей банке, следуйте эти инструкции для IntelliJ или эти инструкции для Eclipse (версия Eclipse не проверена).
Если вы используете отладчик со своим кодом, вы можете использовать его, чтобы визуализировать то, что видит ваш бот. Установите точку останова в начале HiddenPlayer
on your bot, and ensure that it only pauses the current thread. Next, click the start button on the UI and step through your code.
Теперь, чтобы собрать все это воедино:
Запуск ботов
Чтобы запускать своих ботов вместе с другими, вам нужно запустить jar на странице релизов. Вот список флагов:
-
HiddenPlayer getClaimer()
(ReadOnlySplixPoint
) <=int getRemainingIterations()
(defaultReadOnlyGame
)- Укажите количество игр для запуска.
-
ReadOnlyGame
(Point2D mypos = getSelfPosition(board)
) <=Point2D getSelfPosition(ReadOnlyBoard)
- Запускайте только те игры, в которые включен бот.
-
board.getPosition(this)
(Point2D getPosition(SplixPlayer me)
) <= Путь- Каталог, из которого будут отправляться материалы. Используйте это для запуска своих ботов. Убедитесь, что ваши боты находятся в подпапке пути с именем
getGlobal()
.
- Каталог, из которого будут отправляться материалы. Используйте это для запуска своих ботов. Убедитесь, что ваши боты находятся в подпапке пути с именем
-
MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getView()
(MutableMap<com.nmerrill.kothcomm.game.maps.Point2D,ReadOnlySplixPoint> getGlobal()
) <=SquareRegion getBounds()
(only useReadOnlyBoard
)- Загрузите и скомпилируйте другие материалы с сайта.
-
Direction
(Direction RightTurn()
) <=Direction
(defaults to a random number)- Дайте начальное значение бегуну, чтобы боты, использующие случайный код, могли воспроизводить результаты.
-
Direction leftTurn()
(South
)- Запустите пользовательский интерфейс отладчика вместо запуска турнира. Лучше всего использовать с
North
.
- Запустите пользовательский интерфейс отладчика вместо запуска турнира. Лучше всего использовать с
-
West
(East
) <=enum Direction
(defaultthis
)- Запустите турнир в многопоточном режиме. Это обеспечивает более быстрый результат, если ваш компьютер имеет несколько ядер.
-
HiddenPlayer
(HiddenPlayer getThisHidden()
) <=Direction makeMove(ReadOnlyGame game, ReadOnlyBoard board)
(defaultSplixPlayer
)- Количество потоков, которые будут выполняться, если разрешена многопоточность.
-
--question-id 126815
(--help
)- Напечатайте справочное сообщение, подобное этому.
Чтобы запустить все материалы на этой странице, используйте java
.
Форматирование вашего сообщения
Чтобы контроллер мог загружать всех ботов, вам следует следовать этому формату.
path\to\submissions\folder
Кроме того, не используйте объявление пакета.
Табло
java -jar SplixKoTH-all.jar -d path\to\submissions\folder
Пожалуйста, дайте мне знать, если какая-либо часть правил неясна или если вы обнаружите какие-либо ошибки в контроллере в чат.
Веселиться!
#царь горы #java