Ваш доброзичливий сусід, доктор Дере, щойно подарував вам три магічні істоти під назвою Кодемон. У сусідньому місті Колордвілл є бойовий турнір. Ти найкращий, як ніхто ніколи не був?
Огляд
Це бойовий турнір. Кожен гравець контролює команду з трьох монстрів, а мета - вибити (вбити) іншу команду. Існує 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 статтю, але кожен Codémon має 100 HP, що не змінюються. Коли HP впаде до нуля, вони не можуть продовжувати боротьбу. HP поповнюється до 100 перед кожним боєм.
Рухи
Кожен монстр знає три бойові рухи. Вибрані три повинні бути чіткими, тому жодного Удар / Удар / Удар.
Є 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% шансів на те, що кожен ефект спрацює, крім «Зцілення», який завжди працює.
Для ефектів, що змінюють статистику монстра, ефекти можуть зберігатися . Наприклад, використання Слабкого двічі може знизити атаку опонента до 0,64 ефективності. Ефекти, які не змінюють статистику монстра (сон, спалювання тощо) , не стикуються .
Сон приводить опонента до сну, з 60% шансом прокинутися на початку кожного кроку. Ніяких дій не буде вжито сплячих монстрів.
Опік пошкоджує суперника на 10 к.с. в кінці кожного повороту, коли він активний . Отрута працює аналогічно, але щомісяця збільшує кількість. На першому кроці - 5, і він набирає 5 поворотів після цього. Таким чином, до четвертої черги це буде збитковим для 20. Це плоскі збитки, на які не впливає тип монстра або не нараховуються бонуси.
Плутанина може змусити нападу монстра самостійно замість того, щоб робити те, про що йому сказали. Ця атака має потужність 10 і має 30% шансів на те, що це станеться за певний поворот.
Щоб було зрозуміло, ефекти тривають до кінця бою (крім сну, як зазначено вище).
Рухи також отримують 20-відсотковий приріст потужності, якщо їх використовує монстр відповідного типу. Наприклад, монстр Трави, що використовує Vine, підсилюється, тоді як з використанням Punch він не є.
Секретна статистика
Статистика та тип (але не ходи) кожного монстра - це суспільне знання. Ваші опоненти зможуть побачити, з чим вони воюють, щоб вибрати найкращу дію. Однак є також бонуси, які приховані.
Зокрема, після кожні два бої ви отримуватимете один "бонусний" статистичний бал за кожного монстра вашої команди. Очки видаються всім монстрам, загиблим чи живим, переможцю чи програвшему. Ви можете призначити це будь-якій із трьох вибраних статистичних даних. Ви не можете скласти їх на одного монстра; кожен монстр отримує один раз. Ці пункти не застраховані від межі 100. Оскільки буде 100 бойових раундів, це означає, що ви можете отримати єдину статистику до 149, якщо ви виділите всі свої бонуси. Знову ж таки, опонент побачить лише вашу "базову" статистику, тому чим далі ви знаходитесь на турнірі, тим далі їх знання знаходяться в стороні від правди.
Битва
Бій ведеться між трьома командами, по одна активна в кожній команді одночасно. На початку вам покажуть команду суперника і попросять вибрати, який монстр буде вашим першим «активним» гравцем.
Після цього повороти відбуваються з наступними кроками:
- Перемикач: відбуваються обов'язкові перемикачі монстрів (якщо такі є)
- Виберіть бойові дії
- Перемикач: Будь-які необов'язкові перемикачі монстрів (вибрані як бойові дії) мають місце
- Перевірка сну: шанс прокинутися зі сну
- Атака 1: Якщо можливо, швидше монстр використовує вибраний хід
- Атака 2: Якщо можливо, інший монстр використовує вибраний хід
- Пошкодження наслідками: нанесіть шкоду опіку / отруту живим монстрам
"Швидше" означає монстра з більшою швидкістю. Якщо обидві статистичні показники швидкості однакові, її вибирають монети PRNG, що перевертають кожен виток.
Наприкінці будь-якого повороту, де помирає ваш активний монстр, вам запропонують вибрати нового активного. Ви також можете переключити активних монстрів як ваш рух на будь-який хід (за умови, що у вас більше одного живого). Знову ж таки, якщо ви переключитесь як ваш хід, ви не зробите бойовий хід, що повернеться.
Монстри не «обробляються», коли неактивні. Це означає , що вони не приймають ніяких пошкоджень Опік / отруту, лічильники отрута не буде накопичуватися, що не неспання від сну і т.д. ефекту не будуть видалені або змінені при перемиканні . Це не та інша гра з монстрами. Якщо ви вимкнетесь із атакою, піднятою та спаленою, вони все одно будуть там, коли ви повернетесь назад.
Пошкодження від ефекту відбувається, вбиваєте ви активного опонента чи ні. Таким чином члени обох команд можуть загинути на одному кроці.
Коли в одній команді вичерпуються корисні монстри, вони програють. Якщо обидві команди вибігають на одній черзі, це нічия. Якщо бій триває 1000 оборотів, це нічия.
Формула для визначення шкоди:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
і effDefense
є ефективною статистикою для монстрів. Ефективна атака отримується додаванням Attack та Bonus Attack, а потім множенням (на 0,8 або 1,25), якщо якісь ефекти змінюють її. Пам'ятайте, що ці ефекти можуть укладатися.
Пошкодження може становити 0 лише тоді, коли модифікатор типу 0 (Нормальний <--> Психічний) або Потужність ходу 0 (Зцілення, Опік тощо). Інакше мінімум застосовується в 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
Їх учасникдерж:
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
Просто киньте всі складені файли класу, подання та player.conf у папку та запустіть.
Основний клас контролера називається Tournament
. Використання:
java Tournament [LOG_LEVEL]
Рівні журналів від 0-4 дають все більшу інформацію. Рівень 0 проводить турнір мовчки і просто дає результати, де рівень 3 дає коментарі покроково. Рівень 4 - вихід налагодження.
Ви можете додати подання на турнір players.conf
просто: Додайте рядок командного рядка, необхідний для запуску програми, по одному на рядок. Рядки, що починаються з - #
це коментарі.
У свою посаду включіть команду, яку мені потрібно буде додати до свого players.conf
, та будь-які етапи компіляції (якщо потрібно).
В комплект входить фіктивна команда, що складається з усіх нормальних членів з трьома нормальними рухами. Вони вибирають ходи випадковим чином і мають жахливу статистику. Весело б’ючи їх.
Різні правила
Ви не можете читати чи записувати будь-які зовнішні ресурси (крім своєї власної підпапки, до 32 кБ, як зазначено вище).
Вашій команді потрібно вийти на турнір "сліпими". Це означає, що ви не можете проаналізувати джерело інших людей, щоб зрозуміти, що конкретна команда / монстр буде робити в тій чи іншій ситуації. Ви можете проаналізувати ходи / статистику опонента та відслідковувати, як турнір прогресує, але жодного жорсткого кодування цієї інформації немає.
Не втручайтеся в інші процеси / подання. Не викликайте їх, не використовуючи роздуми, щоб отримати свої дані тощо. Не возиться з моїм комп’ютером. Тільки не спробуйте. Це на мій розсуд. Порушники можуть бути заборонені до майбутнього вступу.
Учасники конкурсу обмежені максимум двома записами. Якщо ви подасте більше, я наберу лише перші два подані. Якщо ви хочете відкликати його, видаліть його.
Записи можуть не існувати виключно для підкріплення інших записів. Крім того, ви можете не намагатися побічно дискваліфікувати інших учасників (наприклад, використовуючи назву команди 27М символів для гравців 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 (для бонусних очок) простіше.