gifts2017

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

Опубликовал Сергей Лосников (Lars Ulrich) в раздел Программирование - Практика программирования

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

demo

 

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

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

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

 

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

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

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

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

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

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

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

Скачать файлы

Наименование Файл Версия Размер
База с движком и тестовым ботом 30
.dt 153,45Kb
02.06.14
30
.dt 153,45Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Иванов (xten) 03.06.14 16:08
Очень красиво! Тут нечеткая логика как-то используется?
2. Ivan Khorkov (vano-ekt) 04.06.14 09:43
"заказать внедрение", что ли...
не, работать надо :)
DrAku1a; AllexSoft; KreditNIK; SinglCOOLer; romign; DoctorRoza; 1cWin; Aspire1C; +8 Ответить
3. Brr (brr) 04.06.14 09:54
Это просто супер. Осталось замутить 1с:Роботы на манер С-robots
4. mikhail burlakov (burlakov) 04.06.14 13:13
надо еще кодогенератор таким же образом для руководства сделать. отмазка от работы будет просто шикарная. коммерческий успех обеспечен ;)
5. DAnry (DAnry) 05.06.14 00:19
Капец! Если теперь кто-нибуть мне скажет, что 1с это всего лишь система учета, я его ...
6. Эмиль Карапетян (amon_ra) 05.06.14 09:29
вот бы еще хоть кусочек кода был бы выложен...
7. Александр Кунташов (kuntashov) 05.06.14 12:26
Вообще был уже был даже конкурс однажды, и даже еще на 7.7 :)
Кажется NS или кто-то из других старожилов Т1С делал.
8. Вячеслав Кожухарь (slavikss) 05.06.14 17:11
NS вроде шахматы даже делал на 7.7. :)
9. Алексей Роза (DoctorRoza) 06.06.14 08:14
10. Роман Ложкин (webester) 10.06.14 15:46
то сайт, то битва, скучно человеку заниматься учетными системами )
DrAku1a; Nuobu; AllexSoft; +3 Ответить 1
11. Михаил Русанов (RainyAugust22) 16.06.14 15:29
Как запустить, при старте ошибка:
1С:Предприятие 8.3 (8.3.4.465)
{Обработка.УправлениеБоем.Форма.Форма.Форма(337)}: Значение не является значением объектного типа (СделатьХод)
ХодЮнита = ОбъектОбработки.СделатьХод(ИсходнаяСтруктураСостоянийСоседнихЯчеек.ФиксированныйМассивСостоянийСоседнихЯчеек, Юнит);
12. Сергей Лосников (Lars Ulrich) 16.06.14 18:17
(1) в шаблонном боте логика самая простая, никаких наворотов.

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

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

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

(11) похоже проблема с динамически-создаваемым объектом внешней обработки... либо обработка отсутствует в хранилище вообще, либо нарушена структура модуля объекта. если используете шаблонного бота, попробуйте еще раз загрузить внешнюю обработку бота: сохраните из конфигуратора обработку "ШаблонБота" во внешний файл, а затем загрузите этот файл в справочник "Боты" в режиме предприятия (в новую или в существующую запись), и попробуйте выбрать эту обновленную запись в режиме боя. если используете свою обработку, убедитесь, что в модуле объекта функция СделатьХод экспортная.
13. Александр Топольский (AlexanderKai) 17.07.14 09:41
Когда чемпионат будет? :)
14. Сергей Лосников (Lars Ulrich) 17.07.14 10:21
(13) да вот ждали окончания ЧМ в Бразилии, чтоб не создавать им конкуренцию непреодолимой силы :)
15. Яна (Tiger86) 17.07.14 10:45
обязательно надо посмотреть, но наверное я не смогу достояную конкуренцию составить в виду отсутсвия достаточного количества времени на это )))
16. Олег Сорокин (Oleg_nsk) 23.07.14 08:58
если 1с добавят в платформу модуль рисования, то количество любителей позаниматься хренью увеличится в разы... поэтому наверное и не добавляют...
17. Яна (Tiger86) 23.07.14 08:59
(16) Oleg_nsk, порой важно переключить внимание чтоб свежие идеи по поводу решения насущных проблем рождались )))
18. Алексей Семешин (Sirus Virus) 20.01.15 10:54
Вспоминается пословица про кота и яйца :) уж извините.
19. MORT Cadavre (mort64ram) 12.08.16 11:01
20. Сергей Лосников (Lars Ulrich) 16.08.16 10:36
(19) mort64ram, да осталось совсем немного... в поисках организаторов, спонсоров и участников.. видите какой ажиотаж :)
21. MORT Cadavre (mort64ram) 22.08.16 07:02
(20) Lars Ulrich, ну я готов если что=)