Тренируем искусственный интеллект


Добрый день, уважаемые коллеги. Хочу с Вами поделиться одной пятничной разработкой. Виндиниум — игра, в которой необходимо программировать искусственный интеллект. Вы должны взять под контроль легендарного героя, используя язык программирования по вашему выбору. Вы будете сражаться с другим ИИ. Победит герой с наибольшим количеством золота.

Добрый день, уважаемые коллеги. Хочу с Вами поделиться одной пятничной разработкой.

Виндиниум — игра, в которой необходимо программировать искусственный интеллект. Вы должны взять под контроль легендарного героя, используя язык программирования по вашему выбору. Вы будете сражаться с другим ИИ. Победит герой с наибольшим количеством золота.

На сайте есть инструкция как играть и писать. Также есть много примеров ботов на гитхабе на других языках программирования.

Начнем. Сначала вам необходимо создать героя, если есть желание можете зарегистрироваться, чтобы ваш ник остался вашим навсегда. Регистрация тут. После этого вам выдадут ключ, с помощью которого вы сможете играть.

Для начала игры необходимо отправить запрос на сервер, с json содержимым.  Если это тренировка то в параметрах передается ключ, карта и количество ходов. Если режим — арена тогда карта выбирается рандомно, и количество ходов равно 1200 по умолчанию.

 Пример кода:

Функция ПолучитьНовоеСостояниеИгры()

СтруктураПараметров = Новый Структура;

Если Режим = "training" Тогда
СтруктураПараметров.Вставить("key", Ключ);
СтруктураПараметров.Вставить("turns", КоличествоХодов);
СтруктураПараметров.Вставить("map", "m1");
АдресСервиса = "/api/training";
Иначе
СтруктураПараметров.Вставить("key", Ключ);
АдресСервиса = "/api/arena";
КонецЕсли;

Возврат ОтправитьJSONЗапрос(СтруктураПараметров,АдресСервиса);

КонецФункции

Функция ОтправитьJSONЗапрос(СтруктураПараметров,АдресСервиса)

ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураПараметров);
СтрокаJSON = ЗаписьJSON.Закрыть();

Соединение = Новый HTTPСоединение(АдресСервера);
HTTPЗапрос = Новый HTTPЗапрос(АдресСервиса);

HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json; charset=utf-8");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON .УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку());
Возврат ПрочитатьJSON(ЧтениеJSON , Ложь);
Иначе
Возврат Неопределено;
КонецЕсли;

КонецФункции 

 В ответ придет json ответ с параметрами игры. Опишу основные параметры:

  • game — параметры игры.
    • heroes — параметры других игроков на поле боя;
    • board — параметры игрового поля;
    • hero — параметры вашего героя на поле боя;
  • viewUrl — ссылка где можно наблюдать за игрой
  • playUrl — ссылка для дальнейших действий над вашим героем

В параметре board приходит строка, которая описывает карту. Строку необходимо разделить на количество игровых клеток и выйдет что-то на подобии этого:

 Пример карты

######$-    $-############$-    $-######
######        ##        ##        ######
####[]    ####            ####    []####
##      ####  ##        ##  ####      ##
####            $-    $-            ####
##########  @1            @4  ##########
############  ####    ####  ############
$-##$-        ############        $-##$-
$-      $-################$-      $-
########################
########################
$-      $-################$-      $-
$-##$-        ############        $-##$-
############  ####    ####  ############
##########  @2            @3  ##########
####            $-    $-            ####
##      ####  ##        ##  ####      ##
####[]    ####            ####    []####
######        ##        ##        ######
######$-    $-############$-    $-######

где :

«##» — непроходимый лес
«@1» — герой номер 1
«[]» — таверна(для восстановления жизней)
«$-» — Золотая шахта(ничья)
«$1» — Золотая шахта захваченная героем №1

Проанализировав карту, делаем выводы куда двигаться нашему герою. Используя playUrl отправляем запрос с параметром dir указывая действие для героя: ‘Stay’, ‘North’, ‘South’, ‘East’, ‘West’.

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

В следующе статье напишу, как с помощью матриц, выбрать самый кратчайший путь к золоту.  Дерзайте.

На написания статьи натолкнула публикация https://geektimes.ru/post/291823/ и https://geektimes.ru/post/291879/

Leave a Comment

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