2. О докладчике
Владимир Кожаев
Аспирант Института
Кибернетики имени В.М.
Глушкова
E-mail:vkozhaev@gmail.com
3. Постановка задачи
Казуальные игры со сложной логикой
Логические: шахматы, шашки, домино, карточные, в дурака
Ролевые игры
Квесты
Тейкуны
Характеризуются
Сложные правила игры
Много платформ: IoC,Flash, Android, Unity3d, JavaScript|
HTML-5, Windows Phone etc.
Техническое задание меняется по ходу выполнения игры
4. Постановка задачи
Логика меняется по ходу создания
игры. Нужно менять быстро
Переносится на разные
платформы. Все то – же, но нужно
переписывать. Как этого избежать?
5. Постановка задачи
Программисты vs дизайнеры
Поэты vs технари
Как программисту понять, что хочет геймдизайнер?
Как убедиться, что понято правильно?
Как показать противоречивость требований?
Нужно средство связи!
Простое – чтоб понимали дизайнеры
Мощное – чтоб программировать
6. Постановка задачи
Нужно средство создания игровой
логики, такое чтоб:
Логику можно быстро создавать
Покрывало несколько платформ
Удобное для дизайнеров и
программистов
7. Чем пользуются сейчас?
Системы основанные на правилах
Мультиплатформенные среды
Кроссплатформенные среды
Мультиплатформенные системы
Игровые фреймворки
Языки общего назначения с динамической типизацией
Языки специального назначения с динамической типизацией
Применение автоматного подхода
8. Системы основанные на правилах
Базы знаний, buisnes rules systems
Правила вида “если - то”
Вывод одного правила может анализироваться другим
Для задания множества правил используется декларативный язык
Логика на декларативном языке, конкретная работа – на
декларативном
Для осуществления логического вывода используется алгоритм
Рете
Jess, DRoos, HamurrapyRules, Oracle busines rules и ещё несколько
десятков
9. Системы основанные на правилах
+ -
Выбор средств на любой Нет реализации под
вкус большинство
Большинство бесплатные казуальных платформ
Широкие возможности Сложны в изучении
Наличие коммьюнити, Заточены под бизнес
литературы, форумов
Хорошая идея
10. Мультиплатформенные системы
Один язык – много разных платформ.
Adobe Alchemy: C++ во флеш
HaXe – на Flash, JavaScript, PHP,С#, C++
Marmalade – IoC, Android, Symbean, Bada
Corona 2D - IoC, Android
11. Мультиплатформенные системы
+ -
Отсутствует поддержка нативных
Кодим один раз - работает везде
возможностей
Под разные платформы – разные
библиотеки
Не упрощают разработку
собственно логики
12. Кросплатформенные системы
Код в байткод – байткод – в интерпретатор.
Иногда интерпретатор встраивается в инсталляцию
Adobe Air, Unity3D
Java – почти
13. Кросплатформенные системы
+ -
Пишем один раз, работает Большой объем файла
везде инсталляции
Действительно везде Усложнена поддержка
Сообщество нативных возможностей
Документация Собственно логику
Инструментальные средства разрабатывать ничем не
легче
14. Игровые фреймворки
Набор библиотек и утилит облегчающих разработку игр
Предустановленные события: столкновения, поддержка клавиш,
поиск пути, система частиц
Поиск пути
И многое другое
Daiquiri, Flixel, Pixelblitz, PushButton Engine,Bold Pixel Engine v1
15. Игровые фреймворки
Действительно упрощает Для сложных игр
разработку игр возможностей недостаточно
Большой выбор Глюкавые
Бесплатные Дизайнерам не понятны
Логика размазана по коду
16. Языки общего назначение с динамической типизацией
Lua, Python, JavaScript, Sсheme
На них пишутся скрипты
Скрипты интерпретируются
Интерпретатор встроен в игру
Скрипты декларативные – вызывают методы базового языка
17. Языки общего назначение с динамической типизацией
+ -
Спагетти – код
Простые Медленный флеш плеер на мобилке +
Есть реализация под все медленный интерпретатор –
платформы ахтунг!!!
Подходят в качестве скриптов верхнего уровня: верстка GUI,
графика и т.п.
18. Языки специального назначения с динамической
типизацией
Функциональные
Логические
Scheme, Common Lisp, ProLog, Scala, Erlang
Создаем Domain Specific Language
Пишем скрипт в декларативном стиле
Скрипт выполняется интерпретатором
19. Языки специального назначения с динамической
типизацией
+ -
Лаконичный синтаксис Нет средств для большинства
Быстрее, чем ЯП общего назначения казуальных платформ
Заточенность под искуственный Сложны для изучения
интеллект
DSL простые – понятны дизайнеру
Подходит для очень опытной команды
20. Автоматное программирование
Игровым агентом управляет конечный автомат
Операции производятся на: входе в состояние, выходе из
состояния, переходе из состояния A в B, переходе из состояния
в себя – же
Для задания автомата применяется декларативный язык
Скрипт трансформируется в структуру данных на базовом языке
Чтение скрипта происходит один раз
Конечный автомат представляется в виде ориентированного
графа
23. Автоматное программирование
Что есть сейчас?
Множество средств
Визуализация, моделирование, применение
Не подходят :(
Почему?
Нет инструмента единого для всех языков
Обеспечивают возможности не нужные для игр
Сложны в изучении
Не поддерживаются
24. ASML
ASML – Abstract State Machine Language
http://research.microsoft.com/en-us/projects/asml/
Разработан компанией Microsoft
Функциональный
Декларативный – вызывает методы императивных языков
Основное предназначение – создание исполняемых
спецификаций
Минусы
Есть только для платформы .NET
Нужно изучать
Не заточен под игры
Вывод: хорош, но не для игр
25. UniMod
http://unimod.sourceforge.net/
Разработка Шалыто А.А
Плагин под Eclipse
Визуальный редактор графа состояний
Входные файлы в формате XML
На выходе Jar – файлы
Или компиляция под Symbea
Минусы:
Не поддерживается
Только Java и Symbean
Неоправданно сложный для игр
Нет документации
26. Резюме
Существующие на рынке средства не в полной мере
удовлетворяют потребностям
Или для одной платформы
Или неудобные
Или медленные
Или недокументированные
27. Что предлагаю я
Автоматное программирование
DSL на базе XML
XML читается один раз
Транслируется в структуру данных на базовом ЯП
Структура данных – свойство агента
Можно менять структуру данных в процессе игры
Другое свойство – состояние
Управляющие воздействия при входе в состояние, выходе из
него, переходе из одного состояния в другое и если состояние
не меняется
Язык декларативный, при изменении состояний вызываются
функции базового я.п.
На каждый тик проходим массив обьектов меняем состояния,
если потребуется и выполняем управляющие воздействия
28. Что предлагаю я
Преимущества подхода
Работает быстрее, чем интерпретатор
Парсинг XML легко перенести на любой язык
DSL – простой, понятен для дизайнера
Можно сделать графический редактор
Код опенсорсный – меняйте как хотите
29. Что уже сделано
Язык на базе XML – пример описания состояния
<state name="move_to_tower"> <!-- Имя состояния -->
<usecases>
<usecase name="charging"> <!-- описание перехода -->
<roole>
((not energyIsLow) and (not needRepairTower)) or (goalIsGetted)
</roole>
<methods> <!-- методы выполняемые при переходе -->
<method name="endMoving"/>
</methods>
</usecase>
</usecases>
<state_methods> <!-- Методы выполняемые -->
<methods_before>
<method name="beforeMoving"/> <!-- перед входом в состояние -->
</methods_before>
<methods_after> <!-- перед входом в новое состояние-->
<method name="afterMoving"/>
</methods_after>
<methods_in_process> <!-- На каждый тик, если состояние не изменилось -->
<method name="move"/>
</methods_in_process>
</state_methods>
</state>
30. Что уже сделано?
Написан код для flash
https://github.com/vladimirkozhaev/casualintellect
Что в ближайшей перспективе
Создание текстового DSL языка - xml не удобен для
программирования
Портирование на JavaScript
Портирование на Android
Создание графического редактора на базе визуального языка
ДРАКОН(Дружелюбный Русский Алгоритмический язык
Который обеспечивает наглядность)