Вступ
У цій грі гравці використовують свої армії для боротьби з арміями інших гравців, захоплення територій і стають останньою людиною, що стоїть. Кожного кроку гравці отримують базову кількість армій, які використовуватимуть у своєму розпорядженні. Однак, захоплюючи території в певних регіонах, гравці можуть збільшити цю кількість, щоб надавати їм потенційну перевагу пізніше в грі. (Це по суті те саме, що і Warlight ).
Усі боти повинні бути написані на Java, C або C ++ (я б включав інші мови, але не маю програмного забезпечення або досвіду для них). Не потрібно, щоб ваше представлення розширювало клас, і ви можете створювати функції, класи, інтерфейси чи все інше, що потрібно, і використовувати будь-який пакет або клас у стандартних API . Якщо ви плануєте створити клас або інтерфейс, будь ласка, подумайте про використання внутрішнього класу чи внутрішнього інтерфейсу.
Будь ласка, не намагайтеся програматично змінювати контролер або інші матеріали в цьому змаганні.
Ігровий процес
Огляд
Двовимірний масив розміром 10x10 буде імітувати дошку, кожен елемент / комірка представляє "територію". Буде 20 раундів і до 1000 оборотів на раунд. Кожен поворот гравці спочатку розгортатимуть армії, які вони мають, на будь-яку територію, якою вони володіють, а потім отримують можливість транспортувати свої армії на довколишні території, намагаючись захопити території противника, атакуючи армії в них. Гравці повинні розгорнути всі свої армії, але їм не потрібно переміщувати їх за бажанням.
Напад / перекидання армій
Якщо гравець забажає, він / вона може відправити армії з однієї території на будь-яку з восьми сусідніх. Дошка "загортається", тобто якщо територія гравця знаходиться з одного боку, армії з неї можуть бути перенесені на сусідню територію з іншого боку. Під час переміщення армій з території на цій території все одно має бути принаймні одна армія. Наприклад, якщо територія містить п'ять армій, не більше чотирьох можна перемістити на іншу територію; якщо територія містить її, ця армія не може рухатися.
Якщо гравець направляє n
армії з однієї території на іншу, яка їм належить, ця територія отримає n
армії.
Скажімо, гравець відправляє n
армії зі своєї території на протилежну територію з o
арміями. o
зменшиться на n * .6
округлене до найближчого цілого числа; проте в той же час n
зменшиться на o * .7
округлене до найближчого цілого числа. Діють такі правила, які стосуються того, чи була захоплена протилежна територія чи ні:
- Якщо
o
досягне нуля ANDn
більший за 0, гравець захопить територію, на якій будутьn
армії. - Якщо обидва
n
іo
стануть нульовими,o
автоматично буде встановлено 1, а територія не буде захоплена. - Якщо
o
залишиться більше 0, кількість армій на території гравця збільшиться,n
а протилежна територія не буде захоплена.
Бонуси
Група територій буде обрана для представлення премії; якщо один гравець володіє всіма територіями, що входять до групи, той гравець отримуватиме додаткову кількість армій за оборот.
Бонуси мають ідентифікаційні номери для позначення різних значень та значень, які представляють додаткову кількість армій, які може отримати гравець. Кожен раунд, значення бонусу буде випадковим числом від 5 до 10 включно, і на полі будуть доступні десять бонусів, кожен з яких десять територій, включених до бонусу.
Наприклад, якщо гравець, який отримує 5 армій за оборот, володіє усіма територіями, які складають бонус із значенням 8, гравець отримає 13 армій у наступному та наступних оборотах. Якщо ж гравець втратить одну або декілька територій, які складають бонус, він або вона отримає всього 5 армій за оборот.
Введення-виведення
Ваша програма повинна приймати дані через аргументи командного рядка, які матимуть наступний формат:
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
id
іarmies
обидва цілі числа.id
- це ваш ідентифікатор, іarmies
це кількість армій, яку потрібно розмістити на своїх територіях. Ви повинні розгорнути всі надані вам армії - не більше і не менше.territories
- це ряд рядків, що представляють території, якими ви володієте, та території, якими ви не володієте, прилеглі до вашої. Рядки є в такому форматі:[row],[col],[bonus id],[player id],[armies]
row
іcol
вкажіть рядок і стовпчик дошки, де знаходиться територія,bonus id
ідентифікатор бонусу, до складу якого входить ця територія,player id
- ідентифікатор гравця, якому належить територія, іarmies
кількість армій, що містяться на території. Це все числа.bonuses
- це ряд рядків, що представляють бонуси на дошці, якими ви можете скористатися. Рядки є в такому форматі:[id],[armies],[territories left]
id
- це ідентифікатор бонусу,armies
- це кількість зайвих армій, які ви можете отримати, володіючи всіма територіями в цьому бонусі, іterritories left
це кількість територій в бонусі, які вам потрібно захопити, щоб отримати додаткові армії.
Зверніть увагу, що п'ятий аргумент, "X", з'явиться, якщо це перший виток раунду і його можна використовувати з міркувань зручності.
Приклад введення в першу чергу:
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
Ваша програма повинна виводити два рядки, розділені новим рядком, перший з яких перераховує рядки та стовпці територій, до яких потрібно додати армії, та кількість армій, до яких потрібно додати, а другий з них містить рядки та стовпчиків територій, на які потрібно відправити армії, та кількості армій, на які потрібно відправити. Вихід може містити пробіли.
Щоб вказати територію, до якої потрібно додати армії, ваш вихід повинен відповідати такому формату:
[row],[col],[armies]
row
і col
це рядок і стовпець дошки, де знаходиться територія, до якої потрібно додати армію, і armies
кількість армій, яку ви хочете додати до території.
Щоб визначити, на які території потрібно відправити армії, ваш вихід повинен відповідати такому формату:
[srow],[scol],[drow],[dcol],[armies]
srow
і scol
це рядок і стовпець дошки, куди перебуває територія, з якої ви хочете перевезти армії, drow
і dcol
це рядок і стовпець дошки, куди є територія, на яку ви хочете відправити армії, і armies
кількість армій, яку ви хочете відправити. . Зауважте, що якщо ви не хочете переміщувати жодної армії, ваша програма повинна надрукувати пробіл.
Вибірка вибірки може бути такою:
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
У цьому випадку гравець розгортає п'ять армій на територію на 0,0 і переміщує три армії від 0,0 до 0,1; три від 0,0 до 1,0; і три від 0,0 до 1,1.
Круги і повороти
На початку кожного раунду всім гравцям буде надана одна територія, розташована у випадковій точці на дошці (можливі два та більше гравців, що починаються поруч). Території, які складають бонус, також можуть змінюватися.
На першому кроці кожен гравець матиме одну територію, яка містить п'ять армій, і вони отримають п'ять армій, які вони можуть використовувати (це мінімум, який вони можуть отримати). Усі інші території перебувають у власності НПС, які не атакують; кожна з них містить дві армії і має ідентифікатор -1
.
Кожен виток вашої програми буде запускатися, і обидва фрагменти продукції будуть зібрані. Контролер негайно застосує перший фрагмент виводу, додавши армії до територій; однак контролер буде чекати, поки всі гравці дадуть свій другий фрагмент виводу, свої команди атаки / передачі. Після того, як це буде завершено, команди будуть переміщуватися випадковим чином і потім виконуватись. Ваша програма повинна забезпечити вихід і завершитись протягом однієї секунди або менше, щоб брати участь у черзі.
Зарахування та перемога
За будь-який раунд, якщо залишиться один гравець, той гравець заробить 100 очок. В іншому випадку, якщо пройде 1000 оборотів і ще є кілька гравців, 100 очок будуть розподілені рівномірно між рештою гравцями (тобто 3 гравці, що залишилися, отримують 33 очки кожен). Хто в гравця набере більше очок в кінці 20 раундів, виграє.
Подання
Ваше повідомлення повинно містити ім'я бота, мову, на якій він написаний, короткий опис його та код, який використовується для його запуску. Зразок бота буде розміщений тут як приклад і буде використовуватися в конкурсі. Ви можете подати скільки завгодно.
Інший
Ваша програма може створювати, записувати та читати з файлу до тих пір, поки ім'я файлу буде таким самим, як ім'я, яке ви використали для надсилання. Ці файли будуть видалені до початку турніру, але не між раундами.
Ваша черга буде пропущена, якщо:
- ви усунені (не маєте територій);
- ваша програма нічого не друкує;
- ваша програма не припиняється протягом однієї секунди;
- ви розміщуєте занадто мало армій на своїх територіях (розміщення армій на територіях, якими ви не володієте, буде зараховано до цього) або занадто багато армій; або
- ваш вихід призводить до того, що контролер кидає виняток.
Ваша команда атаки / передачі не буде виконана, якщо:
- ваша програма не дає правильного результату;
- ви вибираєте територію для переміщення армій, яка не є вашою;
- ви переміщуєте нульову чи негативну кількість армій зі своєї території;
- ви переміщуєте занадто багато армій зі своєї території; або
- Ви вибираєте територію для відправки армій, яка не примикає до території, з якої Ви вибрали переміщення армій.
Ви можете знайти контролер та зразок бота тут . Бот братиме участь в грі, але це , ймовірно , НЕ буде вигравати раунди (якщо це не дуже пощастило).
Результати
Запуск контролера після натискання на нього виправлення помилки, WeSwarm продовжує залишатися силою, з якою слід рахуватися. Потрібен бот із чудовою стратегією, щоб мати шанс проти цього.
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
Зауважте!
Виправлено помилку, виявлену Zsw, яка спричинила територію, яка розгорнула свої армії після інших, щоб мати потенційну перевагу в грі. Редагування було передано до контролера, тому будь ласка, використовуйте наявну версію, знайдену за посиланням вище.