Ваш добрый сосед, Доктор Три, только что подарил вам три магических существа по имени Кодемон. В соседнем городе Colorville есть боевой турнир. Ты самый лучший, как никто и никогда не был?
обзор
Это боевой турнир. Каждый игрок управляет командой из трех монстров, и цель состоит в том, чтобы выбить (убить) другую команду. Есть 100 раундов, с очками, награждаемыми за победы и связи. Команда с наибольшим количеством очков побеждает!
Монстры
Кодемон - сложное маленькое существо. Есть пять типов (элементов) на выбор, три характеристики и три слота перемещения на каждом.
Типы
Каждому Кодемону присваивается один тип. Пять типов: Нормальный, Психический, Огонь, Вода и Трава. У каждого есть свои сильные и слабые стороны. Ущерб основан на следующем графике:
Числа являются множителями урона. Например, у воды, атакующей огонь, есть модификатор 0.5 (половина урона), тогда как трава, атакующая огонь, удваивается (2).
Статистика
У каждого монстра есть три характеристики, которые определяют его боевые способности. Атака увеличивает урон, который она наносит. Защита снижает наносимый им урон. Скорость позволяет ему двигаться раньше, чем с более низкой скоростью.
Каждый монстр имеет начальное значение 50 для каждого персонажа и максимум 100. Когда вы создаете своих монстров, вы сможете назначить 80 дополнительных очков статов (каждый). Помните, что никакая индивидуальная статистика не может превышать 100. Таким образом, вы можете иметь распределение 100/80/50, 90/80/60 или 65/65/100, но 120/50/60 недопустимо. Любая команда с нелегальной статистикой дисквалифицируется. Вы не обязаны использовать все 80 баллов, но вы, вероятно, не должны идти с минимумом 50/50/50.
Вы также можете считать HP статом, но каждый Кодемон имеет неизменяемые 100 HP. Когда HP падает до нуля, они не могут продолжать бой. HP пополняется до 100 перед каждой битвой.
Ходы
Каждый монстр знает три боевых хода. Три выбранных должны быть отличными, так что нет Punch / Punch / Punch.
Есть 15 ходов, по три каждого типа. Каждый тип имеет прямую атаку, более слабую атаку с эффектом и единственный ход с эффектом.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
относится к типу движения. power
это его поразительная сила. uses
указывает, сколько раз его можно использовать за бой ( -
не ограничено). usable
показывает, какими типами он может быть использован (например, Punch не может быть назначен психическому типу, поскольку его нет P
). effect
показывает, какие эффекты имеют ходы. С вероятностью 75% каждый эффект работает, кроме Heal, который всегда работает.
Для эффектов, которые изменяют характеристики монстров, эффекты могут быть сложены . Например, использование Weaken дважды может снизить атаку вашего противника до 0,64 эффективности. Эффекты, которые не изменяют характеристики монстров (Sleep, Burn и т. Д.) , Не суммируются .
Сон усыпляет противника с вероятностью 60% пробуждения в начале каждого хода. Спящие монстры не будут предпринимать никаких действий.
Ожог наносит противнику 10 HP в конце каждого хода, когда он активен . Яд действует аналогично, но с каждым ходом его количество увеличивается. В первый ход это 5, и после этого он получает 5 каждый ход. Таким образом, к четвертому ходу он будет наносить урон в течение 20. Это плоский урон, не зависящий от типа монстра или подверженный бонусам.
Путаница может привести к нападению монстра, вместо того, чтобы делать то, что ему велели. Эта атака имеет силу 10 и вероятность 30% произойти в данный ход.
Для ясности, эффекты сохраняются до конца битвы (кроме Sleep, как отмечено выше).
Ходы также получают 20% прироста силы, если используются монстром соответствующего типа. Например, монстр Грасса, использующий Vine, усиливается, а Punch - нет.
Секретная статистика
Статистика и тип (но не ходы) каждого монстра общедоступны. Ваши противники смогут увидеть, за что они сражаются, чтобы выбрать лучшее действие. Тем не менее, есть также бонусы, которые скрыты.
В частности, после каждых двух сражений вам будет даваться один «бонусный» пункт статистики за каждого монстра в вашей команде. Очки даются всем монстрам, живым или мертвым, победителю или проигравшему. Вы можете назначить это любой из трех выбранных вами характеристик. Вы не можете сложить их на одного монстра; каждый монстр получает один каждый раз. Эти очки невосприимчивы к пределу 100. Поскольку будет 100 боевых раундов, это означает, что вы можете получить один стат до 149, если вы выделите на него все свои бонусы. Опять же, оппонент будет видеть только ваши «базовые» характеристики, поэтому чем дальше вы находитесь в турнире, тем дальше его знания расходятся с правдой.
Боевой
Сражение происходит между командами из трех человек, по одному активному в каждой команде за раз. На старте вам будет показана команда противника, и вам будет предложено выбрать, какой монстр станет вашим первым «активным» игроком.
После этого выполняются повороты со следующими шагами:
- Переключатель: происходят обязательные переключения монстров (если есть)
- Выберите боевые действия
- Переключатель: любые дополнительные переключатели монстров (выбран в качестве боевого действия) имеют место
- Проверка сна: шанс проснуться от сна
- Атака 1: Если возможно, более быстрый монстр использует выбранный ход
- Атака 2: Если возможно, другой монстр использует выбранный ход
- Эффект урона: нанесите урон от ожогов / ядов живым монстрам
«Speedier» означает монстра с более высокой скоростью. Если обе характеристики скорости одинаковы, она выбирается подбрасыванием монеты PRNG каждый ход.
В конце любого хода, где умирает ваш активный монстр, вам будет предложено выбрать новый активный. Вы также можете переключать активных монстров как ход на любой ход (при условии, что у вас есть более одного живого). Опять же, если вы переключаетесь как ход, вы не будете делать боевой ход в этот ход.
Монстры не «обрабатываются», когда неактивны. Это означает, что они не получают урона от ожогов / ядов, счетчики ядов не накапливаются, не просыпаются ото сна и т. Д. При переключении никакие эффекты не удаляются и не изменяются . Это не та другая битва с монстрами. Если вы переключитесь с поднятой и сожженной атакой, они все равно будут там, когда вы вернетесь обратно.
Эффект урона происходит независимо от того, убиваете вы вашего активного противника или нет. Таким образом, члены обеих команд могут умереть за один ход.
Когда в одной команде заканчиваются пригодные для использования монстры, они проигрывают. Если обе команды выбегают на одном ходу, это ничья. Если битва длится 1000 ходов, это ничья.
Формула для определения ущерба:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
и effDefense
является эффективной статистикой для монстров. Эффективная атака получается путем добавления Attack и Bonus Attack, а затем умножения (на 0,8 или 1,25), если какие-либо эффекты меняют его. Помните, что эти эффекты могут складываться.
Урон может быть только 0, когда модификатор типа равен 0 (Normal <-> Psychic) или сила хода равна 0 (Heal, Burn и т. Д.). В противном случае минимум применяется в 1.
Турнир
Турниры длятся 100 раундов. В каждом раунде команды перетасовываются и случайным образом соединяются друг с другом. Если есть нечетное количество команд, остаток получает прощай (счет как ничья). Победа в битве приносит команде 2 очка, связи стоят 1 , а потери ничто. Команда с наибольшим количеством очков в конце побеждает!
Если команды связаны, турнир, в котором только команды связаны за первое место, будет проведен, чтобы определить порядок разрешения конфликтов.
протокол
Контроллер отправит вашей программе одну из четырех команд. Первый символ определяет тип команды с данными, следующими за необходимостью.
Ваша программа примет команду в качестве аргумента и ответит на STDOUT в течение одной секунды . Не оставайтесь в живых, слушая STDIN, его там не будет. Каждая команда порождает новый процесс.
Вы можете записать данные / состояние на диск. Поместите любые файлы в подпапку с тем же именем, что и ваша команда. Не пишите больше 32 килобайт данных, иначе вы будете дисквалифицированы. Данные будут сохраняться между раундами, но будут очищаться между турнирами.
команды
Данные команды
Это отправляется один раз в начале турнира для регистрации вашей команды. Ваш ответ должен быть постоянным , а не разным для каждого турнира.
Запрос:
T
Отклик:
name|member0|member1|member2
name
это строка с названием вашей команды. Пожалуйста, используйте только буквенно-цифровой, для простоты анализа. memberN
является строкой члена, дающей детали каждого монстра:
Строка участника:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Опять же, «имя» - это строка, на этот раз с именем этого монстра. typeid
это его тип. Идентификаторы типов в порядке, показанном на диаграмме выше, с Normal = 0 и Grass = 4.
Следующие три поля - ваша базовая статистика. Имейте в виду ограничения, описанные в разделе статистики выше.
Последние три - ходы вашего монстра. Идентификаторы показаны на диаграмме перемещения выше.
Пример ответа с данными команды может выглядеть так:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Любая команда, которая отправляет сюда мусор, неправильно отформатированные или незаконные данные, не будет участвовать, пока они не будут исправлены.
Выберите Активный
Это отправляется в начале каждого сражения, и когда монстр умирает и должен быть переключен.
Запрос:
C#battleState
battleState
показывает состояние текущего сражения. Терпите меня здесь, это ужасно
yourTeamState#theirTeamState
Где XteamState
выглядит так:
name:activeSlot|member0state|member1state|member2state
activeSlot
показывает, какой монстр в данный момент активен (0-2). Страны-участницы бывают двух видов. Если это ваша команда, это дает дополнительную информацию. Так,
Ваш членXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
Их членXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
это просто целочисленный идентификатор, который вы можете использовать, чтобы отслеживать монстров, если вам не нравится их использовать name
.
attack:defense:speed
ваша базовая статистика.
poisonedturns
говорит вам, за сколько ходов вы были отравлены.
moveCountX
говорит, сколько использований вы оставили для каждого хода. Если 0, он не может быть использован. Для неограниченных ходов это будет отрицательно.
bonus(stat)
это количество бонусных баллов, которые вы присвоили каждой статистике.
effectid
список эффектов переменного размера, которые были применены к вашему монстру В строке не будет запаздывания :
, независимо от того, присутствуют ли активные эффекты или нет. Если есть комбинированные эффекты, они будут отображаться в списке как несколько эффектов.
Идентификаторы эффекта:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Отклик:
memberSlot
Единственный требуемый ответ - это одно число 0,1,2, указывающее, какого члена вы хотите быть активным. Это должен быть участник, который способен сражаться. Не отправлять обратно, 1
если участник 1 мертв.
Боевые действия
Каждый ход вам нужно решить, что делать.
Запрос:
A#battleState
battleState
Здесь точно так , как описано выше.
Отклик:
Чтобы использовать перемещение, отправьте обратно слот, в котором он находится. Например, если я назначил Punch для слота 0, отправка 0
выполняет Punch.
Чтобы переключиться на другого участника, отправьте слот участника плюс десять . Итак, чтобы перейти к участнику 2, отправьте 12
.
Все, что не указано в [0,1,2,10,11,12], считается недействительным и в этот ход не предпринимает никаких действий.
Бонус Статистика
После каждых двух сражений вы получаете секретный бонусный балл за каждого члена команды.
Запрос:
B#yourTeamState
Состояние вашей команды такое же, как показано выше, не заставляйте меня повторять это.
Отклик:
stat0:stat1:stat2
Ваш ответ будет представлять, какую статистику увеличить для каждого члена команды. Атака 0, защита 1, скорость 2.
Таким образом, чтобы повысить скорость первого члена, атаку второго и защиту третьего, вы должны ответить:
2:0:1
контроллер
Контроллер можно найти в BitBucket: https: //Geobits@bitbucket.org/Geobits/codemon.git
Просто бросьте все скомпилированные файлы классов, материалы и Players.conf в папку и запустите.
Основной класс контроллера называется Tournament
. Использование это:
java Tournament [LOG_LEVEL]
Уровни журнала от 0 до 4 дают возрастающую информацию. Уровень 0 проводит турнир молча и просто дает результаты, тогда как уровень 3 дает пошаговые комментарии. Уровень 4 является выходом отладки.
Вы можете добавить заявки на турнир в разделе players.conf
Просто добавьте строку командной строки, необходимую для запуска программы, по одной на строку. Строки, начинающиеся с #
комментариев.
В своем посте включите команду, которую мне нужно добавить в мои players.conf
, и все этапы компиляции (если требуется).
Включена фиктивная команда, состоящая из всех нормальных членов с тремя ходами. Они выбирают ходы случайно и имеют ужасные характеристики. Получайте удовольствие, избивая их.
Прочие правила
Вы не можете читать или писать на любые внешние ресурсы (за исключением вашей собственной подпапки, размером до 32 КБ, как указано выше).
Ваша команда должна пройти в турнир "вслепую". Это означает, что вы не можете анализировать источники других людей, чтобы выяснить, что определенная команда / монстр будет делать в данной ситуации. Вы можете анализировать ходы / статистику оппонента и отслеживать ход турнира, но не вводите эту информацию жестко.
Не вмешивайтесь в другие процессы / представления. Не вызывать их, использовать отражение, чтобы получить их данные и т. Д. Не связывайтесь с моим компьютером. Только не пытайся. Это на мое усмотрение. Нарушителям может быть запрещено вступление в будущем.
Конкурсанты ограничены максимум двумя заявками. Если вы отправите больше, я оцениваю только первых двух представленных. Если вы хотите отозвать один, удалите его.
Записи могут не существовать исключительно для поддержки других записей. Кроме того, вы не можете пытаться косвенно дисквалифицировать других участников (например, используя имя команды персонажа 27M для игроков DQ, которые пытаются записать это на диск). Каждое представление должно играть, чтобы выиграть на свой счет.
Ваша программа может порождать максимум один дочерний процесс за раз (всего потомков, а не прямых). Как основной, так и любые дочерние процессы должны завершаться непосредственно после выдачи вывода. В любом случае, убедитесь, что вы не превысили время ожидания.
Турнир будет проходить на моем компьютере под управлением Ubuntu с процессором Intel i7 3770K.
Результаты
Это результаты нынешних игроков. Это очень близко между ведущими соперниками, и я думаю об увеличении количества раундов до 500 (и корректировке расстояния между бонусными очками, чтобы соответствовать). Есть возражения, комментарии?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Полные результаты воспроизведения на Google Диске
bye
не нужно разбираться с неравным количеством участников, и было бы необходимо убедиться, что пары совпадений справедливы и равномерно распределены.
n^2
вместо n
. При нынешних 7 участниках и 100 раундах это 2100 битв (против 300 как есть и 1500 с 500 раундами). Это только усугубляется, когда приходит больше записей. Я мог бы уменьшить количество раундов, но я не решаюсь сделать это из-за присущей изменчивости (относительно статусов esp), и умножить на 50 (для бонусных баллов) проще.