Основы браузерной онлайн игры, или что нужно, чтобы начать?
Я часто встречаю в сети предложения в виде «Группа энтузиастов создает онлайн игру! Присоединяйся!». В один прекрасный момент, когда я не был занят другими проектами, я решил «присоединиться». Сразу же, что бросилось в глаза, это то, что большинство из «энтузиастов» не то, что не представляют, КАК «создается» онлайн игра, а даже писать грамотно не умеют. Ну да опустим эти подробности. Из нескольких человек, составляющих группу энтузиастов, я был, наверное, единственным, кто хоть примерно представлял что это, и как делается. Итак, я решил поделиться своими знаниями на этот счет, чтобы в будущем «энтузисаты» могли найти данную статью и решить — а нужно ли оно им вообще?
Начало
Итак, что же нам нужно для начала? А для начала нам нужна сама идея игры. Опустим этот момент, так как к технической стороне он не имеет отношения. Представим, что идея у нас уже есть, продумана и готова к осуществлению. После этого нам понадобится человек, умеющий хорошо владеть фотошопом или гимпом, чтобы нарисовать дизайн сайта будущей игры. Как только такой человек будет найден, будут нарисованы дизайн сайта и его наполнение, вот тут-то и нужно будет найти веб-пограммиста, который напишет сам сайт. Но сначала нужно решить одну вещь — на чем же будет наша игра? Для примера предположим, что игра будет сделана на популярном сейчас Adobe Flash, как, например, Легенда, наследие драконов.
В таком случае нам нужен будет еще и человек, хорошо владеющий инструментами создания флэш-контента. Итак, дизайн разработан, флэшки нарисованы, приступаем к разработке сайта игры.
Сайт
Что же представляет собой наша игра, когда она сделана? Правильно сайт с флэш-контентом, ведь она браузерная. Итак, снимаем хостинг, регистрируем красивое доменное имя, и отдаем дело в руки веб-программиста. Он размещает на странице все флэш-элементы в соответствии с дизайном, ну а дальше остается решить, как же все это будет взаимодействовать с пользователем и с сервером?
Взаимодействие между собой элементов игры
Канал интернета у пользователей может быть разный, будем исходить из того, что он маленький. Да и сервер загружать большими объемами информации и расчетами как-то нехорошо, иначе тут понадобится уже кластер, а не 1 сервер.
Поскольку передавать нужно лишь небольшие объемы данных, можно сделать вывод, что расчеты урона в боях, рандомность выпадения денег из мобов и прочее будет просчитываться на клиентской машине, а на сервер только лишь передаваться результаты. Например, пользователь вступил в бой с мобом. Все расчеты урона и прочее целесообразно вести на клиентской машине, передавая на сервер в самом конце лишь информацию об общем уроне и прочем, что нужно для статистики. С боями с другими персонажами посложнее.
Например, пользователь вступает в бой с другим пользователем, нужно рассчитать урон от удара на клиентской машине, передать его на сервер, который передаст его второму пользователю, и у обоих с небольшой задержкой относительно друг друга выскочат на экране циферки, обозначающие урон. После завершения боя нужно передать на сервер информацию о том, сколько урона нанес пользователь в целом, и прочее, как в первом варианте. В обоих случаях сервер лишь передаточное звено, а не тот элемент системы, на котором ведутся расчеты, т.е. нагрузка на него минимальна.
Клиент игры
Написание клиента для игры тоже очень важный момент.
По сути, клиент игры представляет собой всего лишь браузер с сохраненный кэшем, благодаря чему не придется постоянно качать неопределенные объемы флэш-контента. Но есть и еще один момент в клиента, который нужно учесть. В него можно запихать некоторые «плюшки», которые могут упростить жизнь простому игроку, автоматизировав некоторые действия, такие как реклама своих услуг в чате, автоматическая ходилка по локациям и т.д.
Как это реализовать? Да очень просто. Для этого к предыдущему пункту добавляется еще и написание серверного API игры, общаться с которым и будет клиент. Итак, клиент игры будет выглядеть так: окно с основным браузером, кэш которого сохранен на винчестере, в нем происходит сама игры. А также должен быть скрытый браузер, который как раз таки и будет общаться с API. Например, для того, чтобы отправить в чат сообщение с рекламой достаточно послать вторым браузером API запрос примерно такого вида:
mygame.org.ru/chat.php?type_chat="2"message="Покупайте мою траву!"
Сервер получит запрос, и в указанном чате появится ваше сообщение. Происходить это будет в скрытом режиме, пользователь не будет принимать участия, кроме как настройки времени запросов и частоты сообщений.
Выводы
Итак, каков же вывод из данной статьи? Вторым пунктом будет флэшер, который сделает грубо говоря все элементы игры, такие как бои, локации и т.д.
- Для начала нужно придумать сюжет игры
- Найти дизайнера, который сделает дизайн сайта в целом, а так же поможет нарисовать картинки для флэшэк
- Найти флэшера, который возьмется нарисовать флэшки, и заставит их обмениваться инфой с сервером
- Найти веб-программиста, который соберет все это воедино, свяжет с БД и заставит работать как надо
- Найти прикладного программиста, который поможет веб-программисту с разработкой API, а так же написет клиент, общающийся с этим API
- Распиарить игру, чтобы плоды всех этих действий не пошли коту под хвост
Конечно, все это написано поверхностно, но, надеюсь, даст хоть небольшое представление «энтузиастам» о том, что же им нужно, и как это сделать. Вопросов безопасности я пока не касался, так как сам особо не задумывался на этот счет.