Ракетные Боты
Год 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