Ракетные Боты
Год 3024. Люди стали слишком скудными ресурсами, чтобы рисковать на войне, поэтому борьба перешла к роботам. Ваша задача состоит в том, чтобы создать бота, как никто другой, чьи ракеты обрушат на ваших врагов разрушение и уничтожат все поступающие угрозы.
Игровой процесс
Боты
Геймплей разворачивается по сетке 10х15. Ваш бот расположен за нижним краем и имеет три слота в точках 6,7 и 8 сетки. Ваш противник находится в верхней части сетки, с тремя слотами прямо напротив вашего.
Ракеты
Из любого из этих слотов вы можете запустить ракету, предполагая, что слот не был уничтожен. Ракета состоит из списка направлений, которые даны ей при создании, и после запуска эти направления не могут быть изменены. Каждый ход ракета будет занимать верхнюю часть списка и двигаться в этом направлении. Ракеты двигаются одновременно. Если две ракеты окажутся на одной плитке, они взорвутся. Если у ракеты заканчиваются команды, она взорвется. Если у ракеты заканчивается топливо, через 100 ходов она взорвется. Когда ракета взорвется, она останется в этой клетке на 5 ходов, что приведет к взрыву любых других ракет, которые движутся туда.
Примечание: из-за одновременного движения две ракеты могут проходить друг без друга, не взорвавшись, если они не заканчивают ход в одной и той же плитке.
Цель
Цель каждого матча - уничтожать слоты противников, сохраняя при этом свои. Ракета может быть запущена из любого живого слота, и у вас есть путь, обозначенный вами до ее запуска. Вы запускаете ракету каждый второй ход, то есть ракеты будут двигаться дважды, прежде чем вы сможете запустить еще одну. Дуэль длится 200 ходов, или пока все слоты одного бота не будут уничтожены.
счет
В конце матча вы получаете одно очко за каждый слот, который у вас есть, и одно очко за каждый слот противника, которого вы уничтожили. Это означает, что это игра с нулевой суммой, и 6 очков будут начисляться в каждом матче.
Будет запущен круговой робин, так что каждый бот будет один раз лицом к лицу. Если какие-либо боты используют RNG, то вместо каждого матча будет 1000 дуэлей.
Реализация
Код для конкурса можно найти здесь: https://github.com/Cain93/RocketBots
Каждое представление должно расширять Bot
класс. Вы должны переопределить fireRocket
метод. Этот метод получает сетку Рокетс, Rocket[][]
представляющую игровую доску. Вы всегда расположены в нижней части сетки, с прорезями в точках [-1][6]
, [-1][7]
, [-1][8]
. На сетке незанятые пятна будут представлены с помощью null
. Если в плитке существует ракета, вы можете определить, кому она принадлежит, путем доступа к dis
полю. «^» - ваша ракета, а «v» - ваши противники.
Вы должны вернуть LinkedList из целых чисел, который дает инструкции для вашей ракеты. Для перемещения вверх используйте 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
источник
Ответы:
Защитник
Защитник использует новый тип защиты: ракеты патрулируют перед слотами. Это дает огромное преимущество, поскольку ракеты живут 100 витков вместо 5 витков (как взрывы).
источник
Zigzagoon
Внешние слоты становятся (немного) широкими, затем направляются вперед и возвращаются к вражеским слотам. Средняя щель стреляет зигзагообразным узором вверх по середине.
Каждый второй раунд (3 хода) он переходит в режим защиты и просто взрывает несколько ракет возле моих собственных слотов. Ракеты в режиме атаки, затем обойдите их. Ничего особенного, просто что-то, чтобы начать конкурс.
источник
терминатор
Я с гордостью представляю Терминатор !!!
Каждая ракета движется далеко влево / вправо от середины и возвращается на вражеский слот. Каждые два оборота, ракета защиты запускается прямо и взрывается рядом с прорезью, чтобы защитить ее.
источник
HatTrickBot
У меня был DoubleTapBot для CodeBot 3, который дважды бил по ходу, вот и HatTrickBot: удар по всем 3 точкам одновременно!
Всегда можно предотвратить попадание ракеты, если вы знаете, куда она упадет. Но я не думаю, что есть много ботов, которые смогут защитить свои слоты от 3 ракетных атак.
Между прочим, да, это ужасно видеть такое еще с повторным переключением. Я мог бы создать переменную для включения с уникальными значениями для каждой комбинации статуса слотов и turnConter. Но это будет сложнее читать (мне нужно сохранить значение значений в комментарии ... скучно!) :)
источник
Черепаха
Если я защищаю все свои базы, у меня есть 3 очка. Базы могут быть атакованы только из 5 мест, если я хорошо получаю сетку. Ракета длится 5 оборотов на поле ...
Этот бот использует все это, чтобы соответствовать своей цели: выжить с минимум 50% очков в кармане. Стреляет 3 ракеты, затем прикрывает себя
источник
SideShooter
Первые выстрелы через первую (крайнюю правую) башню одним из двух способов. Затем он стреляет через последнюю (самую левую) башню одним из двух способов. Затем он создает «стену» со второй (средней) башней, взорвав ракеты перед каждой башней. Этот процесс повторяется.
Если игра длится более 30 ходов, SideShooter становится скучно и меняется незначительно. Вместо того, чтобы делать «стену» со второй (средней) башней, она стреляет прямо. Остальные турели ведут себя так же.
источник
do...while
утверждение сделать бесконечный цикл ...снайпер
Снайпер сначала блокирует свои две стороны, а затем начинает стрелять прямо.
источник
Три выстрела
Мы получили несколько странных выстрелов. Нет истинной защиты, но схема такова, что будет трудно пробить этот причудливый град ракет. (или это идея. это, скорее всего, не будет работать.)
Запись
источник
MoreDakka
MoreDakka стреляет в пяти направлениях без остановки (пока башни не будут разрушены другими ракетами).
источник
StraightShot
Просто стреляй прямо в них.
источник
Вот моя собственная запись
WALLE
Стреляет несколько смещенных ракет и строит стены по его краям и центру. После 100 ходов начинает нацеливаться на средний слот.
источник