SlideShare a Scribd company logo
1 of 47
Интерпретатор
Вельмаскин Н.А. (с)2013
или думаем над скриптовым движком для
Вашей игры
1
Вельмаскин Никита – Indie разработчик.
В gamedev’е с 1992 года. Самая первая игра
«Шахматы» для ZX Spectrum.
Самый знаменитый стартап:
Pocket F.A.L.L.O.U.T. – порт игры Fallout2 на
мобильные платформу WinMobile/PocketPC.
О докладчике
www.pf-pda.net
PocketGame – это «движок» со всем необходимым
инструментарием для быстрой разработки
кроссплатформенных 2D-игр.
Инженерные решения PocketGame:
•Кроссплатформенность
•Масштабируемость
•Оптимизация под слабые
устройства
•Собственный язык
программирования
•Быстрая локализация
Что же такое
«Интерпретатор» ?
3
Из Википедии:
Это приложение или аппаратное средство,
выполняющее покомандный или построчный
анализ, обработку и мгновенное выполнение
команды исходной программы или запроса.
Интерпретатор
4
Простой интерпретатор - анализирует и тут же
выполняет программу покомандно (или построчно), по
мере поступления её исходного кода на вход
интерпретатора.
Достоинства:
•Мгновенная реакция на поступившую команду
Недостатки:
•Такой тип интерпретатора обнаруживает ошибки в
тексте программы только при попытке выполнения
команды (или строки) с ошибкой.
Разновидности
Такой интерпретатор хорош для мобильных
платформ, на стороне клиента
5
Интерпретатор компилирующего типа — это система,
состоящая из компилятора, переводящего исходный код
программы в промежуточное представление (в байт-код), и
собственно интерпретатора, который выполняет
полученный промежуточный код (так называемая
виртуальная машина).
Достоинства:
•большее быстродействие выполнения программ
•гибкость в разработке задач.
Недостатки:
•большее требование к ресурсам и требование на
корректность исходного кода.
Такой интерпретатор хорош для использования
на сервере
6
Разновидности
Где можно
успешно
использовать
интерпретатор?
7
Везде, где только можно и где нельзя –
ограничивается только Вашей фантазией.
Игры
• RPG/MMORPG
• RTS / Turn-Based Strategy, TBS
• Аркады со множеством объектов, взаимодействующих
с игроком
• Шутеры (интеллект ботов)
СУБД (исполнение запросов, выполнение процедур и
функций на сервере БД)
Бизнес-приложения (расчет рисков, бухгалтерия)
8
Достоинства и
недостатки
1. Кроссплатформенность — программа будет работать на
любой платформе, на которой есть соответствующий
интерпретатор.
2. Ускоренный процесс исправления ошибок и обновления
логики всего приложения
3. Гибкость - можно распоряжаться возможностями языка
программирования и самой платформы интерпретатора
4. Коммерческая составляющая – можно заработать денег,
при наличии хороших бизнес-идей использования
платформы и интерпретируемого языка
Достоинства
10
Недостатки
1. Интерпретируемая программа не может выполняться
отдельно без программы-интерпретатора.
Сам интерпретатор при этом может быть очень
«тяжелым».
2. Интерпретируемая программа выполняется медленнее (в
5-10 раз по сравнению с обычным приложением)
3. Практически отсутствует оптимизация кода, что
приводит к дополнительным потерям в скорости работы
4. При неумелой организации структуры файлов игры,
появляется «бэкдор» для нечестных игроков (читерство)
11
Популярные платформы
и языки
12
LUA
Lua (порт. «луна») — интерпретируемый язык
программирования, разработанный подразделением Tecgraf
Католического университета Рио-де-Жанейро. Разработанный
интерпретатор является свободно распространяемым, с
открытыми исходными текстами на языке Си.
www.lua.org
Хорош для мобильных платформ, ввиду своей интеграции с
C/C++, легкости, скорости и гибкости движка
Пример кода:
13
Интерактивчик
Где есть LUA www.lua.org
15
Phyton www.python.org
Python (англ. python — питон) — высокоуровневый язык
программирования общего назначения с открытым кодом
C++. Лицензия бесплатная.
Пример кода:
Хорош для серверных платформ, из-за «прожорливости» и
размера интерпретатора
16
Где есть Phyton www.python.org
Интерактивчика не будет ;)
UnrealScript
UnrealScript – кроссплатформенный, высокоуровневый,
объектно-ориентированный язык программирования,
часть движка Unreal Engine.
Права на использование принадлежат Epic Games.
Лицензия бесплатная и коммерческая.
www.unrealengine.com
Документация на русском:
http://www.gamedev.ru/community/udk/articles/UnrealScriptReference
Пример кода:
Графика у движка Unreal просто потрясающая, даже на
мобильных устройствах!
17
Интерактивчик
UnrealScript www.unrealengine.com
18
JavaScript
Встроен уже в любое современное устройство, где есть
интернет-браузер. А в сочетании с HTML5 –
неограниченные возможности для создания игр и
приложений.
Пример кода:
19
Брать чужой или
делать свой ?
…To be, or not to be: that is the
question…
20
Чужой: плюсы
1. Уже все готово и отлажено. Количество «багов» сведено к
минимуму
2. Есть готовая документация
3. Есть готовые инструменты работы (IDE, отладчики,
профилировщики)
4. В большинстве случаев можно найти уже готового спеца по
языку программирования
5. А если уж очень-очень постараться, то можно найти спеца и
по ядру интерпретатора
21
Чужой: минусы
1. Сложность интеграции с уже готовым проектом.
Решение об использовании того или иного
интерпретатора необходимо принять еще ДО начала
разработки.
2. Если исходные языки программирования у проекта и
интерпретатора различны, то необходимо
разрабатывать «мост» между двумя системами
(Java -> C++)
3. Необходимо вникать в особенности «движка» для его
расширения/плотной интеграции с приложением.
4. Могут возникнуть проблемы с правообладателем.
Неприемлемо для стартапов.
22
Свой: плюсы
1. Очень плотная интеграция интерпретатора с ядром
приложения => большая скорость работы
2. Безграничные возможности для оптимизации и
расширения скриптового движка
3. Очень интересен сам процесс создания.
4. Нет нарушения авторских прав и, следовательно, не
надо никому платить за лицензию
23
Свой: минусы
1. Необходимо затратить уйму времени, денег и сил
на разработку и отладку самого скриптового
движка, синтаксиса языка программирования,
документации к нему.
2. Специалистов по движку и языку программирования
необходимо взращивать внутри коллектива.
Снаружи – их нет 
24
Как работает
интерпретатор
….О сколько нам открытий чудных
Готовят просвещенья дух
И опыт, сын ошибок трудных,
И гений, парадоксов друг,
И случай, бог изобретатель…
25
Компоненты
• Таблица идентификаторов содержит список всех
названий переменных, используемых в программе.
• Лексический анализатор (Lexer). Преобразует
последовательность символов (из файла-
источника) в последовательность лексем
• Синтаксический анализатор (Parser). Берет
последовательность лексем и строит по ним
синтаксическое дерево. 26
Синтаксическое дерево
27
Это древовидная структура представления программы.
Именно это дерево и «исполняется» при запуске
интерпретируемого кода.
• Блок семантического контроля (Semantic Checker).
Не обязателен. Проверяет синтаксическое дерево на
наличие ошибок.
• Генератор промежуточного кода (Intermediate Code
Generator). Преобразует синтаксическое дерево в
промежуточный код.
• Оптимизатор (Optimizer). Не обязателен. Оптимизирует
промежуточный код.
28
• Генератор байт-кода (Bytecode Generator).
Не обязателен. Создает байт-код по промежуточному
коду.
• Виртуальная машина, выполняющая этот байт-код.
• Стек вызовов – хранит ссылки на текущие запущенные
блоки кода (процедуры/функции), а так же точки
возврата.
29
А если почитать?
http://www.gamedev.ru/articles/?id=70104
Хорошая статья:
Компиляторы: принципы, технологии
и инструменты
Ахо А.В., Сети Р., Ульман Д.Д.
30
Свой
интерпретатор
31
Совет из опыта
За основу лучше взять уже готовый
интерпретатор языка Basic, где уже есть
линейные ветвления и циклы с условием.
32
И вокруг него собрать свое
синтаксическое ядро языка и
механизмы интерпретатора.
Прежде чем резать…
1. Наилучший язык разработки – C/С++
2. Надо хорошо изучить среду, где будет исполняться
интерпретируемый код. Узнать все сильные и
слабые стороны платформы и ОС
1. Разработать синтаксис языка и его конструкции,
которые удовлетворяли бы требованиям решаемых
задач и был понятен человеку при чтении кода
2. Максимально интегрировать ядро
интерпретатора в ядро приложения
3. И только после этого разработать анализатор
лексем и парсер
33
Lexer и Parser
Для C/С++ есть замечательный OpenSource инструмент - Bison.
Для других языков программирования см. статью:
http://ru.wikipedia.org/wiki/Синтаксический_анализ
34
Конструкции будущего
языка описываются
самим разработчиком в
специальном формате
bison.
www.gnu.org/s/bison
Ясность синтаксиса
35
Оптимизация
36
Что бы зря не
оптимизировать
• Знайте архитектурные особенности работы
интерпретатора
• Определитесь с платформой, где будет
исполняться интерпретируемый код и
знайте ее особенности
• Делайте код программы проще
37
Интерактивчик
Почему это
неоптимизированный
код?
40
«Враги интерпретатора»
1. Циклы (особенно вложенные)
2. Массивы (особенно многомерные)
3. Глобальные переменные
4. Рекурсия
5. Огромные файлы исходного кода
41
Борьба с
«врагами интерпретаторов»
1. НЕ объявляйте переменные в теле цикла, это
существенно замедляет его
2. Обход двумерного массива – сначала у, потом x
3. Большие файлы, по возможности, дробите на мелкие и
подгружайте в память по мере надобности
4. Используйте системные коллекции (на стороне ядра
приложения) для хранения и поиска данных, а не массивы
интерпретатора
5. Знайте особенности работы интерпретатора
42
И на посошок!
1. Время от времени переносите уже
«устаканившейся» интерпретируемый код в
ядро приложения
2. Для анализа быстродействия используйте
профилировщики
3. Не забывайте об утечках памяти – проверяйте
инструментами анализа утечек каждый модуль
43
А если почитать?
Совершенный код. Второе
издание
Автор: С.Макконнелл
44
 +375 29 628 81 83 Никита
URL demo-версии движка PocketGame:
http://maskin-soft.ru/pocketgame
Вах, какой доклад!
https://facebook.com/velmaskin

More Related Content

What's hot

Техподдержка и внутренняя разработка
Техподдержка и внутренняя разработкаТехподдержка и внутренняя разработка
Техподдержка и внутренняя разработкаSam Faktorovich
 
Памятка о php-шниках
Памятка о php-шникахПамятка о php-шниках
Памятка о php-шникахKaterina Starostina
 
Anton Bolshakov - Joint anti-crime. Open source security
Anton Bolshakov - Joint anti-crime. Open source securityAnton Bolshakov - Joint anti-crime. Open source security
Anton Bolshakov - Joint anti-crime. Open source securityDefconRussia
 
Контроль за качеством кода
Контроль за качеством кодаКонтроль за качеством кода
Контроль за качеством кодаКирилл Борисов
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Andrey Karpov
 
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...CodeFest
 
Эмин Р. "Языки Программирования"
Эмин Р. "Языки Программирования"Эмин Р. "Языки Программирования"
Эмин Р. "Языки Программирования"Emin Rahmanov
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеTatyanazaxarova
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, ЯндексYandex
 
How to port JavaScript library to Android and iOS
How to port JavaScript library to Android and iOSHow to port JavaScript library to Android and iOS
How to port JavaScript library to Android and iOSAlexey Zinoviev
 

What's hot (17)

Техподдержка и внутренняя разработка
Техподдержка и внутренняя разработкаТехподдержка и внутренняя разработка
Техподдержка и внутренняя разработка
 
Памятка о php-шниках
Памятка о php-шникахПамятка о php-шниках
Памятка о php-шниках
 
0. hello java world
0. hello java world0. hello java world
0. hello java world
 
Anton Bolshakov - Joint anti-crime. Open source security
Anton Bolshakov - Joint anti-crime. Open source securityAnton Bolshakov - Joint anti-crime. Open source security
Anton Bolshakov - Joint anti-crime. Open source security
 
Контроль за качеством кода
Контроль за качеством кодаКонтроль за качеством кода
Контроль за качеством кода
 
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++Реклама PVS-Studio - статический анализ кода на языке Си и Си++
Реклама PVS-Studio - статический анализ кода на языке Си и Си++
 
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений ...
 
Lesson 01
Lesson 01Lesson 01
Lesson 01
 
Эмин Р. "Языки Программирования"
Эмин Р. "Языки Программирования"Эмин Р. "Языки Программирования"
Эмин Р. "Языки Программирования"
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Регулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработкеРегулярное использование статического анализа кода в командной разработке
Регулярное использование статического анализа кода в командной разработке
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
лекция 3
лекция 3лекция 3
лекция 3
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстовСмолина Пользовательские интерфейсы систем лингвистической разметки текстов
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
 
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
"Разработка документации на программные интерфейсы". Светлана Каюшина, Яндекс
 
How to port JavaScript library to Android and iOS
How to port JavaScript library to Android and iOSHow to port JavaScript library to Android and iOS
How to port JavaScript library to Android and iOS
 

Similar to Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Вашей игры

игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решенияВладимир Кожаев
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программированияnhfkzkz
 
Фортран.pdf
Фортран.pdfФортран.pdf
Фортран.pdfssuserf546a8
 
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
 
Qasimli Aysel 9r2
Qasimli Aysel 9r2  Qasimli Aysel 9r2
Qasimli Aysel 9r2 aysel9r2
 
Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. AlgorithmIhor Porotikov
 
Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalkamala_afandiyeva_zahs
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Nikita Baksalyar
 
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
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
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
 
Введение в профессию исследователя приложений без исходных кодов
Введение в профессию исследователя приложений без исходных кодовВведение в профессию исследователя приложений без исходных кодов
Введение в профессию исследователя приложений без исходных кодовDI GR
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеDenis Chistyakov
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRoman Dvornov
 

Similar to Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Вашей игры (20)

игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
 
презентация языки программирования
презентация языки программированияпрезентация языки программирования
презентация языки программирования
 
Фортран.pdf
Фортран.pdfФортран.pdf
Фортран.pdf
 
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
 
Qasimli Aysel 9r2
Qasimli Aysel 9r2  Qasimli Aysel 9r2
Qasimli Aysel 9r2
 
Programming history. Algorithm
Programming history. AlgorithmProgramming history. Algorithm
Programming history. Algorithm
 
Afandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascalAfandiyeva kamala yazik programmirovaniya pascal
Afandiyeva kamala yazik programmirovaniya pascal
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
378 васильев куницын
378 васильев куницын378 васильев куницын
378 васильев куницын
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
106
106106
106
 
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
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
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 ...
 
Введение в профессию исследователя приложений без исходных кодов
Введение в профессию исследователя приложений без исходных кодовВведение в профессию исследователя приложений без исходных кодов
Введение в профессию исследователя приложений без исходных кодов
 
Lekcia3
Lekcia3Lekcia3
Lekcia3
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
спо
споспо
спо
 
Rempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментовRempl – крутая платформа для крутых инструментов
Rempl – крутая платформа для крутых инструментов
 
лекция 17
лекция 17лекция 17
лекция 17
 

More from IT Share

Cоветs по оптимизации игр, Александр Дежурко
Cоветs по оптимизации игр, Александр ДежуркоCоветs по оптимизации игр, Александр Дежурко
Cоветs по оптимизации игр, Александр ДежуркоIT Share
 
Citrus Game Engine, Юрий Шумовский
Citrus Game Engine, Юрий ШумовскийCitrus Game Engine, Юрий Шумовский
Citrus Game Engine, Юрий ШумовскийIT Share
 
Pooling is magic, Максим Клыга
Pooling is magic, Максим КлыгаPooling is magic, Максим Клыга
Pooling is magic, Максим КлыгаIT Share
 
Святослав Панкратов - Оптимизация арта для браузерных проектов на юнити
Святослав Панкратов - Оптимизация арта для браузерных проектов на юнитиСвятослав Панкратов - Оптимизация арта для браузерных проектов на юнити
Святослав Панкратов - Оптимизация арта для браузерных проектов на юнитиIT Share
 
Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...
Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...
Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...IT Share
 
Александр Яцукевич - Визуальные эффекты в гейм-дизайне
Александр Яцукевич - Визуальные эффекты в гейм-дизайнеАлександр Яцукевич - Визуальные эффекты в гейм-дизайне
Александр Яцукевич - Визуальные эффекты в гейм-дизайнеIT Share
 
Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...
Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...
Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...IT Share
 
Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...
Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...
Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...IT Share
 
Роман Белешев - Online backup: технологии хранения больших объемов данных
Роман Белешев - Online backup: технологии хранения больших объемов данных Роман Белешев - Online backup: технологии хранения больших объемов данных
Роман Белешев - Online backup: технологии хранения больших объемов данных IT Share
 
Кирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеКирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеIT Share
 
Максим Мельников - Wargaming Web
Максим Мельников - Wargaming WebМаксим Мельников - Wargaming Web
Максим Мельников - Wargaming WebIT Share
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.IT Share
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
«От CMS к Highload: работа с backend» Алексей Сазанов, Александр Каскевич
«От CMS к Highload: работа с backend» Алексей Сазанов, Александр Каскевич«От CMS к Highload: работа с backend» Алексей Сазанов, Александр Каскевич
«От CMS к Highload: работа с backend» Алексей Сазанов, Александр КаскевичIT Share
 

More from IT Share (14)

Cоветs по оптимизации игр, Александр Дежурко
Cоветs по оптимизации игр, Александр ДежуркоCоветs по оптимизации игр, Александр Дежурко
Cоветs по оптимизации игр, Александр Дежурко
 
Citrus Game Engine, Юрий Шумовский
Citrus Game Engine, Юрий ШумовскийCitrus Game Engine, Юрий Шумовский
Citrus Game Engine, Юрий Шумовский
 
Pooling is magic, Максим Клыга
Pooling is magic, Максим КлыгаPooling is magic, Максим Клыга
Pooling is magic, Максим Клыга
 
Святослав Панкратов - Оптимизация арта для браузерных проектов на юнити
Святослав Панкратов - Оптимизация арта для браузерных проектов на юнитиСвятослав Панкратов - Оптимизация арта для браузерных проектов на юнити
Святослав Панкратов - Оптимизация арта для браузерных проектов на юнити
 
Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...
Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...
Иван Воронов - Пара вещей, которые упростили бы мою гейм-дизайнерскую жизнь, ...
 
Александр Яцукевич - Визуальные эффекты в гейм-дизайне
Александр Яцукевич - Визуальные эффекты в гейм-дизайнеАлександр Яцукевич - Визуальные эффекты в гейм-дизайне
Александр Яцукевич - Визуальные эффекты в гейм-дизайне
 
Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...
Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...
Клевакичев и Кравченко - Игровой баланс, методы его поиска и последующее тира...
 
Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...
Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...
Сергей Сверчков - Оцениваем решения NoSQL: какая база данных подходит для ваш...
 
Роман Белешев - Online backup: технологии хранения больших объемов данных
Роман Белешев - Online backup: технологии хранения больших объемов данных Роман Белешев - Online backup: технологии хранения больших объемов данных
Роман Белешев - Online backup: технологии хранения больших объемов данных
 
Кирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеКирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практике
 
Максим Мельников - Wargaming Web
Максим Мельников - Wargaming WebМаксим Мельников - Wargaming Web
Максим Мельников - Wargaming Web
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
«От CMS к Highload: работа с backend» Алексей Сазанов, Александр Каскевич
«От CMS к Highload: работа с backend» Алексей Сазанов, Александр Каскевич«От CMS к Highload: работа с backend» Алексей Сазанов, Александр Каскевич
«От CMS к Highload: работа с backend» Алексей Сазанов, Александр Каскевич
 

Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Вашей игры

  • 1. Интерпретатор Вельмаскин Н.А. (с)2013 или думаем над скриптовым движком для Вашей игры
  • 2. 1 Вельмаскин Никита – Indie разработчик. В gamedev’е с 1992 года. Самая первая игра «Шахматы» для ZX Spectrum. Самый знаменитый стартап: Pocket F.A.L.L.O.U.T. – порт игры Fallout2 на мобильные платформу WinMobile/PocketPC. О докладчике www.pf-pda.net
  • 3. PocketGame – это «движок» со всем необходимым инструментарием для быстрой разработки кроссплатформенных 2D-игр. Инженерные решения PocketGame: •Кроссплатформенность •Масштабируемость •Оптимизация под слабые устройства •Собственный язык программирования •Быстрая локализация
  • 5. Из Википедии: Это приложение или аппаратное средство, выполняющее покомандный или построчный анализ, обработку и мгновенное выполнение команды исходной программы или запроса. Интерпретатор 4
  • 6. Простой интерпретатор - анализирует и тут же выполняет программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Достоинства: •Мгновенная реакция на поступившую команду Недостатки: •Такой тип интерпретатора обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой. Разновидности Такой интерпретатор хорош для мобильных платформ, на стороне клиента 5
  • 7. Интерпретатор компилирующего типа — это система, состоящая из компилятора, переводящего исходный код программы в промежуточное представление (в байт-код), и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинства: •большее быстродействие выполнения программ •гибкость в разработке задач. Недостатки: •большее требование к ресурсам и требование на корректность исходного кода. Такой интерпретатор хорош для использования на сервере 6 Разновидности
  • 9. Везде, где только можно и где нельзя – ограничивается только Вашей фантазией. Игры • RPG/MMORPG • RTS / Turn-Based Strategy, TBS • Аркады со множеством объектов, взаимодействующих с игроком • Шутеры (интеллект ботов) СУБД (исполнение запросов, выполнение процедур и функций на сервере БД) Бизнес-приложения (расчет рисков, бухгалтерия) 8
  • 11. 1. Кроссплатформенность — программа будет работать на любой платформе, на которой есть соответствующий интерпретатор. 2. Ускоренный процесс исправления ошибок и обновления логики всего приложения 3. Гибкость - можно распоряжаться возможностями языка программирования и самой платформы интерпретатора 4. Коммерческая составляющая – можно заработать денег, при наличии хороших бизнес-идей использования платформы и интерпретируемого языка Достоинства 10
  • 12. Недостатки 1. Интерпретируемая программа не может выполняться отдельно без программы-интерпретатора. Сам интерпретатор при этом может быть очень «тяжелым». 2. Интерпретируемая программа выполняется медленнее (в 5-10 раз по сравнению с обычным приложением) 3. Практически отсутствует оптимизация кода, что приводит к дополнительным потерям в скорости работы 4. При неумелой организации структуры файлов игры, появляется «бэкдор» для нечестных игроков (читерство) 11
  • 14. LUA Lua (порт. «луна») — интерпретируемый язык программирования, разработанный подразделением Tecgraf Католического университета Рио-де-Жанейро. Разработанный интерпретатор является свободно распространяемым, с открытыми исходными текстами на языке Си. www.lua.org Хорош для мобильных платформ, ввиду своей интеграции с C/C++, легкости, скорости и гибкости движка Пример кода: 13
  • 16. Где есть LUA www.lua.org 15
  • 17. Phyton www.python.org Python (англ. python — питон) — высокоуровневый язык программирования общего назначения с открытым кодом C++. Лицензия бесплатная. Пример кода: Хорош для серверных платформ, из-за «прожорливости» и размера интерпретатора 16
  • 18. Где есть Phyton www.python.org Интерактивчика не будет ;)
  • 19. UnrealScript UnrealScript – кроссплатформенный, высокоуровневый, объектно-ориентированный язык программирования, часть движка Unreal Engine. Права на использование принадлежат Epic Games. Лицензия бесплатная и коммерческая. www.unrealengine.com Документация на русском: http://www.gamedev.ru/community/udk/articles/UnrealScriptReference Пример кода: Графика у движка Unreal просто потрясающая, даже на мобильных устройствах! 17
  • 22. JavaScript Встроен уже в любое современное устройство, где есть интернет-браузер. А в сочетании с HTML5 – неограниченные возможности для создания игр и приложений. Пример кода: 19
  • 23. Брать чужой или делать свой ? …To be, or not to be: that is the question… 20
  • 24. Чужой: плюсы 1. Уже все готово и отлажено. Количество «багов» сведено к минимуму 2. Есть готовая документация 3. Есть готовые инструменты работы (IDE, отладчики, профилировщики) 4. В большинстве случаев можно найти уже готового спеца по языку программирования 5. А если уж очень-очень постараться, то можно найти спеца и по ядру интерпретатора 21
  • 25. Чужой: минусы 1. Сложность интеграции с уже готовым проектом. Решение об использовании того или иного интерпретатора необходимо принять еще ДО начала разработки. 2. Если исходные языки программирования у проекта и интерпретатора различны, то необходимо разрабатывать «мост» между двумя системами (Java -> C++) 3. Необходимо вникать в особенности «движка» для его расширения/плотной интеграции с приложением. 4. Могут возникнуть проблемы с правообладателем. Неприемлемо для стартапов. 22
  • 26. Свой: плюсы 1. Очень плотная интеграция интерпретатора с ядром приложения => большая скорость работы 2. Безграничные возможности для оптимизации и расширения скриптового движка 3. Очень интересен сам процесс создания. 4. Нет нарушения авторских прав и, следовательно, не надо никому платить за лицензию 23
  • 27. Свой: минусы 1. Необходимо затратить уйму времени, денег и сил на разработку и отладку самого скриптового движка, синтаксиса языка программирования, документации к нему. 2. Специалистов по движку и языку программирования необходимо взращивать внутри коллектива. Снаружи – их нет  24
  • 28. Как работает интерпретатор ….О сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель… 25
  • 29. Компоненты • Таблица идентификаторов содержит список всех названий переменных, используемых в программе. • Лексический анализатор (Lexer). Преобразует последовательность символов (из файла- источника) в последовательность лексем • Синтаксический анализатор (Parser). Берет последовательность лексем и строит по ним синтаксическое дерево. 26
  • 30. Синтаксическое дерево 27 Это древовидная структура представления программы. Именно это дерево и «исполняется» при запуске интерпретируемого кода.
  • 31. • Блок семантического контроля (Semantic Checker). Не обязателен. Проверяет синтаксическое дерево на наличие ошибок. • Генератор промежуточного кода (Intermediate Code Generator). Преобразует синтаксическое дерево в промежуточный код. • Оптимизатор (Optimizer). Не обязателен. Оптимизирует промежуточный код. 28
  • 32. • Генератор байт-кода (Bytecode Generator). Не обязателен. Создает байт-код по промежуточному коду. • Виртуальная машина, выполняющая этот байт-код. • Стек вызовов – хранит ссылки на текущие запущенные блоки кода (процедуры/функции), а так же точки возврата. 29
  • 33. А если почитать? http://www.gamedev.ru/articles/?id=70104 Хорошая статья: Компиляторы: принципы, технологии и инструменты Ахо А.В., Сети Р., Ульман Д.Д. 30
  • 35. Совет из опыта За основу лучше взять уже готовый интерпретатор языка Basic, где уже есть линейные ветвления и циклы с условием. 32 И вокруг него собрать свое синтаксическое ядро языка и механизмы интерпретатора.
  • 36. Прежде чем резать… 1. Наилучший язык разработки – C/С++ 2. Надо хорошо изучить среду, где будет исполняться интерпретируемый код. Узнать все сильные и слабые стороны платформы и ОС 1. Разработать синтаксис языка и его конструкции, которые удовлетворяли бы требованиям решаемых задач и был понятен человеку при чтении кода 2. Максимально интегрировать ядро интерпретатора в ядро приложения 3. И только после этого разработать анализатор лексем и парсер 33
  • 37. Lexer и Parser Для C/С++ есть замечательный OpenSource инструмент - Bison. Для других языков программирования см. статью: http://ru.wikipedia.org/wiki/Синтаксический_анализ 34 Конструкции будущего языка описываются самим разработчиком в специальном формате bison. www.gnu.org/s/bison
  • 40. Что бы зря не оптимизировать • Знайте архитектурные особенности работы интерпретатора • Определитесь с платформой, где будет исполняться интерпретируемый код и знайте ее особенности • Делайте код программы проще 37
  • 43. «Враги интерпретатора» 1. Циклы (особенно вложенные) 2. Массивы (особенно многомерные) 3. Глобальные переменные 4. Рекурсия 5. Огромные файлы исходного кода 41
  • 44. Борьба с «врагами интерпретаторов» 1. НЕ объявляйте переменные в теле цикла, это существенно замедляет его 2. Обход двумерного массива – сначала у, потом x 3. Большие файлы, по возможности, дробите на мелкие и подгружайте в память по мере надобности 4. Используйте системные коллекции (на стороне ядра приложения) для хранения и поиска данных, а не массивы интерпретатора 5. Знайте особенности работы интерпретатора 42
  • 45. И на посошок! 1. Время от времени переносите уже «устаканившейся» интерпретируемый код в ядро приложения 2. Для анализа быстродействия используйте профилировщики 3. Не забывайте об утечках памяти – проверяйте инструментами анализа утечек каждый модуль 43
  • 46. А если почитать? Совершенный код. Второе издание Автор: С.Макконнелл 44
  • 47.  +375 29 628 81 83 Никита URL demo-версии движка PocketGame: http://maskin-soft.ru/pocketgame Вах, какой доклад! https://facebook.com/velmaskin