Вступление
В этой игре игроки используют свои армии, чтобы сражаться с армиями других игроков, захватывать территории и становиться последним человеком, стоящим на ногах. Каждый ход игроки получают базовое количество армий для использования в их распоряжении. Однако, захватив территории в определенных регионах, игроки могут увеличить это число, чтобы дать им потенциальное преимущество в дальнейшем в игре. (Это по сути то же самое, что и Warlight ).
Все боты должны быть написаны на Java, C или C ++ (я бы включил другие языки, но у меня нет программного обеспечения или опыта для них). Для вашего представления необязательно расширять класс, и вы можете создавать функции, классы, интерфейсы или все, что необходимо, и использовать любой пакет или класс в стандартных API . Если вы планируете создать класс или интерфейс, рассмотрите возможность использования внутреннего класса или внутреннего интерфейса.
Пожалуйста, не пытайтесь программно изменить контроллер или другие материалы в этом конкурсе.
Игровой процесс
обзор
Двумерный массив 10х10 будет имитировать доску, каждый элемент / ячейка которой представляют «территорию». Будет 20 раундов и до 1000 ходов за раунд. Каждый ход игроки сначала размещают свои армии на любой из принадлежащих им территорий, а затем получают возможность транспортировать свои армии на соседние территории, пытаясь захватить территории своих противников, атакуя армии в них. Игроки должны развернуть все свои армии, но они не должны перемещать их при желании.
Атакующие / Передающие армии
Если игрок желает, он может отправить армии с одной территории на любую из восьми соседних. Доска «переворачивается», т. Е. Если территория игрока находится на одной стороне, армии с нее могут быть перенесены на соседнюю территорию на другой стороне. При перемещении армий с территории на этой территории должна оставаться как минимум одна армия. Например, если территория содержит пять армий, на другую территорию может быть перемещено не более четырех; если территория содержит один, эта армия не может двигаться.
Если игрок посылает nармии с одной территории на другую, которой они владеют, эта территория получит nармии.
Скажем, игрок отправляет nвойска со своей территории на противоположную территорию, где есть oармии. oуменьшится с n * .6округлением до ближайшего целого числа; однако, в то же время, nуменьшится с o * .7округлением до ближайшего целого числа. Будут применяться следующие правила, касающиеся того, была ли захвачена противоборствующая территория:
- Если он
oдостигнет нуля иnбольше 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.
Раунды и повороты
В начале каждого раунда всем игрокам будет предоставлена одна территория, расположенная в случайном месте на доске (два или более игрока могут начать игру рядом друг с другом). Территории, которые составляют бонус, также могут меняться.
В первый ход у каждого игрока будет одна территория, содержащая пять армий, и они получат пять армий, которые они могут использовать (это минимум, который они могут получить). Все остальные территории будут принадлежать NPC, которые не атакуют; каждая из них содержит две армии и имеет идентификатор -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, из-за которой территории, развернувшие свои армии после других, имели потенциальное преимущество в игре. Редактирование было перенесено в контроллер, поэтому, пожалуйста, используйте существующую версию, найденную по ссылке выше.

