Ненормално програмиране
Кой не е мечтал да се опита да разработи своя собствена игра. Ще създадем игра в стилinteractive fictionВзех сюжета от сайта на една от програмните системи RTADS. Системата е локализирана на български език и съдържа пълен набор от инструменти за програмиране и ръководства. Но… Ще програмираме в друга система Inform7. Обичам английски. Така че сюжетът.
… Като пример ще разработим игра, която ще се развива на малко летище. Нашето летище ще има терминал, централна зала и изходи към самолетите. Освен това на един от изходите ще има самолет. Терминалът ще разполага с гише за продажба на билети и металотърсач, през който можете да стигнете до централната зала. В централната зала ще има бюфет и заключваща се врата към сервизната част. В залата с изходи към самолета ще има няколко такива изхода, както и заключена контролна зала. Ето предварителна карта на нашата игра.

Нека крайната цел на сегмента от играта, който се провежда на летището, е да напуснете летището. Играчът ще започне играта в главната сграда на терминала, но няма да може да напусне летището - ще измислим някаква причина, като например тълпа от хора, натъпкана на входа на летището, която не може да бъде пробита. (Разбира се, ако това беше завършена игра, част от света на игратавероятно ще се намира извън летище и ние не бихме използвали толкова пресилена причина, за да ограничим движението на играча. Но за този пример ще го използваме, така че, както се казва, „да не се разпространява“ ненужно). Единственият друг възможен начин да напуснете летището е със самолет; така че нека това бъде целта на нашата игра.
За да вдигне самолета във въздуха, играчът ще трябва да влезе в пилотската кабина. (Нашият пример ще завърши с проникване на играча; в игра в пълен размер вероятно ще оставим играча да отлети някъде.) Само летателният персонал обаче има право да влиза в пилотската кабина - стюардесата не пуска пътници в пилотската кабина. Затова трябва да намерим начин да минем покрай стюардесата. Един такъв начин е да я разсеете достатъчно дълго, за да се промъкнете покрай нея в пилотската кабина; в нашата игра обаче играчът ще трябва да намери униформата на пилота.
Къде е логично да поставим пилотската униформа? Например в стаята за почивка на летателния персонал; добре, нека поставим куфар в тази стая, в който ще лежи формулярът. За щастие стаята за почивка е скрита зад заключена врата, което автоматично създава друг подпъзел. За да влезе в зоната с ограничен достъп и да вземе формуляра от там, играчът ще се нуждае от карта с магнитен ключ, за да отключи съответната врата (като постави картата в слота на четеца, разположен до вратата).
Ще поставим магнитната карта на леснодостъпно място - на гишето за билети в терминала. Ние обаче няма да позволим на играча да я пренесе контрабандно през металдетектора - това ще задейства аларма и служителят по сигурността ще отнеме картата (и ще я постави обратно на гишето, за да може играчът да опита да я прокара контрабандно отново). За да пренесете картата през металдетектора, ще трябва да го изключите.
Ще поставим превключвателя в стаята за почистване, заключен с ключ. Ще поставим ключа от тази стая в тоалетната на самолета заедно с някои други елементи от почистващото оборудване - кофа, парцал и торба за боклук, така че играчът да може да познае по асоциация, че ключът, който се намира там, най-вероятно е от стаята за почистване.
За да стигнете до тоалетната в самолет, ви трябва билет за този самолет. Ще направим билета относително лесен за намиране: ще го скрием във вестник, оставен от някой в бюфета. Веднага щом играчът вземе вестника, от него ще падне билет.
Това всъщност е цялата игра: отивате в бюфета, взимате вестник и намирате билет. След като вземете билет, качвате се на самолета, отивате до тоалетната и взимате ключа от стаята за почистване там. Отидете с този ключ в стаята за почистване, отключете я, влезте там и изключете металдетектора. След това се връщате на гишето за билети, взимате магнитна карта, отивате в сервизната зона и отключвате вратата, водеща там с помощта на карта. Влезте в стаята за почивка на летателния персонал, извадете униформата на пилота от куфара и я облечете. След това отново отидете до самолета и влезте в пилотската кабина покрай стюардесата.
Сега можем да начертаем нова карта, маркирайки я с информация за най-важните елементи и действия, от които всъщност ще се състои играта.

Реализация на картата
В съответствие с правилата на езика Inform (а това е почти естествен английски), гледаме картата и пишем:
Терминалът е стая. „Това е голяма зала с много хора.“. Билетните гишета са източно от терминала. „Някои хора избират посоката тук и купуват билета.“. Охраната е на север от терминала. Металдетекторът е врата. Отворено е. Намира се на север от Портата за сигурности южно от Concourse. Снек-барът е източно от залата. Дървената врата е врата. Заключва се и се заключва. Намира се на изток от зоната за сигурност и на запад от залата. Пилотният салон е южно от зоната за сигурност. Центърът за сигурност е на запад от зоната за сигурност. Зоната на портата е на север от залата. Металната врата е врата. Може да се заключва и е заключен. Намира се на изток от зоната на портата и на запад от стаята за поддръжка. Врата 1 е северозападно от зоната на портата. Врата 2 е на север от зоната на портата. Врата 3 е североизточно от зоната на портата. Джетуей е източно от Порта 3. Предната част на самолета е източно от Джетуей. Стюардесата е жена в предната част на самолета. Тънката врата си е врата. Намира се на юг от пилотската кабина и на север от предната част на самолета. Задната част на равнината е на юг от предната част на равнината. Банята е южно от задната част на самолета. Не удивляйтесь, това е настоящият език на програмиране. Платформа, основана на принципа на литературното програмиране. Компилираме, избираме закладка Index-->World, получаваме:
Много близо до текста. Можете да пройдете по картата (закладка Game): airport An Interactive Fiction by AlexChin Release 1 / Serial number 091013 / Inform 7 build 5Z71 (I6/v6.31 lib 6/12N) SD
Терминал Това е голяма зала с много хора.
Защитна врата Можете да видите метален детектор тук.
Реализация предметов
Дописваме код:Точки от раздел 2
Гишетата за билети съдържат брояч. На гишето има лична карта.
Електрическият ключ е включено устройство в стаята за поддръжка. Електрическият ключ е включен.
Месинговият ключ отключва металната врата. В банята е. Кофата, гъбата, торбата за боклук са в банята. Новинарският вестнике в Снек бара. „Можете да видите новини тук.“ Това е затворен, непрозрачен контейнер. Описанието за това е „Четете няколко статии и веднага изпадате в депресия. Федералният дефицит току-що се покачи с още двадесет милиарда долара, но всичко е извън бюджета, така че всъщност не се брои. Икономиката претърпя още един спад, но президентът казва, че е уверен, че възстановяването е точно зад ъгъла и набира скорост.“
Бордната карта е във вестника Новини. Описанието му е "Бордна карта. Luht franza board 0923. Place A. Row 25. Class B".
Слотът е контейнер. Описанието му е „Обикновен слот на стената“. Намира се в Залата. Куфарът е отваряем затворен контейнер. Намира се в Pilot Lounge. Униформата на пилота е в куфара. Може да се носи.
Реализация на специални реакции
Раздел 3 Специално поведение
Преди да отворите тънката врата: ако играч носи униформа: кажете "Втори пилот! Добре дошъл на борда!"; продължете действието; в противен случай: кажете „Само за персонал!“; спрете действието.
След като отидете в пилотската кабина: завършете играта с победа;
След преминаване през металотърсача: ако играчът носи идентификация и електрическият превключвател е включен: завършете играта със смърт; в противен случай: продължете действието.
След като вземете вестника: Сега бордната карта е на мястото; кажете "Листчето хартия падна на пода"; продължете действието.
Извършете вмъкване на нещо в слота: ако съществителното е id: кажете "Щракнете!"; сега дървената врата е отключена; в противен случай: премахнете съществителното от играта.
Докладвайте, че вмъквате нещо в слота: кажете „[ако съществителното не е id][Съществителното име] изчезва от погледа и знаете, че никога нямавижте го отново."
Вместо да дава пропуск на стюардесата: сега стюардесата носи пропуск; кажете „Добре, моля, намерете мястото си отзад на самолета“.
Вместо да преминете от предната към задната част на самолета: ако стюардесата носи бордната карта: продължете действието; в противен случай: кажете "Спри. Дай ми пропуск"; спиране на действието;