stringtranslate.com

Информировать

Inform — это язык программирования и система проектирования для интерактивной фантастики, изначально созданная в 1993 году Грэмом Нельсоном . Inform может генерировать программы, разработанные для виртуальных машин Z-code или Glulx . Версии с 1 по 5 были выпущены между 1993 и 1996 годами. Около 1996 года Нельсон переписал Inform с первых принципов , чтобы создать версию 6 (или Inform 6 ). [3] В течение следующего десятилетия версия 6 стала достаточно стабильной и популярным языком для написания интерактивной фантастики. В 2006 году Нельсон выпустил Inform 7 (кратко известный как Natural Inform ), совершенно новый язык, основанный на принципах естественного языка и новый набор инструментов, основанный на метафоре книгоиздательства.

Z-Machine и Glulx

Компиляторы Inform транслируют код Inform в файлы историй для Glulx или Z-code , двух виртуальных машин, разработанных специально для интерактивной фантастики. Glulx, который может поддерживать более крупные игры, используется по умолчанию.

Z-machine изначально была разработана компанией Infocom в 1979 году для своих интерактивных художественных произведений. Поскольку существует по крайней мере один такой интерпретатор для почти каждой основной и второстепенной платформы, это означает, что один и тот же файл Z-code может быть запущен на множестве платформ без каких-либо изменений. Первоначально Inform ориентировалась только на Z-machine.

Эндрю Плоткин создал неофициальную версию Inform 6, которая также могла генерировать файлы для Glulx , виртуальной машины, которую он разработал для преодоления многих ограничений Z-machine, существовавшей несколько десятилетий. Начиная с Inform 6.3, выпущенной 29 февраля 2004 года, Inform 6 включал официальную поддержку обеих виртуальных машин, основанную на работе Эндрю Плоткина. Ранний выпуск Inform 7 не поддерживал Glulx, но в августе 2006 года поддержка Glulx была реализована.

Информ 6

Inform изначально был создан Грэмом Нельсоном в 1993 году. В 1996 году Нельсон переписал Inform с первых принципов, чтобы создать версию 6 (или Inform 6). В течение следующего десятилетия версия 6 стала достаточно стабильной и популярным языком для написания интерактивной фантастики.

Система Inform 6 состоит из двух основных компонентов: компилятора Inform , который генерирует файлы историй из исходного кода Inform, и библиотеки Inform , набора программного обеспечения, которое выполняет большую часть сложной работы по анализу текстового ввода игрока и отслеживанию модели мира. Название Inform также относится к языку программирования Inform , который понимает компилятор.

Хотя Inform 6 и Z-Machine изначально разрабатывались с расчетом на интерактивную фантастику, было разработано много других программ, включая интерпретатор BASIC , учебник LISP (в комплекте с интерпретатором), игру «Тетрис» и версию игры «Змейка» .

Компилятор Inform 6

Компилятор Inform генерирует файлы для Z-machine или Glulx (также называемые файлами историй) из исходного кода Inform 6 .

Язык программирования Inform 6

Язык программирования Inform является объектно-ориентированным и процедурным . Ключевым элементом языка являются объекты. Объекты поддерживаются в дереве объектов, в котором перечислены родительско-дочерние отношения между объектами. Поскольку родительско-дочерние отношения часто используются для представления местоположения, объект, который является родителем другого объекта, часто говорят, что он «держит» его. Объекты можно перемещать по дереву. Обычно объекты верхнего уровня представляют комнаты и другие локации в игре, которые могут содержать объекты, представляющие содержимое комнаты, будь то физические предметы, неигровые персонажи, персонаж игрока или фоновые эффекты. Все объекты могут содержать другие объекты, поэтому объект livingroomможет содержать insurancesalemanобъект, который содержит briefcaseобъект, содержащий insurancepaperworkобъект.

В ранних версиях Inform объекты отличались от понятия объектов из объектно-ориентированного программирования, поскольку не существовало такого понятия, как класс. В более поздних версиях была добавлена ​​поддержка определений классов и объекты могли быть членами классов. Объекты и классы могут наследоваться от нескольких классов. Интерактивные художественные игры обычно содержат много уникальных объектов. Из-за этого многие объекты в Inform не наследуются ни от одного класса, кроме «метакласса» Object. Однако объекты очень часто имеют атрибуты (булевы свойства, такие как sceneryили edible), которые распознаются библиотекой Inform. В других языках это обычно реализуется через наследование.

Вот простой пример исходного кода Inform 6.

! Квадратные скобки определяют процедуру. Это основная процедура, которая не принимает аргументов. [  Main ;  print  "Hello, World! ^ " ; ];

Процедурные части, операторы и операторы в значительной степени заимствованы из C, за исключением того, что -->xвместо [x]используется для взятия индексов массива. Процедуры определяются в квадратных скобках, как в Mainпроцедуре выше, [5], но вызываются с круглыми скобками, как в C. Символ @используется для экранирования символов и для вызова сырых кодов операций Z-машины. [6]

Информ 6 библиотека

Система Inform также содержит библиотеку Inform, которая автоматизирует почти всю самую сложную работу, связанную с программированием интерактивной фантастики ; в частности, она включает в себя анализатор текста , который анализирует ввод игрока, и модель мира, которая отслеживает такие вещи, как объекты (и их свойства), комнаты, двери, инвентарь игрока и т. д.

Компилятор Inform не требует использования библиотеки Inform. Доступно несколько библиотек-заменителей, например, Platypus [7] и InformATE, библиотека, которая кодирует Inform на испанском языке. Некоторые игры могут вообще не использовать библиотеку, например, прямой порт Zork в Inform 6. [5]

Пример игры

Вот пример исходного кода Inform 6, который использует библиотеку Inform. Пример кода Inform 6 ниже можно использовать в Inform 7, но не без специального разграничения, указывающего на то, что это встроенный устаревший код.

Постоянная  история  "Привет, франшиза" ; Постоянный  заголовок  " ^ Интерактивный пример ^ " ;Включить  "Parser" ; Включить  "VerbLib" ;[  Инициализация ;  location  =  Living_Room ;  "Привет, мир" ; ];Объект  Kitchen  "Кухня" ; Объект  Front_Door  "Входная дверь" ;Объект  Living_Room  "Гостиная"  с  описанием  "Уютно обставленная гостиная". ,  n_to  Kitchen ,  s_to  Front_Door ,  имеет  свет ;Объект  ->  Продавец  "страховой агент"  с  именем  'страхование'  'продавец'  'мужчина' ,  описание  "Страховой агент в безвкусном  костюме из полиэстера. Кажется, он горит желанием поговорить с вами." ,  до  [;  Слушать :  переместить  Insurance_Paperwork  на  игрока ;  "Продавец утомляет вас обсуждением  полисов страхования жизни. Из своего  портфеля он достает какие-то документы, которые он  вам передает." ;  ],  имеет  анимацию ;Объект  ->  ->  Портфель  "портфель"  с  названием  'портфель'  'кейс' ,  описание  "Слегка потертый черный портфель." ,  имеет  контейнер ;Объект  ->  ->  ->  Insurance_Paperwork  "страховая документация"  с  названием  'paperwork'  'papers'  'insurance'  'documents'  'forms' ,  описание  "Страница за страницей небольшого юридического текста." ;Включить  «Грамматику» ;

Известные игры, разработанные в Inform 6 или более ранних версиях

Информ 7

30 апреля 2006 года Грэм Нельсон объявил о выпуске бета-версии Inform 7 в группе новостей rec.arts.int-fiction. [13] Inform 7 состоит из трех основных частей: IDE Inform 7 с инструментами разработки, специализированными для тестирования интерактивной фантастики, компилятора Inform 7 для нового языка и « Стандартных правил », которые формируют основную библиотеку для Inform 7. Inform 7 также опирается на библиотеку Inform и компилятор Inform из Inform 6. Компилятор компилирует исходный код Inform 7 в исходный код Inform 6, который затем компилируется отдельно Inform 6 для генерации файла истории Glulx или Z-кода . Inform 7 также по умолчанию пишет файлы Blorb , архивы, которые включают Z-код вместе с необязательными «обложками» и метаданными, предназначенными для целей индексации. Полный набор инструментов Inform 7 в настоящее время доступен для Mac OS X , Microsoft Windows и Linux (с 2007 года).

По состоянию на 2023 год Inform 7 и его инструменты остаются в стадии разработки. [14] С апреля 2022 года Inform 7 имеет открытый исходный код и разрабатывается на GitHub . [15]

Inform 7 некоторое время назывался Natural Inform , но позже был переименован в Inform 7. Это старое название объясняет, почему компилятор Inform 7 называется «NI». [16]

Информ 7 IDE

Inform 7 IDE на Mac OS X, показывающий исходный код и клубок
Inform 7 IDE на Mac OS X, показывающая карту индекса и расшифровку

Inform 7 поставляется с интегрированной средой разработки (IDE) для Mac OS X, Microsoft Windows и Linux. Mac OS X IDE была разработана Эндрю Хантером. Microsoft Windows IDE была разработана Дэвидом Киндером. Linux IDE (известная как GNOME Inform) была разработана Филиппом Чименто. [17]

Inform 7 IDE включает текстовый редактор для редактирования исходного кода Inform 7. Как и многие другие редакторы программирования, он имеет подсветку синтаксиса. Он выделяет кавычки одним цветом. Заголовки организационных разделов (тома, книги, главы, части и разделы) выделены жирным шрифтом и увеличены. Комментарии выделены другим цветом и немного уменьшены.

IDE включает встроенный интерпретатор Z-кода . Интерпретатор IDE Mac OS X основан на интерпретаторе Zoom Эндрю Хантера с участием Джесси МакГрю [ требуется ссылка ] . Интерпретатор IDE Microsoft Windows основан на WinFrotz .

Когда разработчик тестирует игру во встроенном интерпретаторе, прогресс отслеживается в представлениях «skein» и «transcript» IDE. Skein отслеживает команды игрока как дерево ветвящихся возможностей. Любую ветвь дерева можно быстро перепройти, что позволяет повторять разные пути в разрабатываемой игре без повторного прохождения тех же частей игры. Пути также можно аннотировать примечаниями и помечать как решения, которые можно экспортировать в виде текстовых пошаговых инструкций. С другой стороны, стенограмма отслеживает как команды игрока, так и ответы игры. Правильные ответы из игры можно пометить как «благословенные». При повторном воспроизведении стенограммы или ветви skein будут выделены отклонения от благословенной версии, что может помочь разработчику найти ошибки.

IDE также предоставляет различные индексы в разрабатываемую программу. Код отображается в виде иерархии классов, традиционной карты IF, оглавления в виде книги и в других формах. Щелчок по элементам в индексе приводит к переходу к соответствующему исходному коду.

IDE представляет две панели рядом друг с другом для работы. Каждая панель может содержать исходный код, над которым ведется работа, текущий статус компиляции, нить, транскрипт, индексы исходного кода, запущенную версию игры, документацию для Inform 7 или любых установленных расширений к нему или настройки. Концепция заключается в имитации рукописной книги автора путем представления двух «разворотных страниц» вместо множества отдельных окон. [13]

Язык программирования Inform 7

Известные особенности включают в себя сильный уклон в сторону декларативного стиля программирования на основе правил и способность выводить типы и свойства объектов из того, как они используются. Например, утверждение "Джон носит шляпу." создает "человека" с именем "Джон" (поскольку только люди способны носить вещи), создает "вещь" со свойством "носимый" (поскольку только объекты, помеченные как "носимый", могут быть надеты), и устанавливает Джона как носящего шляпу.

Другим примечательным аспектом языка является прямая поддержка отношений, которые отслеживают ассоциации между объектами. Это включает в себя автоматически предоставляемые отношения, например, один объект содержит другой или объект, который носят, но разработчик может добавлять свои собственные отношения. Разработчик может добавлять отношения, указывающие на любовь или ненависть между существами, или отслеживать, какие персонажи в игре встречались друг с другом.

Inform 7 — это язык программирования, ориентированный на определенную область , предоставляющий писателю/программисту гораздо более высокий уровень абстракции, чем Inform 6, и легко читаемый исходный код. Логические и арифметические операторы общего назначения написаны на естественном языке (см., например, пример «Физика» в The Inform Recipe Book ). [18]

В ранней версии Inform 7 компилятор транслирует код в Inform 6, подобно тому, как CFront делал это с C++ и C. [16] Текущий компилятор (начиная с версии 10 2022 года) дополнительно способен транслировать код непосредственно в C для собственного исполняемого файла [ сомнительнообсудить ] и генерировать «индексный мини-сайт», описывающий историю. [19]

Пример игры

Выражения в Inform 7 имеют форму полных предложений. Пустые строки и отступы в некоторых местах имеют структурное значение. Основная форма программы Inform 7 выглядит следующим образом:

«Привет, мир!» от «IF Author»Мир — это комната.Когда начнется игра, скажите «Привет, мир!»

Ниже представлена ​​повторная реализация приведенного выше примера «Hello Deductible», написанного на Inform 7. Он основан на библиотеке, известной как «The Standard Rules», которая автоматически включена во все компиляции Inform 7.

«Hello Deductible» от «IF Author»Заголовок статьи — «Интерактивный пример» .Гостиная — это комната. «Уютно обставленная гостиная».Кухня находится к северу от гостиной.Входная дверь находится к югу от гостиной.Входная дверь — это дверь. Входная дверь закрыта и заперта.Страховой агент — мужчина в Гостиной. Описание: «Страховой агент в безвкусном костюме из полиэстера. Кажется, он горит желанием поговорить с вами». Под «мужчиной» следует понимать страхового агента.Страховой агент несет портфель. Описание: «Слегка потертый черный портфель». Под «чемоданом» следует понимать портфель.Страховая документация в портфеле. Описание: "Страница за страницей мелкого юридического жаргона". Под "бумагами " следует понимать "бумаги" или "документы" или "формы" .Вместо того, чтобы слушать страхового агента:сказать "Продавец утомляет вас обсуждением полисов страхования жизни. Из своего портфеля он достает какие-то бумаги, которые передает вам." ;передать страховые документы игроку.

Известные игры, написанные на Inform 7

Mystery House Possessed (2005) Эмили Шорт [20] была первой игрой Inform 7, выпущенной для широкой публики. Она была выпущена как часть проекта "Mystery House Taken Over".

1 марта 2006 года Шорт объявила о выпуске еще трех игр: [21] Bronze [22] (пример традиционной игры с интенсивными головоломками) и Damnatio Memoriae [23] (продолжение ее отмеченной наградами игры Savoir-Faire для Inform 6) к ним присоединилась The Reliques of Tolti-Aph [24] (2006) Грэма Нельсона . Когда 30 апреля 2006 года была анонсирована публичная бета-версия Inform 7, были доступны шесть «рабочих примеров» работ среднего и большого масштаба вместе с их исходным кодом, включая три игры, выпущенные ранее 1 марта. [25] [26] [27]

Floatpoint Эмили Шорт стала первой игрой Inform 7, занявшей первое место в Interactive Fiction Competition . [28] Она также выиграла награды XYZZY Awards 2006 за лучший сеттинг и лучших NPC. [29] Rendition от Nespresso (2007) — это политический художественный эксперимент в форме текстовой приключенческой игры. Её подход к трагедии обсуждался в академическом плане как Ассоциацией вычислительной техники [30] , так и Кембриджским университетом . [31]

Смотрите также

Дальнейшее чтение

Информ 6
Информ 7

Ссылки

  1. ^ "Заметки о выпуске Inform v10.1.0 и v10.1.1". github.com . Получено 26 августа 2022 г. .
  2. ^ "Inform 7 v10.1.0 теперь с открытым исходным кодом". 28 апреля 2022 г. Получено 28 апреля 2022 г.
  3. ^ ab "Интервью SPAG: Грэм Нельсон и Эмили Шорт на Inform 7". SPAG #44 . Общество по продвижению приключенческих игр. 30 апреля 2006 г. Получено 7 ноября 2015 г.
  4. ^ "Release v6.33". GitHub . Получено 26 февраля 2015 г. .
  5. ^ abc Плоткин, Эндрю (17 апреля 2019 г.). «Что такое ZIL вообще?». Зарф . В этом примере I6 очень близко следует за C.
  6. ^ «Руководство дизайнера Inform, v4, Содержание». www.inform-fiction.org .
  7. Тернер, Энсон (14 марта 2002 г.). "Inform Platypus release 4" . Получено 4 января 2007 г.
  8. Алан Де Смет (14 марта 2006 г.). "Curses (Interactive Fiction Reviews)" . Получено 1 ноября 2006 г.
  9. Из 1219 игр, получивших оценку «Interactive Fiction Ratings», Anchorhead имела наивысший рейтинг по состоянию на 4 января 2007 года. ( «IF Rating Stats». Архивировано из оригинала 11 мая 2008 года . Получено 4 января 2007 года .)
  10. ^ Монфор, Ник; Стюарт Моултроп (август 2003 г.). «Face It, Tiger, You Just Hit the Jackpot: Reading and Playing Cadre's Varicella» (PDF) . Архивировано из оригинала (PDF) 6 ноября 2009 г. . Получено 6 ноября 2009 г. .Опубликовано как Монфор, Ник; Моултроп, Стюарт (август 2003 г.). «Face It, Tiger, You Just Hit the Jackpot: Reading and Playing Cadre's Varicella». Fine Art Online . 17 (8). Университет штата Миссисипи . Архивировано из оригинала 13 октября 2007 г.
  11. ^ «Фотопия - это рассказ, Варицелла - это мир» . Приключение и приключение . Январь 2002 года . Проверено 4 января 2007 г.
  12. ^ "Download". Inform 7. Архивировано из оригинала 27 февраля 2015 г. Получено 15 марта 2016 г.
  13. ^ ab Graham Nelson (30 апреля 2006 г.). "Inform 7: Public Beta". Группа новостей : rec.arts.int-fiction. Usenet:  [email protected] . Получено 4 января 2007 г.
  14. Эмили Шорт (18 февраля 2007 г.). «Inform 7: Возможные будущие разработки». Группа новостей : rec.arts.int-fiction. Usenet:  [email protected] . Получено 30 марта 2007 г.Также архивировано в Short, Emily ; Graham Nelson (январь 2007 г.). "Inform 7: Возможные будущие разработки". Архивировано из оригинала 5 сентября 2008 г. Получено 31 марта 2007 г.
  15. ^ Нельсон, Грэм (13 января 2023 г.). «История версий Inform 7». GitHub .
  16. ^ ab Graham Nelson (30 марта 2007 г.). "Re: "Inform 7" — неправильное название". Группа новостей : rec.arts.int-fiction. Usenet:  [email protected] . Получено 30 марта 2007 г.
  17. ^ "Страница проекта GNOME Inform 7 SourceForge". Февраль 2008 г.– Теперь перенесено на GitHub в Чименто, Филип (27 декабря 2022 г.). "ptomato/inform7-ide". Гитхаб .
  18. ^ "10.1. Газы". ganelson.github.io .
  19. ^ "Структура компилятора Inform 7". ganelson.github.io .
  20. ^ "Mystery House Taken Over". Архивировано из оригинала 4 мая 2006 года . Получено 4 января 2007 года .
  21. Эмили Шорт (по просьбе Грэма Нельсона) (1 марта 2006 г.). «Три игры в Inform 7». Новостная группа : rec.games.int-fiction. Usenet:  [email protected] . Получено 4 января 2007 г.
  22. ^ Short, Emily (2006). "Bronze" . Получено 4 января 2007 г. .
  23. ^ Short, Emily (2006). "Damnatio Memoriae" . Получено 4 января 2007 г.
  24. ^ Нельсон, Грэм (2005). "Реликвии Толти-Афа" . Получено 4 января 2007 г.
  25. Short, Emily (2006). "Bronze". Архивировано из оригинала 10 февраля 2007 года . Получено 4 января 2007 года .
  26. Short, Emily (2006). "Damnatio Memoriae". Архивировано из оригинала 12 декабря 2006 года . Получено 4 января 2007 года .
  27. ^ Нельсон, Грэм (2005). «Реликвии Толти-Афа». Архивировано из оригинала 6 февраля 2007 г. Получено 4 января 2007 г.
  28. ^ "12-й ежегодный конкурс интерактивной фантастики". 2006. Получено 12 мая 2007 .
  29. ^ "XYZZY Awards: Winning Games of 2006". Архивировано из оригинала 15 мая 2007 г. Получено 12 мая 2007 г.
  30. ^ "Слайды конференции ACM Hypertext 2007 (PDF)" (PDF) .
  31. ^ "Слайды лекций Кембриджского университета".
  32. ^ "Загрузить руководство дизайнера Inform". 1 апреля 2006 г. Получено 4 января 2007 г.
  33. ^ "О руководстве дизайнера Inform". 1 апреля 2006 г. Получено 4 января 2007 г.
  34. ^ "Загрузить руководство для начинающих Inform". 1 апреля 2006 г. Получено 4 января 2007 г.Фёрт, Роджер; Соня Кессерих (август 2004 г.). "The Inform Beginner's Guide: Third Edition" (PDF) . Получено 4 января 2007 г. .
  35. ^ Грэм Нельсон (10 апреля 2006 г.). «Естественный язык, семантический анализ и интерактивная художественная литература» (PDF) . Архивировано из оригинала (PDF) 14 марта 2018 г. . Получено 4 января 2007 г. . {{cite journal}}: Цитировать журнал требует |journal=( помощь )

Внешние ссылки