Хотите написать своего бота и устроить битву?
Хотите отдохнуть, расслабиться и завалить рабочий день отдела? :)
Вы зашли по адресу!
Идея не нова, но реализацию на 1С не видел. Почему ЭТО на 1С? Да просто так! На крайний случай поставьте ЭТО в школе/универе и школоло абитуриенты сами побегут учить матчасть :)
Говорим мы здесь о реализации некой пошаговой битвы, в которой действием на поле управляем "МОЗГ" написанны Вами. Суть в следующем:
-
в игре могут участвовать несколько ботов;
-
имеется поле определенной размерности, на котором действуют юниты игроков (описаны ниже);
-
юнит БАЗА - с определенной периодичностью и последовательностю создают юнитов (этим процессом управляет движок) следующих типов:
-
юнит [З] - назовем его земледельцем! этот юнит захватывает территорию просто перемещаясь по полю; может драться с любыми другими юнитами, но слабоват здоровьем;
-
юнит [Л] - назовем его легионером! этот юнит - боец; вся суть его сводиться к "seek and destroy" (метла forever :)); чисто технически легионеры накапливают опыт, тем самым повышая наносимый урон;
-
каждый юнит обладает определенным набором невосполнимого здоровья: самая "здоровая" - база, потом легионер и, наконец, земледелец;
-
Любая битва между двумя юнитами приводит к следующему:
-
если по здоровью юниты равны, побеждает нападающий, если нет, то тот кто "здоровее";
-
каждый юнит, вне зависимости от исхода боя, наносит оппоненту урон, в связи с чем в итоге погибнуть могут оба;
-
-
выполняя очередной ход, движок передает обработке-боту информацию, на основании которой тот определяет дальнейшее действие юнита;
-
в качестве информации обработке-боту передается структура, описывающая текущего юнита, а так же массив состояний окружающих его 8 ячеек поля (индексация ячеек начинается с левого верхнего угла по часовой стрелке);
-
обработка-бот принимает решение и возвращает структуру, описывающую действие для текущего юнита (переместиться или ничего не делать) и направление перемещения (индекс массива окружающих ячеек);
-
хранить какие-либо данные в объекте обработка-бот не может, но она знает свой UID (уникальный идентификатор на текущий бой), что можно использовать для хранения данных во временном хранилище;
-
игра идет до полного уничтожения юнитов соперников;
Во вложении демо-база с движком и загруженным шаблонным ботом (именно он усредно трудится на демке публикации), который так же можно найти в ветке обработок конфигурации под именем "ШаблонБота".
Как создать СВОЕГО бота:
-
заходим в конфигурацию и сохраняем во внешний файл обработку "ШаблонБота";
-
в модуле объекта внешнего файла обработки пишем логику бота (там же есть небольшое описание принимаемых и возвращаемых ботом значений);
-
модуль объекта содержит готовый каркас для написания своего бота и некий интерфейс для взаимодействия обработки с движком; ломать каркас, понятное дело, нельзя :)
-
разработку бота ведем в конфигураторе этой же демо-базы, т.к. в логике используются "прикладные объекты";
-
не забываем назвать своего бота крутым именем (переменная мИмя модуля шаблона бота);
-
когда логика готова, запускаем демо-базу в режиме предприятия и загружаем файл обработки в справочник "Боты";
-
в обработке "Управление битвой" выбираем {своих/чужих/одних и тех же} ботов и вперед!
Имеем ввиду, что чем больше ботов участвуют в битве, тем тормознутее ведет себя движок при повышении количества юнитов на поле, поэтому можно использовать "регулятор скорости" в обработке "Управление битвой", чтобы уменьшить частоту визуализаций поля битвы, тем самым ускоряя процесс просчета шагов.