Использование декларативного подхода для каркаса двумерных игр

Рассмотрено использование декларативного подхода в создании каркаса двумерных компьютерных игр. Обоснована необходимость применения нескольких языков программирования в рамках одного программного продукта. Предложен язык для задания таблицы переходов конечного автомата. Розглянуто використання декла...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:Компьютерная математика
Datum:2011
1. Verfasser: Кожаев, В.В.
Format: Artikel
Sprache:Russisch
Veröffentlicht: Інститут кібернетики ім. В.М. Глушкова НАН України 2011
Schlagworte:
Online Zugang:https://nasplib.isofts.kiev.ua/handle/123456789/84609
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
Назва журналу:Digital Library of Periodicals of National Academy of Sciences of Ukraine
Zitieren:Использование декларативного подхода для каркаса двумерных игр / В.В. Кожаев // Компьютерная математика: сб. науч. тр. — 2011. — № 1. — С. 79-85. — Бібліогр.: 7 назв. — рос.

Institution

Digital Library of Periodicals of National Academy of Sciences of Ukraine
_version_ 1859911569924685824
author Кожаев, В.В.
author_facet Кожаев, В.В.
citation_txt Использование декларативного подхода для каркаса двумерных игр / В.В. Кожаев // Компьютерная математика: сб. науч. тр. — 2011. — № 1. — С. 79-85. — Бібліогр.: 7 назв. — рос.
collection DSpace DC
container_title Компьютерная математика
description Рассмотрено использование декларативного подхода в создании каркаса двумерных компьютерных игр. Обоснована необходимость применения нескольких языков программирования в рамках одного программного продукта. Предложен язык для задания таблицы переходов конечного автомата. Розглянуто використання декларативного підходу у створенні каркасу двовимірних комп'ютерних ігор. Обґрунтована потреба застосування кількох мов програмування в рамках одного програмного продукту. Запропоновано мову подання таблиці переходів скінченного автомата. The use of a declarative approach to creating the framework of two-dimensional computer games is considered. The necessity to use multiple programming languages within a single software product is proved. A language to specify a transition table for a finite automaton is proposed.
first_indexed 2025-12-07T16:02:48Z
format Article
fulltext Компьютерная математика. 2011, № 1 79 Рассмотрено использование дек- ларативного подхода в создании каркаса двумерных компьютер- ных игр. Обоснована необходи- мость применения нескольких языков программирования в рам- ках одного программного продук- та. Предложен язык для за- дания таблицы переходов конеч- ного автомата. ____________________ © В.В. Кожаев, 2011 ÓÄÊ 519.872, 519.688, 681.63 Â.Â. ÊÎÆÀÅÂ ÈÑÏÎËÜÇÎÂÀÍÈÅ ÄÅÊËÀÐÀÒÈÂÍÎÃÎ ÏÎÄÕÎÄÀ ÄËß ÊÀÐÊÀÑÀ ÄÂÓÌÅÐÍÛÕ ÈÃÐ Вступление. В последние годы сложность решаемых в промышленном программирова- нии задач значительно возросла. В связи с этим активизировался интерес к декларатив- ному программированию. Согласно одному из определений, декларативный стиль подра- зумевает описание того, что должна сделать данная программа, оставляя при этом за ка- дром то, каким образом это нужно сделать. Как правило, языки или системы, деклара- тивные в этом смысле, состоят из двух час- тей: библиотеки программ, реализующих наиболее распространенные действия в за- данной предметной области, и языка или се- мейства языков, с помощью которых описы- вается, какие именно действия необходимо выполнить и в каком порядке. Так, деклара- тивным является язык спецификации клас- сов, используемый в известной платформе Spring. Как известно, с помощью этого язы- ка, составляющего подмножество XML, за- дается то, каким образом экземпляры java- классов будут создаваться и взаимодейство- вать между собой. При этом непосредствен- но созданием объектов и связей занимается Spring, программист лишь описывает, каким должно быть это взаимодействие. Согласно другому определению, языки декларативного программирования относятся к логическим, функциональным или кон- стантным. Как уже было сказано, интерес к декларативным языкам в последнее время растет. Согласно рейтингу Tiobe Index (рис. 1), за 2010 г. практически в два раза возросло использование языка программиро- вания Lisp [1], а в TOP 20 вошли языки Erlang и Scala. В.В. КОЖАЕВ 80 Компьютерная математика. 2011, № 1 РИС. 1. Прогноз популярности языка Lisp согласно рейтингу Tiobe.com Как и любой другой стиль программирования, декларативный хорош для определенного класса задач. Кроме того, такие распространенные языки про- граммирования как С++, С#, PHP, являются универсальными и плохо подходят для декларативного программирования. Поэтому для разработки программного продукта целесообразны несколько языков программирования, каждый из кото- рых предназначен для решения своего класса задач. Современное прикладное программное обеспечение разрабатывается в ос- новном на определенной платформе (аппаратно-программное обеспечение плюс операционная система). Это означает, что код программы транслируется не в машинный код, а в IDL-байт-код, исполняемый на физическом или виртуальном устройстве – так называемой машине, поставляемой в составе платформы. Оттранслированный код выполняется совершенно независимо от исходного языка программирования. Таким образом, можно комбинировать несколько языков в рамках одного программного продукта. В настоящее время основными платформами являются Java, разработанная фирмой Sun Microsystem (недавно выкуплена Oracle), и .NET (фирмы Microsoft). Для этих платформ можно писать программы на десятках языков программиро- вания, часть из них относятся к декларативным. Так, для платформы Java отме- тим языки Scala и Clojure, а для .NET – F#. ИСПОЛЬЗОВАНИЕ ДЕКЛАРАТИВНОГО ПОДХОДА ДЛЯ КАРКАСА ДВУМЕРНЫХ ИГР Компьютерная математика. 2011, № 1 81 Недостатком данного подхода является отсутствие мобильности, т. е. про- граммы, написанные в рамках платформы, сложно перенести на другие плат- формы или в иную операционную среду. В то же время данная задача достаточ- но актуальна, особенно для разработки игровых программ. Причем целесооб- разны мультиплатформные языки программирования. Программа, написанная на таком языке, транслируется в байт-код для различных платформ, а исходный код программы не изменяется. В качестве такого языка программирования мож- но назвать язык HaXe, разработанный фирмой Motion-Twin [2]. Язык является входным для собственной платформы, состоящей из трех частей: • компилятор HaXe-программ; • поставляемые с компилятором библиотеки; • NekoVM – виртуальная машина для исполнения байт-кода. Программы, разработанные на этом языке, можно оттранслировать в байт- код, выполняемый на виртуальной машине NekoVM, в код, исполняемый вирту- альной машиной AVM-2 (Flash) либо в исходные коды на языках JavaScript, PHP или С++. Другим интересным решением является продукт «Alchemy» (Алхимия), раз- работанный фирмой Adobe [3] и позволяющий компилировать С++-код в IDL-байт-код, исполняемый виртуальной машиной AVM-2. Данный продукт позволяет использовать наработанные в течение многих лет исходные С++-коды в веб-программировании. Кроме того, программы, созданные с использованием этой технологии, получаются очень быстрыми ввиду оптимизации байт-кода в процессе компиляции. Известным приложением, перенесенным на flash- платформу с помощью этой технологии, является игра Doom. К достоинствам такого подхода можно отнести простоту переноса програм- мы с одной платформы на другую, к недостаткам – необходимость учитывать ограниченность поставляемых вместе с компилятором библиотек. Библиотеки, поставляемые вместе с целевой платформой, значительно отличаются друг от друга, так что для их использования программу приходится модифицировать, что сводит на нет преимущества мультиплатформности. Кроме того, как указы- валось выше, для различных классов задач гораздо удобнее использовать спе- циализированные языки программирования. Для обеспечения быстрого переноса программного обеспечения с одной платформы на другую целесообразно разрабатывать логическую часть програм- мы в декларативном виде, на языке, который поддерживается одинаково всеми платформами или использовать интерпретатор. Части, отвечающие за взаимо- действие с операционной системой, графический интерфейс пользователя, ис- пользование специфических для данной платформы библиотек и т. д. на наибо- лее распространенном в рамках данной платформы языке. Поскольку быстрый перенос с платформы на платформу особенно важен в разработке игр, а также в играх особенно важна логическая часть программы, не зависящая от конкретного устройства, для которого разрабатывается игра, рас- смотрим применение данного подхода для создания двумерной игры «Охотники за астероидами». В.В. КОЖАЕВ 82 Компьютерная математика. 2011, № 1 Пример игры «Охотники за астероидами» В этой игре n космических кораблей-сборщиков движутся по двумерному игровому полю, разбитому на клетки cij, движение происходит в случайном по- рядке. Если в клетке cij находится астероид, то космический корабль k (k=1,..,n) перерабатывает его и движется дальше. Если грузовой отсек корабля k заполнен, он движется в направлении корабля-приемника. У корабля k есть определенный запас горючего, если корабль k его расходует, он останавливается. Поэтому, ес- ли запас горючего становится меньше определенного, корабль k движется в на- правлении к космической станции, заряжается и возобновляет сбор астероидов. Цель игры состоит в сборе всех астероидов за выделенное время T. Проти- водействовать поведению кораблей-сборщиков пока не предполагается ввиду отсутствия механизмов планирования стратегии игры и ее нацеленности глав- ным образом на развитие моторных реакций игрока. Не детализируя подробно игровую ситуацию, рассмотрим реализацию дви- жения кораблей-сборщиков. Корабль k может находиться в таких состояниях: движение в режиме поиска астероидов, переработка астероида, движение к ко- раблю-сборщику, движение к кораблю-заправщику, разгрузка, заправка. В каж- дом из указанных состояний корабль-сборщик k осуществляет определенные действия. Так, в состоянии движения координаты корабля-сборщика k изменя- ются, в состоянии обработки демонстрируется некоторый визуальный или зву- ковой эффект и т. д. При переходе из одного состояния в другое также выпол- няются определенные действия, причем какие – зависит как от исходного, так и от целевого состояния. В каждом состоянии корабль находится в течение опре- деленного времени, проверка того, нужно ли изменить состояние, происходит по окончании периода времени. Уровни сложности этой игры задаются с помощью количества n кораблей- сборщиков, периода времени T и размера клеток cij. Разумеется, перед исполне- нием игры можно конфигурировать ее программный код, задавая соответст- вующие интервалы значений, ассоциированных с уровнями сложности. Представим состояния корабля-сборщика в виде UML-диаграммы состоя- ний (рис. 2). Очевидно, что ядром большого количества игр с плоским игровым полем является система размещенных на плоскости акторов, поведение которых опи- сывается конечными автоматами. Поэтому целесообразно создать программный каркас для разработки таких игр. Реализация подобного продукта позволит быстро создавать игры с разнообразными игровыми сценариями. Описание императивной части каркаса Для реализации каркаса выбрана платформа Flash, а в качестве входного языка – ActionScript 3.0. Как было сказано, поведение объектов реализуется по таблице состояний конечного автомата. Состояния реализованы в виде классов, поддерживающих интерфейс IState. Каждое состояние Si длится некоторый пе- риод времени, причем у каждого состояния имеются методы, запускаемые перед входом в состояние, после его завершения и в период нахождения корабля в со- стоянии Si. Также каждое Si характеризуется такими свойствами как имя и пе- риод времени, оставшийся до перехода в новое состояние. Акторы наследуются от абстрактного класса Agent, одним из свойств которого является состояние, имеющее вышеописанный тип IStar. ИСПОЛЬЗОВАНИЕ ДЕКЛАРАТИВНОГО ПОДХОДА ДЛЯ КАРКАСА ДВУМЕРНЫХ ИГР Компьютерная математика. 2011, № 1 83 РИС. 2. Диаграмма состояний корабля-сборщика Как видно из диаграммы состояний (рис. 2), условие перехода из одного со- стояния в другое является составным. Так, из состояния «Обработка астероида» в состояние «Движение в случайную клетку» корабль переходит в том и только в том случае, если достаточно горючего для движения и контейнер ещё не за- полнен. Вместе с тем, из состояния «Разгрузка» корабль переходит в состояние «Движение в случайную клетку», если достаточно горючего, поэтому нецелесо- образно проверять, заполнен ли грузовой отсек. Таким образом, очевидно, что целесообразно записать условия в виде логического выражения на некотором языке. Далее функции, выполняемые по завершении одного состояния и в мо- мент перехода в другое, также удобно перечислить списком. Кроме того, если в процессе игры придется добавлять новый тип корабля, например с функциями защиты от врагов, код таблицы состояний, созданной в императивном стиле, придется существенным образом перерабатывать. Выход из такой ситуации – использование встроенного языка, который позволит гибко описывать условия переходов из состояния в состояние и вы- полняемые при этом действия. Описание языка сценариев Для реализации языка описания конечного автомата выбран Common Lisp, используемый во многих платформах в качестве языка сценариев. Кроме того, он позволяет создавать расширения языка, необходимые для задания формаль- но-логических особенностей алгоритмов для классов задач. В.В. КОЖАЕВ 84 Компьютерная математика. 2011, № 1 Рассмотрим пример описания таблицы состояний на реализованном расши- рении языка программирования Common Lisp [4]. Каждый элемент списка со- держит название состояния, список правил, по которым из данного состояния осуществляется переход в другие состояния. Каждое правило содержит логиче- ское выражение, атомами которого являются имена функций-условий, список методов, выполняемых, если правило истинно, и имя нового состояния. (setq x '((state_a (((and acond_11 acond_12) (a_do11 a_do12) stateb) ((or acond_21 acond_22) (a_do21 a_do22) statec)) ... ) (state_b (((not bcond_11) (b_do11) stateb) ((or bcond_11 bcond_12 bcond_13) () statec))) ... ) Функции-условия реализованы на языке ActionScript 3.0 (в текущей реали- зации – это статические методы определенных классов). Интерпретатор вычис- ляет их и подставляет значение в вышеописанное логическое выражение. Если оно истинно, последовательно выполняются необходимые методы и объект переходит в новое состояние. В реализованном программном продукте использован интерпретатор Common Lisp, разработанный Nate Lokers [5]. Разработанный каркас позволяет реализовать любые двумерные (плоские) игры, для которых поведение акторов (в рассмотренном примере астероидов, кораблей-сборщиков, кораблей-приемников) задается конечным автоматом. Логическую часть игры можно без изменений перенести на другую платформу, например Google Android, IPhone. Конечный автомат для спецификации поведенческого аспекта сущностей- акторов впервые использован в методе Шлеер – Мелора инженерии требований к разрабатываемому программному продукту [6, 7]. В этом методе предложено сразу две альтернативные нотации для фиксации динамических аспектов требо- ваний как поведения классов объектов. Первая графическая называется диа- граммой переходов в состояния (ДПС), а вторая табличная – таблицей перехо- дов в состояния (ТПС). Обе нотации основаны на автомате Мура. Если выбирать между ДПС и ТПС, то аргумент в пользу ДПС – ее наглядность в определении действий, а ТПС позволяет зафиксировать все возможные комбинации состоя- ний-событий и обеспечить полноту и непротиворечивость формулировок требо- ваний. Поэтому для спецификации поведения акторов целесообразна ДПС, а ее преобразование в ТПС позволит верифицировать игру. ИСПОЛЬЗОВАНИЕ ДЕКЛАРАТИВНОГО ПОДХОДА ДЛЯ КАРКАСА ДВУМЕРНЫХ ИГР Компьютерная математика. 2011, № 1 85 Заключение. Ввиду большого преимущества декларативного программиро- вания вообще и использования нескольких языков программирования в рамках одного программного продукта, а также возможности переносить программы между платформами, большой интерес вызывает разработка программного кар- каса (framework) для быстрого создания игровой логики с языком сценариев Common Lisp и распространенными игровыми алгоритмами. Реализация каркаса позволит быстро разрабатывать логическую часть игры, учитывая кроссплат- формность программного продукта, обладающего мобильностью для класса платформ. В.В. Кожаєв ВИКОРИСТАННЯ ДЕКЛАРАТИВНОГО ПІДХОДУ ДЛЯ КАРКАСА ДВОВИМІРНИХ ІГОР Розглянуто використання декларативного підходу у створенні каркасу двовимірних комп'ютер- них ігор. Обґрунтована потреба застосування кількох мов програмування в рамках одного про- грамного продукту. Запропоновано мову подання таблиці переходів скінченного автомата. V.V. Kozhaev USING THE DECLARATIVE APPROACH TO FRAMEWORK OF TWO-DIMENSIONAL GAMES The use of a declarative approach to creating the framework of two-dimensional computer games is considered. The necessity to use multiple programming languages within a single software product is proved. A language to specify a transition table for a finite automaton is proposed. 1. http://www.tiobe.com 2. http://haxe.org/ 3. w.w.w.adobe.com 4. Хювенен Э., Сеппянен Й. Мир Лиспа: В 2-х т. – М.: Мир, 1990. – Т. 1. – 458 с.; Т. 2. – 332 с. 5. http://www.solve-et-coagula.com/ 6. Шлеер С., Меллор С. Объектно-ориентированный анализ: моделирование мира в состоя- ниях. – Киев: Диалектика, 1993. – 472 с. 7. Jacobson I., Griss M., Jonsson P. Software Reuse. – New York: Addison-Wesley, 1997. – 376 p. Получено 14.12.2010 Îá àâòîðå: Кожаев Владимир Викторович, аспирант Института кибернетики имени В.М. Глушкова НАН Украины.
id nasplib_isofts_kiev_ua-123456789-84609
institution Digital Library of Periodicals of National Academy of Sciences of Ukraine
issn ХХХХ-0003
language Russian
last_indexed 2025-12-07T16:02:48Z
publishDate 2011
publisher Інститут кібернетики ім. В.М. Глушкова НАН України
record_format dspace
spelling Кожаев, В.В.
2015-07-11T16:55:14Z
2015-07-11T16:55:14Z
2011
Использование декларативного подхода для каркаса двумерных игр / В.В. Кожаев // Компьютерная математика: сб. науч. тр. — 2011. — № 1. — С. 79-85. — Бібліогр.: 7 назв. — рос.
ХХХХ-0003
https://nasplib.isofts.kiev.ua/handle/123456789/84609
519.872, 519.688, 681.63
Рассмотрено использование декларативного подхода в создании каркаса двумерных компьютерных игр. Обоснована необходимость применения нескольких языков программирования в рамках одного программного продукта. Предложен язык для задания таблицы переходов конечного автомата.
Розглянуто використання декларативного підходу у створенні каркасу двовимірних комп'ютерних ігор. Обґрунтована потреба застосування кількох мов програмування в рамках одного програмного продукту. Запропоновано мову подання таблиці переходів скінченного автомата.
The use of a declarative approach to creating the framework of two-dimensional computer games is considered. The necessity to use multiple programming languages within a single software product is proved. A language to specify a transition table for a finite automaton is proposed.
ru
Інститут кібернетики ім. В.М. Глушкова НАН України
Компьютерная математика
Инструментальные средства информационных технологий
Использование декларативного подхода для каркаса двумерных игр
Використання декларативного підходу для каркаса двовимірних ігор
Using the declarative approach to framework of two-dimensional games
Article
published earlier
spellingShingle Использование декларативного подхода для каркаса двумерных игр
Кожаев, В.В.
Инструментальные средства информационных технологий
title Использование декларативного подхода для каркаса двумерных игр
title_alt Використання декларативного підходу для каркаса двовимірних ігор
Using the declarative approach to framework of two-dimensional games
title_full Использование декларативного подхода для каркаса двумерных игр
title_fullStr Использование декларативного подхода для каркаса двумерных игр
title_full_unstemmed Использование декларативного подхода для каркаса двумерных игр
title_short Использование декларативного подхода для каркаса двумерных игр
title_sort использование декларативного подхода для каркаса двумерных игр
topic Инструментальные средства информационных технологий
topic_facet Инструментальные средства информационных технологий
url https://nasplib.isofts.kiev.ua/handle/123456789/84609
work_keys_str_mv AT kožaevvv ispolʹzovaniedeklarativnogopodhodadlâkarkasadvumernyhigr
AT kožaevvv vikoristannâdeklarativnogopídhodudlâkarkasadvovimírnihígor
AT kožaevvv usingthedeclarativeapproachtoframeworkoftwodimensionalgames