-
Notifications
You must be signed in to change notification settings - Fork 21
Tutorial
Визуализатор сделан для 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. Разрешается использовать обе команды, но не стоит их вкладывать друг в друга.
- Нужно скопировать файлы Debug.h и Debug.cpp из папки cpp и подключить их в проект
- Создайте экземпляр класса Debug(). Обращаю внимание, что на протяжении всей игры он должен быть один, поэтому он должен быть или глобальной переменной или включён в класс MyStrategy.
- Для дальнейшей работы используйте функции экземпляра класса Debug, как описано в пункте "Общая информация"
- Тут можно выбрать один из двух классов: Debug.cs или VisualClient.cs, находящихся в папке csharp.
- При запуске MyStrategy вызовите статическую функцию connect, указав в качестве host: 127.0.0.1, а port: 13579 (если вы не меняли настройки самого визуализатора). Не стоит вызывать функцию connect больше одного раза.
- Для дальнейшей работы используйте статические функции класса Debug, как описано в пункте "Общая информация"
- Создайте экземпляр класс VisualClient с параметрами: host = 127.0.0.1, port = 13579 (если вы не меняли настройки самого визуализатора). Не стоит создавать несколько экземпляров этого класса, поэтому позаботьтесь, чтобы он создавался всего один раз.
- Для дальнейшей работы используйте функции экземпляра класса VisualClient, как описано в пункте "Общая информация"
- Скопируйте файл VisualClient.java из папки java
- Создайте экземпляр класса VisualClient. Не стоит создавать несколько экземпляров этого класса, поэтому проследите чтобы он создавался только одни раз.
- Для дальнейшей работы используйте функции экземпляра класса VisualClient, как описано в пункте "Общая информация"
- Скопируйте файл debug_client.py из папки python
- Создайте экземпляр класса DebugClient. Как это сделать правильней всего можно посмотреть в файле MyStrategy.py в папке python.
- Для дальнейшей работы используйте функции экземпляра класса DebugClient, как описано в пункте "Общая информация"
- Скопируйте файл 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)
- Если всё прошло успешно, то появится визуализация самой игры, и помимо нее будут рисоваться ваши фигуры.