Сценарій Варц!
Результати є, і Assassin - наш чемпіон, вигравши 2 з 3 матчів! Дякуємо всім, хто подав свої сценарії! Особлива подяка рогам за BestOpportunityBot, які показали відмінний шлях та повною мірою використали всі варіанти дій.
Карта 1
Ассасін вивів BestOpportunityBot рано, а решта матчу була досить нудною. Тут ви можете ознайомитися з детальною програмою.
- Вбивця: 10 к.с., 10 ушкоджень, 3 ушкодження
- Avoider v3: 10 к.с., 0 ушкодження, 0 ушкодження
- Треба закінчити харчування: 10 к.с., 0 пошкоджень, 0 ушкоджень
- BestOpportunityBot: 0 к.с., 3 ушкодження, 10 ушкоджень
Карта 2
BestOpportunityBot зробив більшу частину роботи в цьому матчі, але в кінцевому підсумку Асассіну вдалося його вивести. Тут ви можете ознайомитись із детальною програмою.
- Вбивця: 2 HP, 10 ушкоджень, 9 ушкоджень
- BestOpportunityBot: 0 HP, 32 ушкодження, 10 ушкоджень
- Avoider v3: 0 к.с., 0 пошкодження шкоди, 12 ушкоджень
- Треба закінчити їжу: 0 к.с., 0 пошкоджень, 11 ушкоджень
Карта 3
BestOpportunityBot підштовхував усіх до пасток цього матчу. Дуже круто. Тут ви можете ознайомитись із детальною програмою.
- BestOpportunityBot: 10 к.с., 30 ушкоджень, 0 ушкоджень
- Вбивця: 0 к.с., 0 ушкодження, 0 ушкодження
- Треба закінчити їжу: 0 к.с., 0 ушкодження, 0 ушкодження
- Avoider v3: 0 к.с., 0 пошкодження шкоди, 0 пошкодження
Дякую за відповіді! Оскільки всього 4 скриптів, ми відмовляємось від турнірних планів на три матчі безкоштовно для всіх, по одному на кожній із карт нижче. Сценарій із найвищим рекордом виграє. У випадку зрівноваження ми вступимо в раптову смерть, в якій виграє сценарій, який розірве краватку спочатку.
Якщо ви вирішите його прийняти, ваше завдання - кодувати Scriptbot, який може пройти карту ASCII та знищити її супротивників. Кожен бій буде проходити у формі покрокової гри в довільному порядку, де кожен Scriptbot має шанс витратити свої енергетичні очки (ЕП) для здійснення дій. Сценарій GameMaster подаватиме вхід та інтерпретувати вихід з кожного Scriptbot.
Середовище
Кожен Scriptbot міститься в своєму власному каталозі , де він може зчитувати map
і stats
файлів і читання / запису в data
файл. Цей data
файл можна використовувати для зберігання будь-якої постійної інформації, яка може бути корисною.
Файл статистики
stats
Файл містить інформацію про ваших противників і відформатований наступним чином . Кожен гравець представлений в окремому рядку. Перший стовпець - це ідентифікатор гравця ( @
означає, що ви). Другий стовпець - це здоров'я цього гравця.
1,9HP
@,10HP
3,9HP
4,2HP
Файл карти
map
Файл може виглядати приблизно так ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... або це ...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... або це ...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... або це може виглядати зовсім інакше. У будь-якому випадку, використовувані символи та їх значення залишаться незмінними:
#
Стіна, непрохідна і непрохідна.1
,2
,3
... Число , яке представляє ворожий гравець. Ці цифри відповідають ідентифікатору програвача уstats
файлі.!
Пастка. Роботи сценаріїв, які переїжджають на ці місця, загинуть негайно.@
Місцезнаходження вашого скриптаВідкрийте простір, по якому ви можете вільно пересуватися.
Ігровий процес
Сценарій GameMaster призначить випадковий стартовий порядок скриптам. Потім скрипти викликаються в цьому порядку, поки вони ще живі. У сценаріїв є 10 очок здоров’я (HP) і починаються з 10 енергетичних очок (ЕП) на кожному ходу, які вони можуть використовувати для переміщення або нападу. На початку кожного кроку Scriptbot оздоровиться за один HP, або отримає одне додаткове EP, якщо вже в 10 HP (таким чином, запуск може бути життєздатною стратегією часом).
Бій закінчується, коли виживає лише один скрипт або коли пройшло 100 оборотів. Якщо в кінці бою кілька ботів сценаріїв живі, їх місце визначається виходячи з таких критеріїв:
- Найбільше здоров’я.
- Більшість завданих збитків.
- Більшість збитків заподіяно.
Введення скриптів
GameMaster надрукує бойову карту до файлу з іменем, до map
якого Scriptbot матиме доступ для читання. Карта може мати будь-яку форму, тому важливо, щоб сценарій міг її інтерпретувати. Ваш сценарій буде викликаний одним параметром, що вказує на EP. Наприклад...
:> example_scriptbot.py 3
Scriptbot буде викликаний, поки він не витратить весь свій EP або максимум 10 11 разів. Файли з картою та статистикою оновлюються перед кожним викликом.
Вихід з сценарію
Сценарії повинні виводити свої дії на товсті. Перелік можливих дій такий:
MOVE <DIRECTION> <DISTANCE>
Витрати 1 ЕП в розрахунку
DISTANCE
.MOVE
Команда переміщує Scriptbot по карті. Якщо є щось на шляху, наприклад, стіна чи інший Scriptbot, GameMaster перемістить ваш Scriptbot якнайдалі. ЯкщоDISTANCE
дано більший, ніж EP, що залишився в Scriptbot, GameMaster перемістить Scriptbot, поки його EP не закінчиться.DIRECTION
може бути будь-який напрямок , компасN
,E
,S
, абоW
.PUSH <DIRECTION> <DISTANCE>
Витрати 1 ЕП в розрахунку
DISTANCE
.PUSH
Команда дозволяє Scriptbot рухатися інший Scriptbot. Scriptbot, що видає команду, повинен знаходитися безпосередньо поруч із натисканням на Scriptbot. Обидві роботи скриптів рухатимуться у вказаному напрямку, якщо немає об'єкта, що блокує натискання Scriptbot.DIRECTION
іDISTANCE
такі самі, як і дляMOVE
команди.ATTACK <DIRECTION>
Коштує один EP.
ATTACK
Команда завдає 1 пошкодження будь-якого Scriptbot безпосередньо поруч з видав Scriptbot і в напрямку , зазначеному.DIRECTION
те саме, що і дляMOVE
команди.PASS
Закінчується ваша черга.
Мови, що підтримуються
Щоб дотримуватися цього для мене розумним, я прийму наступні мови:
- Java
- Node.js
- Пітон
- PHP
Ви обмежені бібліотеками, які зазвичай упаковані з вашими мовами поза рамками. Будь ласка, не змушуйте мене знаходити незрозумілі бібліотеки, щоб ваш код працював.
Подання та судження
Опублікуйте свій вихідний код Scriptbot нижче і дайте йому прохолодну назву! Будь ласка, перелічіть також версію мови, яку ви використовували. Всі скрипти роботи будуть перевірені на предмет tomfoolery, тому, будь ласка, прокоментуйте це добре і не оскаржуйте свій код.
Ви можете подати більше одного запису, але будь ласка, зробіть їх абсолютно унікальними записами, а не версіями одного запису. Наприклад, ви можете кодувати бота Zerg Rush та бота Gorilla Warfare. Це чудово. Не публікуйте Zerg Rush v1, Zerg Rush v2 тощо.
7 листопада я зберу всі відповіді, і ті, хто пройде первинний огляд, будуть додані до групи турнірів. Чемпіон отримує прийняту відповідь. Ідеальна дужка показана нижче. Оскільки, ймовірно, не буде точно 16 записів, у деяких дужках може бути лише три, а то й два боти. Я постараюся зробити кронштейн максимально справедливим. Будь-який необхідний фаворитизм (якщо, наприклад, потрібен тиждень до побачення), буде надано ботам, які були подані першими.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Питання та відповіді
Я впевнений, що я пропустив деякі деталі, тому сміливо задавайте питання!
Чи можемо ми вірити, що файл карти завжди оточений # символами? Якщо ні, то що станеться в тому випадку, якщо бот намагається піти з карти? - BrainSteel
Так, карта завжди буде обмежена символом #, і ваш Scriptbot почне всередині цих меж.
Якщо бота немає в напрямку, вказаному в команді PUSH, як функціонує команда? - BrainSteel
GameMaster нічого не зробить, нульовий EP буде витрачено, і Scriptbot буде викликаний знову.
Чи накопичується невикористаний EP? - феерсум
Ні. Кожен сценарист розпочне раунд / поворот з 10 EP. Будь-який не витрачений ЕП піде на сміття.
Я думаю, що я це отримав, але просто для уточнення: з ботами A і B - це порядок подій A @ 10EP-> POVH MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACK ... або A @ 10EP-> POWE A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? Іншими словами, чи всі дії в одному циклі запитів контролер-бот атомні? Якщо так, то чому цикл? Чому б не повернути єдиний файл із виконанням усіх дій? Інакше ботам доведеться виписувати власні файли стану, щоб відслідковувати послідовності мульти дії. Файл карти / статистики буде дійсним лише до першої дії. - КОТО
Ваш другий приклад близький, але не зовсім правильний. Під час черги Scriptbot викликається неодноразово, доки їх EP не буде витрачено, або максимум 11 разів. Файли з картою та статистикою оновлюються перед кожним викликом. Цикл корисний у тому випадку, якщо бот дає недійсний вихід. GameMaster буде працювати з недійсним результатом і знову залучати бота, даючи боту можливість виправити свою помилку.
ви випустите скрипт GameMaster для тестування? - IchBinKeinBaum
Сценарій GameMaster не вийде. Я б закликав вас створити карту та файл статистики, щоб перевірити поведінку вашого бота.
Якщо robotA підштовхує robotB до пастки, чи присвоєно роботові бали "завданої шкоди", що дорівнює поточному здоров'ю роботаB? - Майк Свіні
Так, це гарна ідея. Боту будуть надані окуляри пошкодження, рівні здоров’ю будь-якого бота, який він штовхає в пастку.
#
і ваш Scriptbot почне всередині цих меж.
map
файл завжди оточений#
символами? Якщо ні, то що станеться в тому випадку, якщо бот намагається піти з карти?