Skip to content
Vasily edited this page Nov 14, 2016 · 5 revisions

Визуализатор для Russia AI Cup

Визуализатор сделан для russian AI Cup. Он предоставляет возможность отрисовывать информацию в виде примитивов в local-runner.

Установка

Прежде чем установить, проделайте ту работу, которая указана в разделе "Быстрый старт" на сайте russian AI Cup:

  • Скачайте языковой пакет
  • Скачайте local-runner
  • Создайте проект

После чего надо встроить визуализатор в local-runner:

  • Скачайте архив [visualizer-plugins.zip] из последнего выпуска (https://github.com/JustAMan/russian-ai-cup-visual/releases)
  • Распакуйте
  • Скопируйте содержимое архива (*.class файлы) в папку local-runner/plugins
  • Откройте local-runner.properties, или если вы используете какой-то другой вариант настроек local-runner'а, то откройте эти *.properties.
  • В файле найдите строчку: plugins-directory= и замените на plugins-directory=plugins
  • Визуализатор готов к использованию!

Включение в проект

Добрые люди для использования под разные языки уже написали классы:

  • Чтобы их скачать зайдите на ту же страницу, возьмите последний выпуск и скачайте из него архив "Source code.zip"
  • Распакуйте
  • Зайдите в папку clients
  • Скопируйте содержимое одной из папок в зависимости от вашего языка. На момент написания были: cpp, csharp, java, python, scala
  • Вставьте эти файлы в ваш проект

Использование

Прежде чем использовать, обращаю внимание, что очень желательно избежать компиляции (и использования вообще) визуализатора на сервере. То есть для клиента (запусков локально) и сервера (запусков на серверах russianaicup.ru) нужно писать разный код. Для этого в языках есть различные возможности: препроцессоры, проверка наличия пакета и т.п.

Общая информация

Для каждого языка способ работы с визуализатором слегка отличается, но есть функции которые есть на всех языках:

Функции отрисовки
  • circle - рисует не закрашенный круг заданного цвета по заданным координатам и радиусу
  • fillCircle - рисует закрашенный круг заданного цвета по заданным координатам и радиусу
  • rect - рисует не закрашенный прямоугольник заданного цвета по заданным координатам
  • fillRect - рисует закрашенный прямоугольник заданного цвета по заданным координатам
  • line - рисует линию заданного цвета по заданным координатам
  • text - пишет текст заданного цвета по заданным координатам
Вспомогательные функции

Прежде чем начать использовать любую функцию отрисовки, надо вызвать одну из комманд: beginPre, beginPost или beginAbs. После окончания отрисовки надо вызвать эквивалентную команду: endPre, endPost, endAbs. Post и Pre рисуют в координатах мира, Abs - в координатах экрана (т.е. в пискелях). Отличие этих команд заключается в том, где будут рисоваться фигуры - под всем, что рисует local-runner или над всем что рисует local-runner. Разрешается использовать обе команды, но не стоит их вкладывать друг в друга.

C++

  • Нужно скопировать файлы Debug.h и Debug.cpp из папки cpp и подключить их в проект
  • Создайте экземпляр класса Debug(). Обращаю внимание, что на протяжении всей игры он должен быть один, поэтому он должен быть или глобальной переменной или включён в класс MyStrategy.
  • Для дальнейшей работы используйте функции экземпляра класса Debug, как описано в пункте "Общая информация"

СSharp

  • Тут можно выбрать один из двух классов: Debug.cs или VisualClient.cs, находящихся в папке csharp.
Debug.cs
  • При запуске MyStrategy вызовите статическую функцию connect, указав в качестве host: 127.0.0.1, а port: 13579 (если вы не меняли настройки самого визуализатора). Не стоит вызывать функцию connect больше одного раза.
  • Для дальнейшей работы используйте статические функции класса Debug, как описано в пункте "Общая информация"
VisualClient.cs
  • Создайте экземпляр класс VisualClient с параметрами: host = 127.0.0.1, port = 13579 (если вы не меняли настройки самого визуализатора). Не стоит создавать несколько экземпляров этого класса, поэтому позаботьтесь, чтобы он создавался всего один раз.
  • Для дальнейшей работы используйте функции экземпляра класса VisualClient, как описано в пункте "Общая информация"

Java

  • Скопируйте файл VisualClient.java из папки java
  • Создайте экземпляр класса VisualClient. Не стоит создавать несколько экземпляров этого класса, поэтому проследите чтобы он создавался только одни раз.
  • Для дальнейшей работы используйте функции экземпляра класса VisualClient, как описано в пункте "Общая информация"

Python

  • Скопируйте файл debug_client.py из папки python
  • Создайте экземпляр класса DebugClient. Как это сделать правильней всего можно посмотреть в файле MyStrategy.py в папке python.
  • Для дальнейшей работы используйте функции экземпляра класса DebugClient, как описано в пункте "Общая информация"

Scala

  • Скопируйте файл VisualClient.scala из папки scala
  • Создайте экземпляр класс VisualClient с параметрами: host = 127.0.0.1, port = 13579 (если вы не меняли настройки самого визуализатора). Не стоит создавать этот класс в нескольких экземплярах, поэтому убедитесь что он создается всего один раз.
  • Для дальнейшей работы используйте функции экземпляра класса VisualClient, как описано в пункте "Общая информация"

Запуск

После того как было проделано всё вышесказанное, можно запускать стратегию:

  • Запускаем local-runner, через скрипт (.bat или .sh)
  • Видим окошко с подобной надписью: "Waiting for game client to connect..."/"Ожидание подключения стратегии..."
  • Запускаем свою стратегию (о том, как это сделать, написано на сайте Russian AI Cup'a)
  • Если всё прошло успешно, то появится визуализация самой игры, и помимо нее будут рисоваться ваши фигуры.