SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
Обзор технологий




           Игровая логика, проблемы и решения
О докладчике


               Владимир Кожаев
               Аспирант Института
               Кибернетики имени В.М.
               Глушкова
               E-mail:vkozhaev@gmail.com
Постановка задачи



Казуальные игры со сложной логикой

Логические: шахматы, шашки, домино, карточные, в дурака
Ролевые игры
Квесты
Тейкуны

Характеризуются
Сложные правила игры
Много платформ: IoC,Flash, Android, Unity3d, JavaScript|
HTML-5, Windows Phone etc.
Техническое задание меняется по ходу выполнения игры
Постановка задачи

Логика меняется по ходу создания
игры. Нужно менять быстро
Переносится на разные
платформы. Все то – же, но нужно
переписывать. Как этого избежать?
Постановка задачи

Программисты vs дизайнеры
Поэты vs технари

Как программисту понять, что хочет геймдизайнер?
Как убедиться, что понято правильно?
Как показать противоречивость требований?

            Нужно средство связи!

       Простое – чтоб понимали дизайнеры
        Мощное – чтоб программировать
Постановка задачи



Нужно средство создания игровой
 логики, такое чтоб:
Логику можно быстро создавать
Покрывало несколько платформ
Удобное для дизайнеров и
 программистов
Чем пользуются сейчас?



Системы основанные на правилах
Мультиплатформенные среды
Кроссплатформенные среды
Мультиплатформенные системы
Игровые фреймворки
Языки общего назначения с динамической типизацией
Языки специального назначения с динамической типизацией
Применение автоматного подхода
Системы основанные на правилах


Базы знаний, buisnes rules systems
Правила вида “если - то”
Вывод одного правила может анализироваться другим
Для задания множества правил используется декларативный язык
Логика на декларативном языке, конкретная работа – на
   декларативном
Для осуществления логического вывода используется алгоритм
   Рете
Jess, DRoos, HamurrapyRules, Oracle busines rules и ещё несколько
   десятков
Системы основанные на правилах




+                        -
Выбор средств на любой   Нет реализации под
  вкус                     большинство
Большинство бесплатные     казуальных платформ
Широкие возможности      Сложны в изучении
Наличие коммьюнити,      Заточены под бизнес
  литературы, форумов
Хорошая идея
Мультиплатформенные системы


Один язык – много разных платформ.
Adobe Alchemy: C++ во флеш
HaXe – на Flash, JavaScript, PHP,С#, C++
Marmalade – IoC, Android, Symbean, Bada
Corona 2D - IoC, Android
Мультиплатформенные системы



+                                 -
                                  Отсутствует поддержка нативных
Кодим один раз - работает везде
                                    возможностей
                                  Под разные платформы – разные
                                    библиотеки
                                  Не упрощают разработку
                                    собственно логики
Кросплатформенные системы


Код в байткод – байткод – в интерпретатор.
Иногда интерпретатор встраивается в инсталляцию
Adobe Air, Unity3D
Java – почти
Кросплатформенные системы


+                           -
Пишем один раз, работает    Большой объем файла
  везде                       инсталляции
Действительно везде         Усложнена поддержка
Сообщество                    нативных возможностей
Документация                Собственно логику
Инструментальные средства     разрабатывать ничем не
                              легче
Игровые фреймворки


Набор библиотек и утилит облегчающих разработку игр
Предустановленные события: столкновения, поддержка клавиш,
  поиск пути, система частиц
Поиск пути
И многое другое
Daiquiri, Flixel, Pixelblitz, PushButton Engine,Bold Pixel Engine v1
Игровые фреймворки


Действительно упрощает   Для сложных игр
  разработку игр           возможностей недостаточно
Большой выбор            Глюкавые
Бесплатные               Дизайнерам не понятны
                         Логика размазана по коду
Языки общего назначение с динамической типизацией


Lua, Python, JavaScript, Sсheme
На них пишутся скрипты
Скрипты интерпретируются
Интерпретатор встроен в игру
Скрипты декларативные – вызывают методы базового языка
Языки общего назначение с динамической типизацией



+                               -
                                Спагетти – код
Простые                         Медленный флеш плеер на мобилке +
Есть реализация под все           медленный интерпретатор –
  платформы                       ахтунг!!!




Подходят в качестве скриптов верхнего уровня: верстка GUI,
  графика и т.п.
Языки специального назначения с динамической
типизацией


Функциональные
Логические
Scheme, Common Lisp, ProLog, Scala, Erlang
Создаем Domain Specific Language
Пишем скрипт в декларативном стиле
Скрипт выполняется интерпретатором
Языки специального назначения с динамической
типизацией


+                                   -
Лаконичный синтаксис                Нет средств для большинства
Быстрее, чем ЯП общего назначения     казуальных платформ
Заточенность под искуственный       Сложны для изучения
   интеллект
DSL простые – понятны дизайнеру



              Подходит для очень опытной команды
Автоматное программирование


Игровым агентом управляет конечный автомат
Операции производятся на: входе в состояние, выходе из
  состояния, переходе из состояния A в B, переходе из состояния
  в себя – же
Для задания автомата применяется декларативный язык
Скрипт трансформируется в структуру данных на базовом языке
Чтение скрипта происходит один раз
Конечный автомат представляется в виде ориентированного
  графа
Автоматное программирование


Преимущества
Быстро работает
Ориентированный граф – стрелочная схема – понятен дизайнерам
Разработанная, богатая теория
Программисты изучают в институте
Автоматное программирование


Понятен дизайнерам!!!
Автоматное программирование


Что есть сейчас?

Множество средств
Визуализация, моделирование, применение
Не подходят :(

Почему?

Нет инструмента единого для всех языков
Обеспечивают возможности не нужные для игр
Сложны в изучении
Не поддерживаются
ASML


ASML – Abstract State Machine Language
http://research.microsoft.com/en-us/projects/asml/
Разработан компанией Microsoft
Функциональный
Декларативный – вызывает методы императивных языков
Основное предназначение – создание исполняемых
   спецификаций

Минусы
Есть только для платформы .NET
Нужно изучать
Не заточен под игры

Вывод: хорош, но не для игр
UniMod


http://unimod.sourceforge.net/
Разработка Шалыто А.А
Плагин под Eclipse
Визуальный редактор графа состояний
Входные файлы в формате XML
На выходе Jar – файлы
Или компиляция под Symbea

Минусы:
Не поддерживается
Только Java и Symbean
Неоправданно сложный для игр
Нет документации
Резюме


Существующие на рынке средства не в полной мере
  удовлетворяют потребностям
Или для одной платформы
Или неудобные
Или медленные
Или недокументированные
Что предлагаю я
 Автоматное программирование
 DSL на базе XML
 XML читается один раз
 Транслируется в структуру данных на базовом ЯП
 Структура данных – свойство агента
 Можно менять структуру данных в процессе игры
 Другое свойство – состояние
 Управляющие воздействия при входе в состояние, выходе из
   него, переходе из одного состояния в другое и если состояние
   не меняется
 Язык декларативный, при изменении состояний вызываются
   функции базового я.п.
 На каждый тик проходим массив обьектов меняем состояния,
   если потребуется и выполняем управляющие воздействия
Что предлагаю я


Преимущества подхода
Работает быстрее, чем интерпретатор
Парсинг XML легко перенести на любой язык
DSL – простой, понятен для дизайнера
Можно сделать графический редактор
Код опенсорсный – меняйте как хотите
Что уже сделано

Язык на базе 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>
Что уже сделано?
Написан код для flash
https://github.com/vladimirkozhaev/casualintellect

Что в ближайшей перспективе

 Создание текстового DSL языка - xml не удобен для
   программирования
 Портирование на JavaScript
 Портирование на Android
 Создание графического редактора на базе визуального языка
   ДРАКОН(Дружелюбный Русский Алгоритмический язык
   Который обеспечивает наглядность)
Вопросы, предложения, критика?


Email:vkozhaev@gmail.com
Пишите - буду рад

Contenu connexe

Tendances

Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Sergey Polazhenko
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...SBTech
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2SBTech
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Fwdays
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPOleg Poludnenko
 
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»Sigma Software
 
Ликбез для HR'ов в IT
Ликбез для HR'ов в ITЛикбез для HR'ов в IT
Ликбез для HR'ов в ITAlexander Krass
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonPyNSK
 
Behat bdd для php
Behat  bdd для phpBehat  bdd для php
Behat bdd для phpAleksei Popov
 
Тестирование Локализации и Интернализации
Тестирование Локализации и ИнтернализацииТестирование Локализации и Интернализации
Тестирование Локализации и ИнтернализацииLilia Gorbachik
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.IT-Доминанта
 
Локализация программных продуктов и тестирование локализации
Локализация программных продуктов и тестирование локализацииЛокализация программных продуктов и тестирование локализации
Локализация программных продуктов и тестирование локализацииSQALab
 
Опросный лист оценки знаний по соревновательной робототехнике
Опросный лист оценки знаний по соревновательной робототехникеОпросный лист оценки знаний по соревновательной робототехнике
Опросный лист оценки знаний по соревновательной робототехникеAlexander Kolotov
 
Domain-Specific Languages
Domain-Specific LanguagesDomain-Specific Languages
Domain-Specific LanguagesPavel Maltsev
 
использование Ci на практике
использование Ci на практикеиспользование Ci на практике
использование Ci на практикеCapitanBLood
 
Локализационное тестирование носителями языков
Локализационное тестирование носителями языковЛокализационное тестирование носителями языков
Локализационное тестирование носителями языковSQALab
 

Tendances (20)

Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2
 
378 васильев куницын
378 васильев куницын378 васильев куницын
378 васильев куницын
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"
 
Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
Володимир Дем’яненко, «How to become a Test Automation Engineer. My way»
 
Ликбез для HR'ов в IT
Ликбез для HR'ов в ITЛикбез для HR'ов в IT
Ликбез для HR'ов в IT
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Behat bdd для php
Behat  bdd для phpBehat  bdd для php
Behat bdd для php
 
Тестирование Локализации и Интернализации
Тестирование Локализации и ИнтернализацииТестирование Локализации и Интернализации
Тестирование Локализации и Интернализации
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
 
Локализация программных продуктов и тестирование локализации
Локализация программных продуктов и тестирование локализацииЛокализация программных продуктов и тестирование локализации
Локализация программных продуктов и тестирование локализации
 
Опросный лист оценки знаний по соревновательной робототехнике
Опросный лист оценки знаний по соревновательной робототехникеОпросный лист оценки знаний по соревновательной робототехнике
Опросный лист оценки знаний по соревновательной робототехнике
 
Domain-Specific Languages
Domain-Specific LanguagesDomain-Specific Languages
Domain-Specific Languages
 
использование Ci на практике
использование Ci на практикеиспользование Ci на практике
использование Ci на практике
 
OO Design with C++: 0. Intro
OO Design with C++: 0. IntroOO Design with C++: 0. Intro
OO Design with C++: 0. Intro
 
Drakon
DrakonDrakon
Drakon
 
Локализационное тестирование носителями языков
Локализационное тестирование носителями языковЛокализационное тестирование носителями языков
Локализационное тестирование носителями языков
 

En vedette

Язык ДРАКОН: вводный курс, часть 2
Язык ДРАКОН: вводный курс, часть 2Язык ДРАКОН: вводный курс, часть 2
Язык ДРАКОН: вводный курс, часть 2Stepan Mitkin
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним боротьсяВладимир Кожаев
 
DRAKON Visual Language: Tutorial. Part 2
DRAKON Visual Language: Tutorial. Part 2DRAKON Visual Language: Tutorial. Part 2
DRAKON Visual Language: Tutorial. Part 2Stepan Mitkin
 
DRAKON Visual Language: Tutorial. Part 1
DRAKON Visual Language: Tutorial. Part 1DRAKON Visual Language: Tutorial. Part 1
DRAKON Visual Language: Tutorial. Part 1Stepan Mitkin
 
Язык ДРАКОН: вводный курс, часть 1
Язык ДРАКОН: вводный курс, часть 1Язык ДРАКОН: вводный курс, часть 1
Язык ДРАКОН: вводный курс, часть 1Stepan Mitkin
 
DRAKON Visual Language: Tutorial. Part 3
DRAKON Visual Language: Tutorial. Part 3DRAKON Visual Language: Tutorial. Part 3
DRAKON Visual Language: Tutorial. Part 3Stepan Mitkin
 
WMCA Thrive Full Report
WMCA Thrive Full ReportWMCA Thrive Full Report
WMCA Thrive Full ReportSteve Appleton
 
Sperry Van Ness #CRE National Sales Meeting 8-4-14
Sperry Van Ness #CRE National Sales Meeting 8-4-14Sperry Van Ness #CRE National Sales Meeting 8-4-14
Sperry Van Ness #CRE National Sales Meeting 8-4-14SVN International Corp.
 
Servicio al cliente ingreth (1)
Servicio al cliente ingreth (1)Servicio al cliente ingreth (1)
Servicio al cliente ingreth (1)Luisa Sanabria
 
Guapi. información del micrositio copia
Guapi. información del micrositio   copiaGuapi. información del micrositio   copia
Guapi. información del micrositio copiamarimba de chonta
 
Managing Coaches And Players
Managing Coaches And PlayersManaging Coaches And Players
Managing Coaches And PlayersKen Runquist
 
Презентація:Матеріали до уроків
Презентація:Матеріали до уроківПрезентація:Матеріали до уроків
Презентація:Матеріали до уроківsveta7940
 

En vedette (20)

Язык ДРАКОН: вводный курс, часть 2
Язык ДРАКОН: вводный курс, часть 2Язык ДРАКОН: вводный курс, часть 2
Язык ДРАКОН: вводный курс, часть 2
 
Drakon Visual Algorithms
Drakon Visual AlgorithmsDrakon Visual Algorithms
Drakon Visual Algorithms
 
ANTLR4 in depth
ANTLR4 in depthANTLR4 in depth
ANTLR4 in depth
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
 
DRAKON Visual Language: Tutorial. Part 2
DRAKON Visual Language: Tutorial. Part 2DRAKON Visual Language: Tutorial. Part 2
DRAKON Visual Language: Tutorial. Part 2
 
DRAKON Visual Language: Tutorial. Part 1
DRAKON Visual Language: Tutorial. Part 1DRAKON Visual Language: Tutorial. Part 1
DRAKON Visual Language: Tutorial. Part 1
 
Язык ДРАКОН: вводный курс, часть 1
Язык ДРАКОН: вводный курс, часть 1Язык ДРАКОН: вводный курс, часть 1
Язык ДРАКОН: вводный курс, часть 1
 
DRAKON Visual Language: Tutorial. Part 3
DRAKON Visual Language: Tutorial. Part 3DRAKON Visual Language: Tutorial. Part 3
DRAKON Visual Language: Tutorial. Part 3
 
WMCA Thrive Full Report
WMCA Thrive Full ReportWMCA Thrive Full Report
WMCA Thrive Full Report
 
Sperry Van Ness #CRE National Sales Meeting 8-4-14
Sperry Van Ness #CRE National Sales Meeting 8-4-14Sperry Van Ness #CRE National Sales Meeting 8-4-14
Sperry Van Ness #CRE National Sales Meeting 8-4-14
 
Cuál es mi idea
Cuál es mi ideaCuál es mi idea
Cuál es mi idea
 
Estatuto del representante legal
Estatuto del representante legalEstatuto del representante legal
Estatuto del representante legal
 
Servicio al cliente ingreth (1)
Servicio al cliente ingreth (1)Servicio al cliente ingreth (1)
Servicio al cliente ingreth (1)
 
15 16
15 16 15 16
15 16
 
Kim's portfolio
Kim's portfolioKim's portfolio
Kim's portfolio
 
Guapi. información del micrositio copia
Guapi. información del micrositio   copiaGuapi. información del micrositio   copia
Guapi. información del micrositio copia
 
Stalyn 2
Stalyn 2Stalyn 2
Stalyn 2
 
Wearables en la comunicación
Wearables en la comunicaciónWearables en la comunicación
Wearables en la comunicación
 
Managing Coaches And Players
Managing Coaches And PlayersManaging Coaches And Players
Managing Coaches And Players
 
Презентація:Матеріали до уроків
Презентація:Матеріали до уроківПрезентація:Матеріали до уроків
Презентація:Матеріали до уроків
 

Similaire à игровая логика, проблемы и решения

Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программистru_Parallels
 
Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?Alconost
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Scripting languages
Scripting languagesScripting languages
Scripting languagesLev Panov
 
Как делать глобальный проект
Как делать глобальный проектКак делать глобальный проект
Как делать глобальный проектisdeforum
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...IT Share
 
инструменты веб разработчика
инструменты веб разработчикаинструменты веб разработчика
инструменты веб разработчикаSoftline
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 
Экономика проекта с точки зрения IT
Экономика проекта с точки зрения ITЭкономика проекта с точки зрения IT
Экономика проекта с точки зрения IToleg.bunin
 
Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalkamala_afandiyeva_zahs
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesWhite Nights Conference
 
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”HYS Enterprise
 
Orxan9r2 klassifikasiya programmnoqo_obespeceniya
Orxan9r2 klassifikasiya programmnoqo_obespeceniyaOrxan9r2 klassifikasiya programmnoqo_obespeceniya
Orxan9r2 klassifikasiya programmnoqo_obespeceniyaorxan9r2
 
Os
OsOs
OsIKTO
 
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniyaaysel9r2
 

Similaire à игровая логика, проблемы и решения (20)

Что должен уметь Linux программист
Что должен уметь Linux программистЧто должен уметь Linux программист
Что должен уметь Linux программист
 
Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?Локализация - как делать глобальный проект?
Локализация - как делать глобальный проект?
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Scripting languages
Scripting languagesScripting languages
Scripting languages
 
Как делать глобальный проект
Как делать глобальный проектКак делать глобальный проект
Как делать глобальный проект
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
 
инструменты веб разработчика
инструменты веб разработчикаинструменты веб разработчика
инструменты веб разработчика
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Экономика проекта с точки зрения IT
Экономика проекта с точки зрения ITЭкономика проекта с точки зрения IT
Экономика проекта с точки зрения IT
 
Генерация программы поведения игрового персонажа по естественно-языковой спец...
Генерация программы поведения игрового персонажа по естественно-языковой спец...Генерация программы поведения игрового персонажа по естественно-языковой спец...
Генерация программы поведения игрового персонажа по естественно-языковой спец...
 
Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascal
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
 
Sivko
SivkoSivko
Sivko
 
Progopedia - OSDN
Progopedia - OSDNProgopedia - OSDN
Progopedia - OSDN
 
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
 
Orxan9r2 klassifikasiya programmnoqo_obespeceniya
Orxan9r2 klassifikasiya programmnoqo_obespeceniyaOrxan9r2 klassifikasiya programmnoqo_obespeceniya
Orxan9r2 klassifikasiya programmnoqo_obespeceniya
 
Net framework
Net frameworkNet framework
Net framework
 
Os
OsOs
Os
 
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniyaQasimli aysel 9 r2  klassifikasiya proqrammnoqo obespeceniya
Qasimli aysel 9 r2 klassifikasiya proqrammnoqo obespeceniya
 

Plus de Владимир Кожаев (7)

JetBrains MPS
JetBrains MPSJetBrains MPS
JetBrains MPS
 
X text
X textX text
X text
 
Scrum
ScrumScrum
Scrum
 
флеш и сервер
флеш и серверфлеш и сервер
флеш и сервер
 
ньюансы разработки видео для мобильных устройств
ньюансы разработки видео для мобильных устройствньюансы разработки видео для мобильных устройств
ньюансы разработки видео для мобильных устройств
 
Vladimir kozhayev isometry handmade
Vladimir kozhayev   isometry handmadeVladimir kozhayev   isometry handmade
Vladimir kozhayev isometry handmade
 
Vladimir kozhayev isometry handmade
Vladimir kozhayev   isometry handmadeVladimir kozhayev   isometry handmade
Vladimir kozhayev isometry handmade
 

игровая логика, проблемы и решения

  • 1. Обзор технологий Игровая логика, проблемы и решения
  • 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, переходе из состояния в себя – же Для задания автомата применяется декларативный язык Скрипт трансформируется в структуру данных на базовом языке Чтение скрипта происходит один раз Конечный автомат представляется в виде ориентированного графа
  • 21. Автоматное программирование Преимущества Быстро работает Ориентированный граф – стрелочная схема – понятен дизайнерам Разработанная, богатая теория Программисты изучают в институте
  • 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 Создание графического редактора на базе визуального языка ДРАКОН(Дружелюбный Русский Алгоритмический язык Который обеспечивает наглядность)