Введение
Действие игры разворачивается в маленьком мире с разными городами. Правители городов ненавидят друг друга и хотели бы править миром. Люди делятся на две группы: воины и низменные. Тем не менее, малорожденные могут подняться на воинов. Вы правитель трех из этих городов.
Игровой процесс
Когда игра начинается, вы управляете тремя городами. В каждом городе 100 человек. Вы должны разделить их на рыцарей и низменных.
Затем начинается настоящая игра, которая пошаговая. Ход выглядит так: "Produce" knights
=> execute command of first town
=> execute command of next town
(повторите для всех городов) => try a rebellion
.
- Каждый ход ваша программа будет вызываться для каждого города, который принадлежит вам . Вы можете атаковать город , поддержать город или просто подождать . Эти действия будут выполняться последовательно, а не одновременно.
- Каждый третий ход, вы получаете одного рыцаря на 2 младших (23 младших => 11 рыцарей). Количество новорожденных остается неизменным.
- Рыцари внутри города имеют бонус защиты 1,2. Если вас атакуют, ваши рыцари будут умножены на это число (например
78 knights
, у вас это будет93 knights
во время атаки). После атаки лишние рыцари будут удалены (если82 knights
выживут, у вас все равно останется78 knights
). - В атаке каждый рыцарь убивает врага, прежде чем он умрет. Например:
30 knights
атака100 knights
(без бонуса защиты) => 70 рыцарей выживают. - Вы можете захватить город, убив всех рыцарей внутри него . Теперь все низменные принадлежат вам, а ваши выжившие рыцари находятся в городе. В следующем раунде вы можете управлять этим городом в дополнение ко всем другим городам .
- После захвата города у него не будет бонуса защиты в течение 2 полных ходов (потому что ворота сломаны). На третьем повороте ворота будут отремонтированы.
- Чтобы препятствовать восстанию низменных, вам нужно по крайней мере вдвое меньше рыцарей, чем низеньких (в городе для 23 нижних нужно по меньшей мере 12 рыцарей в одном городе). В противном случае низменные убьют всех рыцарей, и город станет «нейтральным» (без лидера, обозначенного PlayerId
-1
). - Нейтральные города будут «производить» рыцарей, но не будут атаковать и поддерживать какой-либо другой город.
Синтаксис
Контроллер предоставляет вам ввод через аргументы команды, ваша программа должна выводить через stdout.
Вывод (подготовка)
Перед началом игры контроллер вызывает вашу подачу без аргументов. Это означает, что вы должны распределить свои 100 человек (для каждого города) на рыцарей и низменных. Вам нужно вывести KnightCount KnightCount KnightCount
, например 95 80 95
.
Входные данные
Round;YourPlayerId;YourTownId;PlayerId_TownId_knights_lowborns;PlayerId_TownId_knights_lowborns;...
В первом раунде это будет что-то вроде
1;2;2;0_0_100_0;1_1_50_50;2_2_80_20
. Здесь вы видите, что это первый раунд, вы являетесь игроком 2 в городе 2. У вас 80 рыцарей и 20 низменных.
Позже в игре это может быть что-то вроде 20;2;1;0_0_100_0;2_1_30_50;2_2_40_20
. Вы по-прежнему игрок 2 (это никогда не меняется), но вы захватили город 1 (который вы контролируете прямо сейчас).
Выход
A TownId NumberOfKnights
или S TownId NumberOfKnights
или W
(для ожидания).
Пример: A 2 100
(атаковать город 2 с 100 рыцарями) или S 3 2
(поддержать город 3 с 2 рыцарями).
правила
- Боты не должны быть написаны, чтобы побеждать или поддерживать определенных других ботов
- Запись в файлы разрешена. Пожалуйста, напишите « yoursubmissionname .txt», папка будет очищена перед началом игры. Другие внешние ресурсы запрещены.
- Ваше представление имеет 1 секунду, чтобы ответить (в каждом городе).
- Предоставьте команды для компиляции и запуска ваших представлений.
выигрыш
Победителем считается тот, у кого больше городов после 100 раундов. Если игрок захватывает все города, игра останавливается и он выигрывает. Если у нескольких игроков одинаковое количество городов, количество рыцарей будет учитываться, тогда как количество низших.
контроллер
Вы можете найти контроллер на GitHub. Он также содержит 2 примера ботов, написанных на Java. Откройте его в Eclipse, поместите скомпилированные боты в корневую папку и добавьте класс в управляющую программу (так же, как в примере с ботами).
Полученные результаты
Для окончательных результатов я провел 10 игр. Это среднее:
Игрок Городов 1. Освободитель 37,5 2. Сехтимианер 8.2 3. СуперПроизводитель 5.4 4. Спальное место 1.4 5. Франкенштейн 1.2 6. Масло 0,8 (больше рыцарей) 7. TheKing 0.8 (меньше рыцарей) 8. Исход 0.6 9. Черепаха 0,5 (больше рыцарей) 10. AttackOn3 0.5 (меньше рыцарей) 11. Демократия 0,3 12. CalculatedFail 0.2 13. Революционер 0.1
Вы можете прочитать пример игры здесь: пример игры на github
источник
A
поддерживает другой городB
, данное число рыцарей просто переносится изA
вB
, после чего их контролирует владелецB
, верно?Ответы:
Python3, освободитель
Единственная цель этого бота - освободить самых обычных людей от гнета тирании.
источник
Python 2, Король
Король правит самым многочисленным городом своей империи и требует, чтобы все лишние рыцари были отправлены к нему из других городов, находящихся под его контролем. Когда у него будет достаточно рыцарей, он нападет на вражеский город. Он не очень умный король, поэтому не изучал историю и не понимает последствий своих действий.
Это не проверено с контроллером или другими ботами.
источник
He is not a very smart King, so has not studied history or understands the consequences of his actions.
Javascript (Узел), Империя
Начинает сильно, чтобы отпугнуть другие города. Города пытаются работать вместе, чтобы захватить других. Приоритеты захвата городов с множеством низменных.
Выполнить: узел империи
источник
knights - lowborns/2
, но если у вас 30 рыцарей и 90 младших, это не сработает. Пожалуйста, исправьте своюgetAttackers()
функцию.DEBUG
флаг в контроллере, который заставлял его глотать ошибки, даже еслиGAME_MESSAGES
флаг установлен в true. Я чувствую , что я все еще мог бы использовать некоторые работы по моей стратегии, особенно с освободителю теперь на сцене, но с последней правкой я не вижу каких - либо ошибок , когда я запускаю мои тесты сDEBUG
наЯва, Франкенштейн
Пытаясь найти способ уничтожить Освободителя, небольшая ошибка просочилась в мой код. Затем код начал разрушать конкурентов. После добавления Демократии и перестановки игроков, это начало терпеть неудачу. Изучая код, я попытался найти его стратегию. Следовательно, следующий код был сделан. Он имеет тенденцию атаковать и уничтожать лучшего игрока. После того, как лучшие игроки будут уничтожены, это легко уничтожит остальных.
Вот оригинальный плеер:
источник
Ява, Черепаха
Благодаря TheBestOne за основные методы, я просто изменил алгоритм (надеюсь, все в порядке). Этот бот в основном модернизирует свой самый защищенный город, чтобы конкурировать с самым опасным вражеским городом, сохраняя достаточно рыцарей, чтобы предотвратить восстание в других его городах.
Обобщение:
javac Turtle.java
Бег:
java Turtle
источник
dangerousEnemyTown = dangerousEnemyTown.knightCount() >= town.knightCount() ? dangerousEnemyTown : town;
не имели в видуdangerousEnemyTown = bestDefendedTown.knightCount() >= town.knightCount() ? bestDefendedTown : town;
Java 8, Политик
Действует как настоящий политик. Жаль, что Крэшер все еще убивает его.
Обобщение:
javac Politician.java
Бег:
java Politician
источник
lie
методЯва 8, Масло
Распространяется как можно более равномерно. Душит город, если город достаточно маленький.
Обобщение:
javac Butter.java
Бег:
java Butter
источник
Ява, революционер
Последний, все еще основанный на основных методах TheBestOne. Этот бот пытается спровоцировать восстания в каждом городе, поскольку нейтральный игрок безнаказан, убивая определенное количество рыцарей по сравнению с населением низкого уровня. Это, конечно, не будет атаковать нейтрального игрока.
Обобщение:
javac Revolutionist.java
Бег:
java Revolutionist
источник
JAVA, Sehtimianer
Еще раз спасибо TheBestOne, я тоже скопировал его основные методы; ) Я впервые играю в KingOfTheHill-CodeGame, поэтому надеюсь, что все сделал правильно. Я гордо представляю Sehtimianers: D
Сехтимианцы стараются превосходить всю игру и заканчивают ее в конце. Я надеюсь, что мой бот не будет слишком плохо :)
источник
Ява, Исход
Еще раз, на основе основных методов TheBestOne. Этот бот мигрирует из города в город, как только достигнет определенного уровня рыцарского населения, без разбора своего владельца, и повторяет этот процесс, пока не превратит весь мир.
Обобщение:
javac Exodus.java
Бег:
java Exodus
источник
Python 2, Демократия
Этот король не король. Это что-то современное. Это король людей . Это демократия. Он медленный, неэффективный, и когда он что-то делает, он делает это неправильно.
Беги
python2 democracy.py
. Обратите внимание, что демократия требует Python 2 .Редактировать: Исправлена ошибка печати объекта города
источник
<__main__.Town
.C ++ 11, CalculatedFail
после того, как я попробовал кое-что с небольшой Java, которую я знаю и не смог достичь того, чего хотел, я решил переписать это на C ++ и добавить обработку файлов. проблема была в том, что мой C ++ довольно ржавый и ненамного лучше, поэтому некоторые части разбиты вместе, и это только первое решение в google, так что не очень качественный код ...
Тем не менее, я смог получить по крайней мере рабочий результат, который не слишком много, он выигрывает, по крайней мере, время от времени, но я не могу проверить это отлично, потому что я не могу запустить все другие представления на этом компьютере. Я, вероятно, перепишу таргетинг в целом и добавлю его в качестве другого ответа позже сегодня или завтра.
компилировать с:
g++ -std=c++11 CalculatedFail.cpp -o CalculatedFail.exe
Google говорит, что в Linux это CalculatedFail.out вместо .exe, но я не могу это проверить.
и беги
CalculatedFail.exe
так как он использует файл для проверки бонуса def, одновременный запуск игры несколько раз может привести к ошибкам ...
надеюсь, что это работает правильно без особых проблем
источник
Ява, Иллюминаты
Я прочитал это и знал, что никогда не смогу придумать жизнеспособную стратегию, поэтому я решил сыграть с ужасно недопредставленными людьми-ящерами, которые могут или не могут управлять нами. Вместо того, чтобы сражаться с другими ботами, этот принуждает их к сотрудничеству, только чтобы бросить их в самом конце. Этот бот, на самом деле, не оставляет никаких постоянных повреждений.
источник
Ява, СуперПроизводитель
В моей части мира уже поздно, поэтому у меня нет достаточно времени для уточнения моего представления. Я планирую уточнить, как это будет работать позже.
Производительность бота, кажется, сильно зависит от стартового порядка, в котором он иногда выигрывает ...
У меня были некоторые идеи, чтобы помочь увеличить выигрышные раунды ... но рэд вне времени: P
Компилировать: javac SuperProducer.java
Выполнить: Java Moogiesoft. SuperProducer
источник
C ++ 11, attackOn3
сам код не стал намного красивее, но теперь я использую другой способ нацеливания, возможно позже добавлю комментарии к коду.
Кажется, с ботами, с которыми я работаю, все в порядке, хотя он все еще труден против Франкенштейна и освободителя и не может постоянно выигрывать.
скомпилировать с:
g++ -std=c++11 attackOn3.cpp -o attackOn3.exe
и запустить
attackOn3.exe
источник