Ви заповзятлива точка, яка хоче збільшити землю під її контролем. Це досить просто - виїжджайте за межі своєї поточної землі і повертайтеся назад у свою землю, і все, що знаходиться в цій петлі, зараз належить вам. Але є улов. Якщо якась інша крапка якось знайде вашу петлю і перетне її, ти помреш.
Якщо ви ще не пробували цього, перейдіть на Splix.io і спробуйте гру. Використовуйте клавіші зі стрілками для управління своїм рухом.
GIF
Кредит: http://splix.io/
Особливості
Усі гравці починаються з випадкових позицій на дошці 200x200. (Я залишаю за собою право змінити це :). У вас буде певна кількість рухів, щоб набрати якомога більше очок. Бали підсумовані:
- Кількість гравців, яких ви вбили разів 300
- Кількість землі, якою ви володієте в кінці раунду
Це означає, що інші можуть вкрасти вашу землю. Якщо вони почнуть цикл, який перетинає частину вашої землі, вони можуть заявити про це. Якщо ви помираєте під час раунду, ви втрачаєте всі бали за цей раунд.
У кожному раунді є випадково вибрана група гравців (максимум 5 унікальних гравців) (можуть змінюватися). Кожен гравець бере участь у рівній кількості раундів. Кінцевий бал вашого бота визначається середнім балом за гру. Кожна гра складається з 2000 оборотів (також можуть змінюватися). Усі боти роблять свої кроки одночасно.
Випадки смерті
Головний приклад
Обидва гравці вмирають, коли вони головою торкаються один одного. Це все ще справедливо, навіть коли обидва гравці знаходяться на межі свого простору.
Однак, коли лише один із гравців знаходиться на його землі, другий гравець гине.
Лінійний хрест
У цьому випадку гине лише фіолетовий гравець.
Ви не можете перетнути свою власну лінію.
Вихід із дошки
Якщо гравець намагається вийти з дошки, він помре і втратить усі очки.
Захоплення площі
Гравець захопить область, коли у нього є слід, і він знову потрапить у власну землю.
Червоний колір заповнює між двома червоними лініями. Єдиний випадок, коли гравець не заповнить, це коли інший гравець знаходиться в циклі. Щоб було зрозуміло, це стосується лише тоді, коли інший гравець сам перебуває у циклі, а не лише у власності на нього землі. Гравець може захопити землю у іншої людини. Якщо гравець не може заповнити територію, оточену його слід, слід перетворюється безпосередньо на звичайну землю. Якщо гравець всередині іншого гравця замикає цикл, область в цьому циклі заповнюється. Кожен раз, коли гравець помирає, дошка переглядається на область, яку можна заповнити.
Деталі контролера
Контролер тут . Він дуже схожий на оригінальну гру, але були внесені невеликі зміни, щоб зробити це краще придатним для KotH і з технічних причин. Він побудований з @NathanMerrill «s бібліотеки KotHComm , при істотній допомозі від @NathanMerrill , а також. Будь ласка, повідомте мені про будь-які помилки, які ви знайдете в контролері в чаті . Щоб відповідати KotHComm, я використовував колекції Eclipse у всьому контролері, але боти можна писати, використовуючи лише бібліотеку Java Collections.
Все упаковано в uberjar на сторінці випусків github . Щоб скористатися ним, завантажте його та приєднайте до свого проекту, щоб ви могли використовувати його для автоматичного заповнення (інструкції для IntelliJ , Eclipse ). Щоб перевірити свої матеріали, ви запускаєте банку 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)
- Тут ви вирішите, який хід хочете зробити вашим ботом. Потрібно не повернути нуль.
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
опцією.
Щоб приєднати налагоджувач до вашої банки, дотримуйтесь цих інструкцій для IntelliJ або цих інструкцій для Eclipse (версія Eclipse не перевірена).
Якщо ви використовуєте відладчик зі своїм кодом, ви можете використовувати це, щоб візуалізувати, що бачить ваш бот. Встановіть точку перерви на початку makeMove
свого бота та переконайтесь, що вона лише призупиняє поточну нитку. Далі натисніть на кнопку запуску в інтерфейсі користувача і перегляньте свій код.
Тепер, щоб скласти все це разом:
Запуск ботів
Щоб запустити своїх ботів з іншими, вам потрібно запустити банку на сторінці випусків. Ось список прапорів:
--iterations
(-i
) <=int
(за замовчуванням500
)- Вкажіть кількість ігор для запуску.
--test-bot
(-t
) <=String
- Запускайте лише ігри, до яких включений бот.
--directory
(-d
) <= Шлях- Каталог, з якого слід запускати матеріали. Використовуйте це для запуску своїх ботів. Переконайтеся, що ваші боти знаходяться у підпапці названого шляху
java
.
- Каталог, з якого слід запускати матеріали. Використовуйте це для запуску своїх ботів. Переконайтеся, що ваші боти знаходяться у підпапці названого шляху
--question-id
(-q
) <=int
(тільки використовувати126815
)- Завантажте та складіть інші матеріали з сайту.
--random-seed
(-r
) <=int
(за замовчуванням випадкове число)- Дайте насіння бігуну, щоб боти, які використовують випадково, змогли відтворити результати.
--gui
(-g
)- Запустіть інтерфейс налагодження замість запуску турніру. Найкраще використовувати з
--test-bot
.
- Запустіть інтерфейс налагодження замість запуску турніру. Найкраще використовувати з
--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 |
+------+--------------+-----------+
Будь ласка, повідомте мене, якщо будь-яка частина правил є незрозумілою або ви виявили помилки в контролері в чаті .