Scriptbot Warz!
Результаты в и Ассасин наш чемпион, выиграв 2 из 3 матчей! Спасибо всем, кто прислал свои Scriptbots! Отдельное спасибо рогам за BestOpportunityBot, который показал отличные пути и в полной мере использовал все варианты действий.
Карта 1
Ассасин забрал BestOpportunityBot на ранней стадии, а остальная часть матча была довольно скучной. Подробное описание игры здесь.
- Убийца: 10 HP, 10 урона, 3 урона
- Avoider v3: 10 HP, 0 урона, 0 урона
- Готово Есть: 10 HP, 0 урона, 0 урона
- BestOpportunityBot: 0 HP, 3 урона, 10 урона
Карта 2
BestOpportunityBot проделал большую часть работы над этим матчем, но Ассасин смог в конце концов его убить. Подробное описание игры здесь.
- Убийца: 2 HP, 10 урона, 9 урона
- BestOpportunityBot: 0 HP, 32 урона, 10 урона
- Avoider v3: 0 HP, 0 урона, 12 урона
- Готово Есть: 0 HP, 0 урона, 11 урона
Карта 3
BestOpportunityBot загнал всех в ловушку в этом матче. Очень круто. Подробное описание игры здесь.
- BestOpportunityBot: 10 HP, 30 урона за нанесение урона, 0 полученного урона
- Убийца: 0 HP, 0 урона, 0 урона
- Готово Есть: 0 HP, 0 урона, 0 урона
- Avoider v3: 0 HP, 0 урона, 0 урона
Спасибо за ваши ответы! Поскольку есть всего 4 Scriptbots, мы отказываемся от планов турниров на три бесплатных матча, по одному на каждой из карт ниже. Побеждает скрипт-бот с наибольшей победой. В случае ничьей мы вступим в внезапную смерть, в которой победит скрипт-бот, который первым разорвет ничью.
Ваша задача, если вы решите принять ее, - это написать Scriptbot, который может пересечь карту ASCII и уничтожить ее противников. Каждое сражение будет проходить в форме пошаговой игры со случайным стартовым порядком, где у каждого Scriptbot есть шанс потратить свои энергетические очки (EP) на действия. Скрипт 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
файле.!
Ловушка. Скриптботы, которые переместятся в эти локации, немедленно умрут@
Местоположение вашего Scriptbot.Открытое пространство, в котором вы можете свободно перемещаться.
Игровой процесс
Скрипт GameMaster назначит случайный порядок запуска для скриптовых ботов. Скриптботы затем вызываются в этом порядке, пока они еще живы. Скриптботы имеют 10 очков здоровья (HP) и начинают с 10 очков энергии (EP) каждый ход, которые они могут использовать для перемещения или атаки. В начале каждого хода, Scriptbot будет лечить один HP или получит один дополнительный EP, если он уже на 10 HP (таким образом, запуск иногда может быть жизнеспособной стратегией).
Битва заканчивается, когда выживает только один Scriptbot или когда прошло 100 ходов. Если в конце битвы несколько Scriptbots живы, их место определяется на основе следующих критериев:
- Больше всего здоровья.
- Большая часть нанесенного урона.
- Большая часть урона получена.
Scriptbot Input
GameMaster напечатает карту битвы в файл с именем, из map
которого Scriptbot будет иметь доступ для чтения. Карта может принимать любую форму, поэтому важно, чтобы Scriptbot мог ее интерпретировать. Ваш Scriptbot будет вызываться с одним параметром, обозначающим EP. Например...
:> example_scriptbot.py 3
Scriptbot будет вызываться до тех пор, пока он не потратит все свои EP или максимум 10 11 раз. Файлы карт и статистики обновляются перед каждым вызовом.
Выход Scriptbot
Скриптботы должны выводить свои действия на полную. Список возможных действий:
MOVE <DIRECTION> <DISTANCE>
Стоит 1 EP за
DISTANCE
. КомандаMOVE
перемещает вашего Scriptbot по карте. Если на пути есть что-то, например стена или другой Scriptbot, GameMaster переместит ваш Scriptbot как можно дальше. ЕслиDISTANCE
дается больше, чем оставшийся EP Scriptbot, GameMaster будет перемещать Scriptbot до тех пор, пока его EP не закончится.DIRECTION
может быть любое направление , компасN
,E
,S
, илиW
.PUSH <DIRECTION> <DISTANCE>
Стоит 1 EP за
DISTANCE
. КомандаPUSH
позволяет Scriptbot переместить другого Scriptbot. Scriptbot, выдающий команду, должен находиться непосредственно рядом с Scriptbot, который выдвигается. Оба Scriptbots будут двигаться в указанном направлении, если не будет объекта, блокирующего Scriptbot.DIRECTION
иDISTANCE
такие же как дляMOVE
команды.ATTACK <DIRECTION>
Стоит один EP. Команда
ATTACK
наносит 1 повреждение любому Scriptbot непосредственно рядом с выдающим Scriptbot и в указанном направлении.DIRECTION
такой же, как дляMOVE
команды.PASS
Заканчивается твоя очередь.
Поддерживаемые Языки
Чтобы это было разумным для меня, я приму следующие языки:
- Джава
- Node.js
- питон
- PHP
Вы ограничены библиотеками, которые обычно упакованы с вашими языками из коробки. Пожалуйста, не заставляйте меня искать неясные библиотеки, чтобы ваш код работал.
Представление и оценка
Разместите свой исходный код Scriptbot ниже и дайте ему крутое имя! Пожалуйста, также перечислите версию языка, который вы использовали. Все Scriptbots будут проверены на 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? - feersum
Каждый Scriptbot начнет раунд / ход с 10 EP. Любой не потраченный EP будет пропадать.
Я думаю, что у меня есть, но просто для пояснения: с ботами A и B, порядок событий A @ 10EP-> MOVE MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACK ... или A @ 10EP-> MOVE A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? Другими словами, все ли действия в одном цикле запросов контроллера-бота являются атомарными? Если так, то почему цикл? Почему бы не вернуть один файл со всеми действиями, которые необходимо выполнить? В противном случае боты должны будут записывать свои собственные файлы состояний, чтобы отслеживать последовательности действий. Файл карты / статистики будет действителен только до первого действия. - КОТО
Ваш второй пример близок, но не совсем прав. В течение хода Scriptbot вызывается повторно до тех пор, пока их EP не будет потрачен, или максимум 11 раз. Файлы карт и статистики обновляются перед каждым вызовом. Цикл полезен в случае, если бот выдает неверный вывод. GameMaster будет иметь дело с неверным выводом и снова задействует бота, давая боту возможность исправить свою ошибку.
вы выпустите скрипт GameMaster для тестирования? - IchBinKeinBaum
Скрипт GameMaster не будет выпущен. Я бы посоветовал вам создать карту и файл статистики, чтобы проверить поведение вашего бота.
Если robotA толкает robotB в ловушку, зачисляется ли robotA баллы «нанесенный урон», равные текущему состоянию здоровья robotB? - Майк Суини
Да, это хорошая идея. Бот получает очки урона, равные здоровью любого бота, которого он помещает в ловушку.
источник
map
файл всегда окружен#
символами? Если нет, что происходит в случае, если бот пытается уйти с карты?#
и ваш Scriptbot будет запускаться внутри этих границ.Ответы:
Убийца (Java 1.7)
Пытается убить врагов, когда это возможно, в противном случае перемещает одно поле Он довольно хорош в поиске пути к врагу, но ничего не делает, чтобы спрятаться от других ботов.
источник
Avoider v3
Простой настроенный бот. Боится других роботов и ловушек. Это не будет атаковать. Он игнорирует файл статистики и вообще не думает о будущем.
Это в основном тест, чтобы увидеть, как правила будут работать, и как тупой противник для других участников.
Изменить: теперь будет проходить, когда нет движения лучше.
Edit2: роботы могут быть «1234» вместо «123»
Код Python:
источник
elif ch in '123':
Вы хотите найти хотя бы 1234. Если вы бот 3, список оппонентов будет 124.BestOpportunityBot
Это оказалось немного дольше, чем я рассчитывал ... и я не уверен, что полностью понимаю правила для поворотов, поэтому посмотрим, как это получится.
источник
Должен Закончить Еду
Python:
источник
import sys
?