Виртуальная битва

Если у Вас есть желание попрактиковаться в создании AI и проверить его в действии, представляем «движок» для проведения виртуальных битв!

demo

 

Хотите написать своего бота и устроить битву?

Хотите отдохнуть, расслабиться и завалить рабочий день отдела? 🙂

Вы зашли по адресу!

 

Идея не нова, но реализацию на 1С не видел. Почему ЭТО на 1С? Да просто так! На крайний случай поставьте ЭТО в школе/универе и школоло абитуриенты сами побегут учить матчасть 🙂

Говорим мы здесь о реализации некой пошаговой битвы, в которой действием на поле управляем "МОЗГ" написанны Вами. Суть в следующем:

  • в игре могут участвовать несколько ботов;
  • имеется поле определенной размерности, на котором действуют юниты игроков (описаны ниже);
  • юнит БАЗА — с определенной периодичностью и последовательностю создают юнитов (этим процессом управляет движок) следующих типов:
  • юнит [З] — назовем его земледельцем! этот юнит захватывает территорию просто перемещаясь по полю; может драться с любыми другими юнитами, но слабоват здоровьем;
  • юнит [Л] — назовем его легионером! этот юнит — боец; вся суть его сводиться к "seek and destroy" (метла forever :)); чисто технически легионеры накапливают опыт, тем самым повышая наносимый урон;
  • каждый юнит обладает определенным набором невосполнимого здоровья: самая "здоровая" — база, потом легионер и, наконец, земледелец;
  • Любая битва между двумя юнитами приводит к следующему:
    • если по здоровью юниты равны, побеждает нападающий, если нет, то тот кто "здоровее";
    • каждый юнит, вне зависимости от исхода боя, наносит оппоненту урон, в связи с чем в итоге погибнуть могут оба;
  • выполняя очередной ход, движок передает обработке-боту информацию, на основании которой тот определяет дальнейшее действие юнита;
  • в качестве информации обработке-боту передается структура, описывающая текущего юнита, а так же массив состояний окружающих его 8 ячеек поля (индексация ячеек начинается с левого верхнего угла по часовой стрелке);
  • обработка-бот принимает решение и возвращает структуру, описывающую действие для текущего юнита (переместиться или ничего не делать) и направление перемещения (индекс массива окружающих ячеек);
  • хранить какие-либо данные в объекте обработка-бот не может, но она знает свой UID (уникальный идентификатор на текущий бой), что можно использовать для хранения данных во временном хранилище;
  • игра идет до полного уничтожения юнитов соперников;

Во вложении демо-база с движком и загруженным шаблонным ботом (именно он усредно трудится на демке публикации), который так же можно найти в ветке обработок конфигурации под именем "ШаблонБота".

Как создать СВОЕГО бота:

  • заходим в конфигурацию и сохраняем во внешний файл обработку "ШаблонБота";
  • в модуле объекта внешнего файла обработки пишем логику бота (там же есть небольшое описание принимаемых и возвращаемых ботом значений);
  • модуль объекта содержит готовый каркас для написания своего бота и некий интерфейс для взаимодействия обработки с движком; ломать каркас, понятное дело, нельзя 🙂
  • разработку бота ведем в конфигураторе этой же демо-базы, т.к. в логике используются "прикладные объекты";
  • не забываем назвать своего бота крутым именем (переменная мИмя модуля шаблона бота);
  • когда логика готова, запускаем демо-базу в режиме предприятия и загружаем файл обработки в справочник "Боты";
  • в обработке "Управление битвой" выбираем {своих/чужих/одних и тех же} ботов и вперед!

Имеем ввиду, что чем больше ботов участвуют в битве, тем тормознутее ведет себя движок при повышении количества юнитов на поле, поэтому можно использовать "регулятор скорости" в обработке "Управление битвой", чтобы уменьшить частоту визуализаций поля битвы, тем самым ускоряя процесс просчета шагов.

21 Comments

  1. xten

    Очень красиво! Тут нечеткая логика как-то используется?

    Reply
  2. vano-ekt

    «заказать внедрение», что ли…

    не, работать надо 🙂

    Reply
  3. brr

    Это просто супер. Осталось замутить 1с:Роботы на манер С-robots

    Reply
  4. burlakov

    надо еще кодогенератор таким же образом для руководства сделать. отмазка от работы будет просто шикарная. коммерческий успех обеспечен 😉

    Reply
  5. DAnry

    Капец! Если теперь кто-нибуть мне скажет, что 1с это всего лишь система учета, я его …

    Reply
  6. amon_ra

    вот бы еще хоть кусочек кода был бы выложен…

    Reply
  7. kuntashov

    Вообще был уже был даже конкурс однажды, и даже еще на 7.7 🙂

    Кажется NS или кто-то из других старожилов Т1С делал.

    Reply
  8. slavikss

    NS вроде шахматы даже делал на 7.7. 🙂

    Reply
  9. DoctorRoza

    Наш человек! 🙂

    Reply
  10. webester

    то сайт, то битва, скучно человеку заниматься учетными системами )

    Reply
  11. RainyAugust22

    Как запустить, при старте ошибка:

    1С:Предприятие 8.3 (8.3.4.465)

    {Обработка.УправлениеБоем.Форма.Форма.Форма(337)}: Значение не является значением объектного типа (СделатьХод)

    ХодЮнита = ОбъектОбработки.СделатьХод(ИсходнаяСтруктураСостоянийСоседнихЯчеек.ФиксированныйМассивСостоянийСоседнихЯчеек, Юнит);

    Reply
  12. Lars Ulrich

    (1) в шаблонном боте логика самая простая, никаких наворотов.

    (4) Душелов делал скринсейвер с имитацией бурной кодопечатной деятельности.

    (6) без проблем выложу 🙂 скажите только что именно интересует (или почту в ЛС).

    (10) расширяем границы таксскать 🙂

    (11) похоже проблема с динамически-создаваемым объектом внешней обработки… либо обработка отсутствует в хранилище вообще, либо нарушена структура модуля объекта. если используете шаблонного бота, попробуйте еще раз загрузить внешнюю обработку бота: сохраните из конфигуратора обработку «ШаблонБота» во внешний файл, а затем загрузите этот файл в справочник «Боты» в режиме предприятия (в новую или в существующую запись), и попробуйте выбрать эту обновленную запись в режиме боя. если используете свою обработку, убедитесь, что в модуле объекта функция СделатьХод экспортная.

    Reply
  13. AlexanderKai

    Когда чемпионат будет? 🙂

    Reply
  14. Lars Ulrich

    (13) да вот ждали окончания ЧМ в Бразилии, чтоб не создавать им конкуренцию непреодолимой силы 🙂

    Reply
  15. Tiger86

    обязательно надо посмотреть, но наверное я не смогу достояную конкуренцию составить в виду отсутсвия достаточного количества времени на это )))

    Reply
  16. Oleg_nsk

    если 1с добавят в платформу модуль рисования, то количество любителей позаниматься хренью увеличится в разы… поэтому наверное и не добавляют…

    Reply
  17. Tiger86

    (16) Oleg_nsk, порой важно переключить внимание чтоб свежие идеи по поводу решения насущных проблем рождались )))

    Reply
  18. Sirus Virus

    Вспоминается пословица про кота и яйца 🙂 уж извините.

    Reply
  19. mort64ram

    Когда чемпионат?

    Reply
  20. Lars Ulrich

    (19) mort64ram, да осталось совсем немного… в поисках организаторов, спонсоров и участников.. видите какой ажиотаж 🙂

    Reply
  21. mort64ram

    (20) ну я готов если что=)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *