Ракетні боти
Рік 3024. Люди стали надто дефіцитним ресурсом, щоб ризикувати війною, тому боротьба перейшла до роботів. Ваше завдання - сконструювати бота, як ніхто інший, хто ракети дощу знищить на ваших ворогів і збиває всі вхідні загрози.
Ігровий процес
Боти
Гра відбувається на сітці 10х15. Ваш бот розташований від нижнього краю та має три прорізи в місцях 6,7 та 8 сітки. Ваш опонент розташований у верхній частині сітки, з трьома слотами навпроти вашого.
Ракети
З будь-якого з цих слотів ви можете вистрілити ракету, якщо припустити, що гніздо не було знищено. Ракета складається зі списку напрямків, які даються їй під час створення, і щойно вистрілені ці напрямки не можуть бути змінені. Кожного повороту ракета буде споживати верхню частину списку і рухатись у цьому напрямку. Ракети рухаються одночасно. Якщо дві ракети закінчуються в одній плитці, вони обидві вибухнуть. Якщо у ракети не вистачить команд, вона вибухне. Якщо у ракети закінчиться паливо, через 100 рухів вона вибухне. Коли ракета вибухне, вона залишиться в цій плитці протягом 5 оборотів, внаслідок чого будь-які інші ракети, які рухаються туди, також вибухнуть.
Примітка: Через одночасний рух дві ракети можуть проходити одна одну, не вибухаючи, якщо вони не закінчать поворот у одній плитці.
Мета
Мета кожного матчу - знищити опонентів, залишаючи живими. Ракету можна вистрілити з будь-якого живого слота, і їй буде наданий шлях, визначений вами до того, як він буде вистрілений. Ви вистрілюєте ракету кожен другий хід, тобто ракети рухатимуться двічі, перш ніж ви зможете вистрілити ще одну. Поєдинок триває 200 оборотів або поки всі боти не будуть знищені.
Оцінка балів
В кінці матчу ви отримуєте один бал за кожний живий слот, який ви маєте, і один бал за кожен винищений слот суперника. Це означає, що це гра з нульовою сумою, і 6 балів будуть присуджуватися за кожен матч.
Круглий робот буде запускатися так, що кожен бот стикається один з одним ботом один раз. Якщо будь-які боти використовують RNG, то на кожний матч буде 1000 дуелів.
Впровадження
Код змагань можна знайти тут: https://github.com/Cain93/RocketBots
Кожне подання повинно розширити Bot
клас. Ви повинні перекрити fireRocket
метод. Цей метод отримує сітчастий масив Rockets Rocket[][]
, який представляє ігровий майданчик. Ви завжди розташовані в нижній частині сітки, з прорізами в точках [-1][6]
, [-1][7]
, [-1][8]
. На сітці незайняті плями будуть представлені с null
. Якщо ракета існує в плитці, ви можете визначити, кому вона належить, відкривши dis
поле. "^" - це ваша ракета, а "v" - ваші опоненти.
Ви повинні повернути LinkedList of Integers, який дає інструкції для вашої ракети. Щоб рухатись вгору, використовуйте 0. Щоб рухатись вгору та вправо, використовуйте 1, праворуч, 2 та ін, аж до 7 вгору та вліво. Ракета рухатиметься в тому порядку, в якому ви натискаєте Цілі. Наприклад, наступний код змусить ракету просунутися вгору на кілька поворотів, зіггіруючи кілька витків, а потім підірве.
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
Щоб змінити, з якого гнізда випалити ракету, змініть curSlot
поле. 0 - ваш крайній лівий проріз, а 2 - ваш правий крайній край. Щоб перевірити, чи слот знищений, використовуйте getSlot(int slotNumber)
.
Якщо ракета закінчиться поворотом на гнізді, ця гнізда буде знищена. Не потрібно вручну детонувати ракету.
Примітка: Ракети нерестуються в місці виїмки з гнізда, але рухаються один раз, перш ніж зіткнення будуть оцінені. Тож якщо ви вистрілите ракету з гнізда 0 і перший хід буде правильним (2), ви знищите власний середній гніздо. Однак вгору і вправо (1) - безпечний рух.
Якщо ви хочете назвати свого бота, замініть name()
метод.
Боти будуть відновлені для кожного поєдинку, тому будь-які статичні змінні будуть скинуті.
Щасти!
Нехай ваші ракети літатимуть справжньо, а для ваших опонентів не буде нічого, крім тліючих металобрухтів.
Підказка:
Цілеспрямовано підірвати ракети для створення вибухів - це простіший спосіб захисту, ніж спроба збивати ракети противника.
Приклад Бот
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
Оцінки
Оцінки 6-24
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324