Давайте грати Kick The Can!
Хоча Moogie - теперішній переможець, якщо хтось може взяти його корону, їм рекомендується це зробити
Удар бляшанки - це дитяча гра. Залучення одного захисника та кількох нападників. Сьогодні це вже не така гра! Ваше завдання - написати бота, який грає в нього, щоб виграти, королівський стиль!
https://en.wikipedia.org/wiki/Kick_the_can
У цій грі є деякі ключові відмінності. Перша ключова відмінність полягає в тому, що гра є багатокористувацькою (5v5). Друга ключова відмінність полягає в тому, що обидва набори ботів можуть вбивати та знищувати ворожих гравців з обох мін та кинутих бомб! Боти не можуть бачити жодної міни (незалежно від відстані) та гравців, розташованих на відстані понад п’ять блоків!
Карта - це лабіринт наступним чином.
Цей лабіринт процедурно генерується спочатку створення лабіринту, використовуючи алгоритм зворотного відстеження першого глибини. А потім розміщуючи показані отвори (а також зробіть лабіринт більш "недосконалим". Лабіринт шириною блоків 65x65 та нульовим індексом. Таким чином, синій прапор (can) знаходиться на рівні 1,1, а червоний прапор (can) - в 63,63. Блакитна команда породжує в 2,2 і 3,3 4,4 і т.д. червона команда породжує в 62,62 і 61,61, 60,60 і т. д. Блоки в блакитному кольорі - боти на синій команді, і блоки в пурпуровий колір - це червоні боти. Гра завжди п'ять проти п'яти. Кожен бот команди використовує ваш код (але може зберігати інші змінні екземпляри (або створювати локальні файли) для відстеження стану та диференціації ролей.
Ігровий процес
Міни можна розмістити, як ви бачите, сірим кольором. А бомби можна кидати на максимальну відстань до чотирьох блоків. Вони подорожують до чотирьох блоків через стіни та інших гравців, вбиваючи лише ворогів, які стоять на вашому шляху. Після кожного кроку у них є 40% шансу впасти. Таким чином, у них 100% шанс на 1 дальність 60% при 2 дальності 36% на 3 дальності і 21,6% на три дальності Розміщення міни або метання бомби займає боєприпаси однієї команди. Це починається з 0 і може бути збільшено, зібравши помаранчеві поля. Зауважте, що чотири (4) цих сховища боєприпасів будуть зручно розміщені по центру. Боти вишикуються у масив із двох червоних та двох синіх. IE RRRRRBBBBB. Гаурдінг прапора дозволений, але слід пам’ятати, що перебування біля прапора (тобто менше п’яти блоків) призводить до повільності, і дозволяє лише нахиляти. кожні три витки. Арена вибирає випадковий стартер на кожен крок. Я
Об'єктивна
Програмуйте свої п'ять ботів (кожен має один і той самий файл класу), щоб успішно орієнтуватися в лабіринті і торкатися протилежної банки, одночасно стежачись, щоб випадково не перебити їх власну банку або наступити на міну.
Програмування
Записи на арені та боті зараз перебувають на Java, однак для інших мов існує обгортка stdin / out.
Код арени буде доступний, але ось відповідні деталі.
Клас ботів
public class YourUniqueBotName extends Bot{
public YourUniqueBotName(int x , int y, int team){
super(x,y,team);
//optional code
}
public Move move(){//todo implement this method
//it should output a Move();
//A move has two paramaters
//direction is from 0 - 3 as such
// 3
// 2-I-0
// 1
// a direction of 4 or higher means a no-op (i.e stay still)
//And a MoveType. This movetype can be
//MoveType.Throw
//MoveType.Mine
//MoveType.Defuse defuse any mine present in the direction given
//MoveType.Move
}
}
Основні доступні методи
Зауважте, що використання будь-яких методів для зміни або доступу до даних, до яких, як правило, не маєте доступу, заборонено, і це призведе до дискваліфікації.
Arena.getAmmo()[team];//returns the shared ammo cache of your team
Arena.getMap();//returns an integer[] representing the map. Be careful since all enemies more than 5 blocks away (straight line distance) and all mines are replaced with constant for spaces
//constants for each block type are provided such as Bot.space Bot.wall Bot.mine Bot.redTeam Bot.blueTeam Bot.redFlag Bot.blueFlag
Arena.getAliveBots();//returns the number of bots left
getX();//returns a zero indexed x coordinate you may directly look at (but not change X)
getY();//returns a zero indexed y coordinate (y would work to, but do not change y's value)
//Although some state variables are public please do not cheat by accessing modifying these
Специфікація інтерфейсу обгортки StdIn / Out
Інтерфейс складається з двох режимів: ініціалізації та запуску.
Під час режиму ініціалізації один кадр INIT надсилається через stdout. Специфікація цього кадру така:
INIT
{Team Membership Id}
{Game Map}
TINI
Де: {Ідентифікація членства команди} - це один символ: R або B. B означає синю команду, R означає червону команду.
{Game Map} - це ряд рядків символів ascii, що представляють один рядок карти. Наступні такі символи ascii: F = синій прапор G = червоний прапор O = відкритий простір W = стіна
Потім гра перейде до надсилання ігрових кадрів через stdout кожному боту:
FRAME
{Ammo}
{Alive Bot Count}
{Bot X},{Bot Y}
{Local Map}
EMARF
Де:
{Ammo} - рядок цифр, значення буде 0 або більше {Alive Bot Count} - рядок цифр, значення буде 0 або більше {Box X} - рядок цифр, що представляють координату X бота на ігровій карті. Значення буде 0 <= X <Ширина карти. {Box Y} - рядок цифр, що представляють координату Y бота на ігровій карті. Значення буде 0 <= Y <Висота карти. {Local Map} - це ряд рядків символів ascii, що представляють всю карту навколо бота. Наступні такі символи ascii: F = синій прапор G = червоний прапор O = відкритий простір W = стіна R = червоний бот команди B = синій бот команди M = мій A = боєприпаси
Контролер очікує, що ваш бот потім виведе (для викреслювання) відповідь однієї лінії у форматі:
{Action},{Direction}
Де:
{Action} є одним із: Перемістити знешкодження мінного кидання
{Напрям} - це одна цифра від 0 до 4 включно. (див. інформацію про напрямок раніше)
ПРИМІТКА: всі рядки будуть обмежені символом \ n Кінець рядка.Це буде елімінаційний турнір. Мої боти-зразки братимуть участь в якості наповнювачів, але я не буду присуджувати собі перемогу. У разі перемоги одного з моїх ботів титул переходить до другого учасника та продовжуватиметься, поки не знайдеться бот, який не є моїм. Кожен матч складається з 11 раундів удару по банці. Якщо жодна команда не виграла жодного матчу, вони обидва виключаються. Якщо виграв равний нульовий бал, буде розіграний матч з вимикачем. Якщо краватка залишилася, обидва усуваються. Пізніші раунди можуть складатися з більшої кількості матчів. Посів турніру буде ґрунтуватися на кількості оновлених даних станом на 31.07.16 (дата може змінюватися).
Кожен матч триває 4096 оборотів. Перемога дає один бал. Равномірний чи збитковий результат дає нульові бали. Удачі!
Не соромтеся ознайомитись з кодом або критикувати його в цьому GitHub Repo.
https://github.com/rjhunjhunwala/BotCTF/blob/master/src/botctf/Arena.java
Зауважте, що у мене на комп’ютері немає перекладачів для занадто багато мов, і мені можуть знадобитися добровольці для запуску моделювання на своєму комп’ютері. Або я можу завантажити перекладача мови. Будь ласка, переконайтесь, що ваші боти.
- Відповідайте за розумну кількість часу (скажімо, 250 мс)
- Не пошкодить мій хост-апарат