Торговые Империи: программирование собственной вселенной на PHP

  Автор: © Bryan Brunton
Перевод: © Сергей Скороходов


 

Брайен Брантон создал проект "Торговые Империи" (Merchant Empires Project) -- коллективную Интернет-игру, суть которой заключается в исследовании космического пространства и в экономической конкуренции участников. Игрок должен владеть приемами стратегических, ролевых и боевых игр, а также быть искусным дипломатом. В основу "Торговых Империй" легла памятная BBS-игра "Торговые войны" (Tradewars). В приведенном ниже интервью Брайен рассказывает историю создания и развития "Торговых Империй".

Вопрос: Что побудило Вас заняться созданием ТИ?

Ответ: Несколько причин. Во-первых, хотелось узнать смогу ли я это сделать. Я всегда увлекался стратегическими играми и мне всегда хотелось написать такую игру самому. И, хотя я знал, что воплощение задуманного может быть временами и скучным и утомительным, меня это не останавливало. Во-вторых, я натолкнулся на игру под названием "Звездный Купец", ASP-реализацию "Торговых Войн" с закрытым кодом, и меня ужаснуло то, как скверно она была сделана. Многое в "Звездном Купце" мне казалось неправильным, но что меня особенно поразило своей нелепостью, так это периодически выскакивающее окно с сообщением: "Command not processed due to an ErrorStorm. Please log out and try again." Абсолютная бессодержательность самой концепции "Девятого Вала Ошибок" [Error Storm] и то, что кто-то думает, что пользователи могут "проглотить" такое объяснение, вызвало у меня смех. "'Торговые Войны'" заслуживают лучшего!" -- сказал я себе. Однако нужно сказать, что и желания с презрением отбросить все усилия и изобретательность, вложенные в "Звездного Купца" разработчиками, у меня тоже нет. Разработчики ЗК заслуживают серьезной похвалы за то, что они сделали.

В.: А какие программы Вы использовали для того, чтобы вдохнуть в ТИ жизнь?

О.: Вот краткий перечень тех open source программ, которые работают в ТИ:

Apache
Можно использовать любой веб-сервер с поддержкой PHP.
PostgreSQL
PHP
PHPLIB
Библиотека классов для простого контроля за подключениями к серверу и доступа к базам данных из PHP-программы.
Python
Первая версия ТИ была полностью написана на Python. Из-за проблем с производительностью я перешел на PHP. Но в ТИ остались куски, написанные на Python'е.
PygreSQL
С помощью этой библиотеки обработчик событий [event processor] и генератор игрового пространства [map creator] накапливают и обновляют используемые в ТИ данные в базе данных на PostgreSQL.
Medusa Asynchronous Network Libraries
Библиотека Medusa используется в ТИ для организации telnet-доступа к обработчику событий.
С помощью этой библиотеки обработчик событий [event processor] и генератор игрового пространства [map creator] накапливают и обновляют используемые в ТИ данные в базе данных на PostgreSQL.
KDevelop
KDevelop -- отличный редактор для HTML с PHP. Я, пожалуй, приобрету новую разработанную Zend интегрированную среду для PHP.
Gimp
Практически все картинки в ТИ были сделаны в этой отличной программе.

В.: Многие участники ТИ говорили мне, что временами сайт был, ну, не слишком стабилен. С какими проблемами Вы столкнулись во время разработки?

О.: И багов и капканов было предостаточно. При использовании настроек, которые делаются автоматически в большинстве дистрибутивов Linux, дела с масштабируемостью и в самой операционной системе, и в таких приложениях, как Apache и PostgreSQL, обстоят просто отвратительно. По моему мнению, Linux "из коробки" не обеспечивает стабильной платформы для основанного на базе данных веб-сайта (Apache + PHP + PHPLIB + PostgreSQL) со средней нагрузкой. Когда я говорю "из коробки", я имею в виду установку одного из популярных дистрибутивов на обычный PC с теми настройками, которые предлагают разработчики дистрибутива.

Вот несколько проблем, с которыми мне пришлось столкнуться и которые вызвали больше всего головной боли:

  • Максимальный размер разделяемой памяти, максимальное число открываемых файлов и файловых узлов [file nodes] в большинстве дистрибутивов Linux трогательно мал.
  • У Apache, PHP 4, PostgreSQL были и, возможно, остались проблемы с постоянными соединениями через pg_pconnect(). Либо PHP-парсер, либо сам Apache некорректно закрывают базу данных при завершении дочернего процесса http.
  • ReiserFS и PostgreSQL порождали а, возможно, и сейчас продолжают порождать проблемы при работе PostgreSQL с опцией -F (отмена fsync при каждой операции записи [no fsyncing on each write operation]). В результате - запорченная файловая система и/или база данных.
  • Я купил сетевую карту от NetGear. Tulip драйвер для этой карты жутко валится при увеличении нагрузки. С моей точки зрения, монолитный Tulip-драйвер вообще ошибка. Его кто-то переписывает и старые NIC'и внезапно перестают работать. А еще он по-разному работает с разными сетевыми картами.
  • Подсистема хранения данных [back-end storage manager] в PostgreSQL не освобождает удаленные строки динамически. Это резко снижает производительность при работе с часто используемыми таблицами. Документация по PostgreSQL гласит: "Периодический запуск VACUUM ускорит обработку пользовательских запросов в СУБД". Но документация не дает точного определения нужной "периодичности". Никто не знает сколько людей, как и я, ломали голову над перегрузкой своих сайтов лишь потому, что для PostgreSQL отсутствует пристойная документация по "рулению" базы данных для сильно загруженного сайта. И еще, в PostgreSQL число внутренних процессов ограничено до 32. Это ужасно мало даже для сайта со средним трафиком.

В.: А с какой радости бросать одну из наисовременнейших игрушек наподобие Quake III и запускать браузер для того, чтобы поиграть в ТИ? Насколько Ваша игра интерактивна, ведь процессору на компьютере игрока нет нужды прогонять и одного гигафлопа вычислений с плавающей точкой?

О.: Лишенная возможности действовать пустота HTML, это, конечно, такое место, в котором игроку меньше всего хотелось бы оказаться в момент, когда корабль противника готов превратить его в облако космической пыли. Но игра в веб-браузере имеет и ценные с моей точки зрения преимущества. Я просмотрел довольно много проектов сходной ориентации прежде чем начал писать ТИ. Многие из этих проектов увязли на середине дороги, во многих случаях разработчики после полугода работы над кодом сервера и клиента так и не получили в результате своих усилий того, что можно было бы назвать игрой. Мне же хотелось сразу начать писать игровой код. Многочасовое корпение над разработкой концепции масштабируемого многопользовательского игрового сервера а) выше моих сил и б) это скучно. И еще, мне хотелось, чтобы для игры был нужен лишь "наибольший общий делитель" клиента, т.е. браузер с поддержкой javascript. Вы можете подключиться и играть в ТИ из значительно большего числа мест, чем в случае игры, которая требует установить и сконфигурировать что-либо на клиенте. Что же касается хороших и плохих игр, то мне всегда нравились интеллектуальные игры, в которых приходится думать над каждым ходом, а не просто крутой frame rate.

В.: Игровая индустрия в целом очень слабо отреагировала на появление "Торговых Империй". Недавно, расспрашивая одного представителя этой индустрии о том, что он думает по поводу ТИ и не собирается ли его компания выйти на рынок с подобной игрой, мы получили в ответ лишь смесь молчания и отрицания каких-либо планируемых телодвижений в этом направлении. Был ли проявлен к ТИ какой-либо коммерческий интерес и какое будущее Вы видите у рынка "восставших из мертвых" игр в стиле BBS2HTML?

О.: А нет никакого коммерческого интереса. Я презираю баннерную рекламу. И, пока я управляю сайтом "Торговых Империй", ее там не будет. Это означает, что я, вероятно, никогда не смогу позволить покупку дополнительного канала для сайта ТИ (сейчас используется 768K DSL канал моего друга). Правда всегда есть шанс, что какая-нибудь богатая организация в погоне за званием спонсора ТИ предоставит дополнительный канал. Кстати о DSL: хотя это и прекрасно, что такая высокая пропускная способность стала доступной широкому кругу пользователей и по столь низкой цене, надежность DSL (в том виде, в котором это делается QWest в Колорадо Спрингс, США) мягко говоря, огорчает. Только такая компания, как QWEST, монопольно контролирующая весь рынок, может позволить предоставлять услугу такого паршивого качества.

В.: Насколько ТИ популярны?

О.: Зарегистрировалось более 7000 человек. У ТИ есть группа из пары сотен верных приверженцев, которые играют регулярно. Мне кажется, что игра несколько теряет в увлекательности из-за простоватой экономической и политической модели. Я хотел бы сделать их реалистичнее и, соответственно, увлекательнее. Ролевые возможности тоже ограничены пиратством и убийством противника.

Мне нравится заниматься сайтом ТИ потому, что это классно написать программу, которой часто пользуются и которая может породить много данных. Не знаю почему, но мне нравится когда много данных. База данных ТИ может дорасти до 100 и более мегабайт прежде чем я удаляю данные старых игр и игроков.

В.: А что игрокам нравится в ТИ больше всего?

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

В.: Как Вы планируете улучшить игру?

О.: Я считаю, что будущее веба за SVG (Scalable Vector Graphics). По сути, SVG -- это открытая реализация Flash. В потенциале SVG может быть даже более мощным инструментом, поскольку этот формат базируется на таких открытых стандартах, как XML и Javascript. К несчастью поддержка SVG в браузерах для Linux ограничена MathML-SVG вариантом Mozilla, которым практически невозможно пользоваться. А вот для Windows и Mac платформ имеются высококачественные плагины от Adobe. Но поскольку сейчас в моем настольном компьютере Linux, то необходимость работать с SVG ставит меня перед выбором.

Мне хочется сделать в ТИ несколько существенных расширений. Я хотел бы создать java-апплет, который мог бы показывать игровую информацию в реальном времени. Еще мне хотелось бы добавить корабли и планеты, управляемые компьютером. В перспективе управляемая программой Империя (выполняющая в ТИ роль полиции) будет играть в игре большую роль.

Еще мне хотелось бы устранить зависимость ТИ от PostrgreSQL. Я лично ничего против PostrgeSQL не имею, но люди спрашивают о возможности работы ТИ с MySQL. Сейчас большая часть обращений ТИ к базе данных идет через PHPLIB, так что убрать немногочисленные PostrgeSQL'измы из кода будет нетрудно.

В ТИ 2.0 я планирую несколько существенных изменений. Я хочу использовать гексагональные карты (сейчас секторы квадратные). Но для того, чтобы это работало правильно, нужна SVG. Я хочу разработать совершенно новую модель для торговли, в которой будут буквально сотни разных товаров и торговые соглашения на основе контрактов. Я хочу уйти от портов, как самостоятельных сущностей, сделав их просто свойствами планет. Я хочу заменить систему повышения рейтинга игрока, основанную на простом наборе очков, получаемых за "налет часов" такой системой, в которой будет учитываться его мастерство. Эти и другие идеи сейчас обсуждаются в списке пожеланий к ТИ на SourceForge.

В.: Некоторые жалуются на невысокое качество Вашего кода. Не поймите превратно, но я вынужден согласиться с ними. Перед этим интервью я заглянул в код обработчика событий, серверного процесса обрабатывающего важные для игры события, и заметил, что вся интеллектуальность поведения запихана в сетевой цикл [networking loop].

О.: Для начала учтите, что "Торговые Империи" писались так быстро, как я только мог. К вопросу я подходил очень просто: смотрю на скриншот "Звездного Купца" и побыстрее делаю то же самое. Кроме того, я совершенно сознательно внес в написание "Торговых Империй" элементы обучения. Разные части "Торговых Империй" используют C++, PHP и Python. У меня был небольшой опыт в C++, но ни с PHP, ни с Python я никогда не работал и ничего в них не понимал. Я хотел выучить оба эти языка. Некоторые части "Торговых Империй", такие как непоследовательное использование CSS и боевые возможности, с программистской точки зрения просто находятся на этапе проверки реализуемости. Когда я писал обработчик событий, я не слишком понимал что есть селективный сетевой цикл [selective networking loop]. А сегодня я забыл все, что узнал об этой концепции и сейчас я просто радуюсь тому, что тот или иной кусок кода продолжает работать.

В.: Ясно, код просто еще не отшлифован. Вы не думали использовать технику рекурсивного программирования для придания ему элегантности?

О.: Рекурсия при верном использовании страшно мощный инструмент программирования. Однако на самом деле я ею никогда не пользовался. Я думал о том, что участие в интервью для этой статьи (в известном смысле рекурсивный процесс) даст мне представление о рекурсии, и, если мне понравится, то я подумаю, стоит ли использовать ее в будущем.

 


Copyright © 2001, Bryan Brunton.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 62 of Linux Gazette, February 2001

Вернуться на главную страницу