Турнир "Arcomage Challenge" О турнире Турнир представляет собой соревнование искусственных интелектов, проводящееся в рамках Зимней школы по программированию 2014. В основе турнира лежит карточная игра Arcomage (http://ru.wikipedia.org/wiki/Arcomage) с минимальными изменениями. Турнир состоит из боя стратегии-участника с каждой из стратегийконкурентов, по итогам которых определится победитель. Участие в данном соревновании не является обязательным и его результаты не влияют на итоговые результаты команды в общем зачете Зимней Школы. В турнире могут участвовать команды, зарегистрированные на школе в исходном составе или в смешанном, но состоящие не более чем из трех игроков, однако, каждый участник может участвовать только в одной команде. Команда-победитель турнира получает ценный приз. Правила проведения турнира Турнир проводится несколько дней. Вечером каждого дня проводятся бои между командами, отправившими хотя бы одну стратегию. В боях от каждой команды принимает участие только последняя отправленная стратегия. В зависимости от количества отправленных стратегий к моменту начала боев, каждая команда проведет некоторое (одинаковое для всех) число боев. Количество боев в разные дни может различаться. В каждом бою за победу команде дается 3 очка, за ничью - 1 одно очко, за поражение - 0 очков. Если игрок проиграл, уничтожив свою башню (см. ниже), то он получает одно очко, а противник - 2 очка. После проведения всех боев одного дня строится общая таблица, в которой команды отсортированы по количеству заработанных за день очков. Первые 8 команд получают баллы по системе GP8 (10-8-6-5-4-3-2-1), итого, каждый день разыгрывается максимум 39 баллов. Если несколько команд набрали одинаковое количество очков, то баллы, соответствующие занятым местам, делятся поровну между этими командами. Результаты каждого игрового дня публикуются утром следующего дня. После того, как сформирована итоговая таблица дня, баллы, полученные командами за этот день, умножаются на коэффициент, зависящий от номера дня, получая тем самым взвешенные баллы. Чем выше номер дня, тем больше соответствующий коэффициент. Взвешенные баллы суммируются для каждой команды по всем дням. Победителем турнира считается команда, набравшая наибольшее числов взвешенных баллов. В случае равенства баллов выше будет та команда, которая отправила последнюю стратегию раньше. Таким образом, наибольший "вес" имеют бои, проходящие в последние дни, но и баллы, заработанные "ранними" стратегиями в первые несколько дней, могут определить места для равных по силе стратегий. Коэффициенты для каждого дня, а также предельные времена сдачи стратегий приведены в таблице ниже: Время последней сдачи 15.02, 22:00 16.02, 22:00 17.02, 22:00 18.02, 22:00 19.02, 22:00 20.02, 22:00 21.02, 22:00 22.02, 22:00 23.02, 22:00 Время публикации результатов 16.02, 09:00 17.02, 09:00 18.02, 09:00 19.02, 09:00 20.02, 09:00 21.02, 09:00 22.02, 09:00 23.02, 09:00 24.02, 09:00 Коэффициент 0.01 0.02 0.1 0.2 0.3 0.4 0.75 1 2 Правила игры Arcomage В каждом бою участвуют два игрока. Каждый игрок управляет своим замком. Замок обладает некоторыми атрибутами (Attributes). Атрибуты делятся на несколько видов: Ресурсы (Resources) o Bricks o Gems o Recruits Источники (Modifiers) o Quarry o Magic o Dungeon Стена (Wall) Башня (Tower) Ресурсы требуются для использования карт. Источники увеличивают число ресурсов каждый ход. Стена защищает башню, которая является главным строением замка. Игра состоит из нескольких ходов, производящихся игроками поочереди. Каждый ход игрок может использовать одну из своих карт (если у него достаточно ресурсов) либо сбросить одну из карт (кроме карт, которые не могут быть сброшены). После хода игроку выпадет новая случайная карта из общей колоды, а ход перейдет к другому игроку. Если игрок в свой ход использовал карту, то в зависимости от карты могут произойти одно или несколько следующих событий: 1. Изменятся некоторые атрибуты игрока и/или его противника 2. Будет нанесен урон противнику и/или игроку 3. Сработает специальная способность (Special Ability) карты Изменение атрибутов фиксировано и определяется картой. Некоторые карты изменяют ресурсы (например, карта "Lucky Cache" дает +2 Bricks и +2 Gems), некоторые карты изменяют источники (например, "Spell Weavers" дает +1 Magic), некоторые карты уменьшают вражескую стену или башню. Аналогично, карты могут уменьшать число ресурсов или источников, добавлять ресурсы противнику, наносить урон своей башне или стене, а так же иметь несколько из перечисленных свойств одновременно, но такие карты встречаются реже. Количество ресурсов не может стать отрицательным, а количество источников не может стать меньше 1. Урон - особенное свойство карты. Изначально урон наносится вражеской (для некоторых карт - своей) стене. Если стена отсутствует (значение атрибута равно 0) или ее размер меньше урона, то оставшийся "непоглощенный" урон получит башня. Стена и/или башня уменьшаются ровно на величину полученного урона. Некоторые карты работают иначе при соблюдении особенных условий (Condition) для текущего состояния игры. Например, карта "Corrosion Cloud" наносит 10 урона, если вражеская стена больше 0, и только 7 урона в противном случае. Некоторые карты обладают специальными способностями. При их использовании происходят изменения, которые не сводятся к фиксированному изменению атрибутов. Например, при использовании карты "Parity" значения "Magic" у обоих игроков становится равно наибольшему значению "Magic" среди этих игроков. Некоторые карты (например "Smoky Quartz") позволяют игроку ходить снова. При этом игрок получает новую случайную карту вместо использованной. Каждая карта требует определенное число одного из ресурсов для использования. Например, "Dragon's Heart" требует 24 Bricks, "Emerald" 6 Gems, а "Werewolf" - 9 Recruits. Перед использованием карты соответствующее количество ресурса отнимается у игрока. Если у игрока недостаточно ресурсов для использования карты, то он должен сходить другой картой (или сбросить одну из карт). При сбрасывании карты количество ресурсов не изменяется, но и эффекты от карты не происходят. После своего хода (использования или сброса карты), но не после хода соперника, игрок получает некоторое число ресурсов в зависимости от количества источников. Количество Bricks увеличивается на значение Quarry. Аналогично Magic увеличивает Gems, а Dungeon - Recruits. Изменение ресурсов происходит только после конца хода: даже если игрок использовал несколько карт за ход, изменение произойдет один раз. Всего в игре есть 102 различные карты - по 34 для каждого из ресурсов. Из них 12 карт имеют особенные условия и только 5 карт - специальные способности. Изначально в колоде 204 карты (по 2 карты каждого вида), а каждый игрок получает 6 из них, выбранных случайным образом. В начале игры каждому игроку дается по 12 единиц каждого из ресурсов, по 2 единицы каждого из источников, стена 10, башня 15. Кроме того, перед началом игры каждый игрок выбирает бонус - +6 к одному из ресурсов, +1 к одному из источников или +8 к стене. В любой момент игры каждому игроку известно значение атрибутов противника, но не его карты. Однако, игрок может видеть последнюю использованную или сброшенную противником карту. Игрок побеждает, если он уничтожает башню противника (значения соответствующего атрибута станет равно 0), построит башню размером не меньше 75 или накопит не менее 150 единиц одного из ресурсов. Если после очередного хода выполняются условия выигрыша для обоих игроков (например, уничтожены обе башни), то игра считается завершившейся вничью (оба игрока получают по 1 очку). Если игрок своим ходом уничтожил свою башню (например, картой "Berserker"), то он получает 1 очко, а противник получает 2 очка (даже если при этом он выиграл по другому условию). Если колода карт после очередного хода становится пустой, то объявляется ничья (при этом у игроков еще остаются карты). Подробное описание всех карт можно найти по адресу http://ejudge.ws.kh.ua/media/arcomage. Проведение стандартного боя При проведении стандартного боя используется приложение-сервер и два клиента, которые работают в соответствии с реализованными участниками стратегиями. Изначально сервер открывает определенный порт и ждет подключения клиентов. При подключении обоих клиентов игра начинается. После очередного хода сервер сообщает каждому из игроков следующую информацию: состояние игры, состояние своего игрока, состояние противника. Состояние игры содержит следующую информацию: Номер хода Номер игрока, осуществляющего текущий ход Множество карт, находящихся в колоде или у противника Количество карт в колоде Результат игры (если она завершилась) Состояние игрока: Номер игрока Значение атрибутов Множество карт Возможность ходить в текущий ход Состояние противника: Номер игрока Значение атрибутов Последняя использованная или сброшенная карта Данное описание содержит избыточную информацию (например, номер игрока противника можно определить, зная номер своего игрока) для удобства написания стратегии. Для того, чтобы осуществить ход, клиент (стратегия) должен сообщить какую карту из своего набора нужно использовать или сбросить. Клиент должен ответить в течение 0.25 сек после получения состояния от сервера. В противном случае стратегия считается "упавшей" и игрок автоматически проигрывает. После завершения игры сервер передает соответствующее состояние и закрывает соединение. Создание стратегии Для создания стратегии можно воспользоваться одним из предоставленных языковых пакетов. При этом необходимо создать проект в подходящей среде программирования или воспользоваться проектом из пакета. При использовании проекта необходимо реализовать в соответствующем классе методы, отвечающие за логику поведения игрока во время боя: метод, задающий глобальный идентификатор игрока (идентификатор выдается команде при регистрации) метод, задающий отображаемое имя игрока метод, выбирающий бонус перед началом игры метод, отвечающий за выбор используемой/сбрасываемой карты, если игрок должен сходить Методы передачи и обработки данных между клиентом и сервером уже реализованы в языковых пакетах и используются в них по умолчанию. После реализации требуемых методов и, возможно, других вспомогательных методов или классов участник должен собрать проект и убедиться, что полученный исполняемый файл корректно запускается стандартной командой (из предоставленного *.bat-файла) и успешно подключается к серверу. После этого участник может отправить архив с *.bat-файлом (и всеми необходимыми для его исполнения ресурсами) для участия в турнире. Подробную информацию о языковых пакетах и предоставленных утилитах можно найти по адресу http://ejudge.ws.kh.ua/media/arcomage. Отправка стратегии и получение результатов тестирования Выложить стратегию для тестирования можно по адресу ftp://ejudge.ws.kh.ua. Для входа в рабочий каталог используйте выданный Вам логин и пароль. В рабочем каталоге создайте директории соответственно датам за каждый день соревнования (14, 15, 16 и т.д.). В каждой из таких директорий вы располагаете исходный код проекта со стратегией за соответствующий день и в эту же директорию будут выложены отчеты её запусков со стратегиями конкурентов. Таблица с текущим положением участников конкурса доступна по адресу http://ejudge.ws.kh.ua/arcomage.