Когда-то давным давно я немного поиграл в Galaxy Plus. Увы, лишившись доступа к интернету, мне не удалось доиграть до конца... Эта игра существует и сейчас, но на мой взгляд она морально устарела. Или у меня изменился темперамент и даже несколько ходов в сутки вряд ли ему соответствуют.
Сейчас я играю на battlespace.ru, но и там медительность некоторых процессов слегка раздражает. А убогий интерфейс раздражает неимоверно. Когда на дворе 11ый год 21ого века обновлять страницу чтобы получить отчет... А тем паче не уведомить игрока НЕМЕДЛЕННО что его атакуют... В то время как про AJAX даже глухой, если не слышал, то по крайней мере читал. Есть конечно же еще ogame, где с этим слегка получше - про AJAX они хоть и краем уха, но слышали и даже, возможно, читали. Но даже этого уже мало...
Ну а посмотрев видео о EVE вообще чувствуешь, что тебя обманули. Привезли на какое-то болото и сказали что это море. Купаешься и удивляешься - а почему это все едут куда-то мимо и дальше. А потом подымаешься на холм и прозреваешь - вот оно! Настоящее-то море...
И так обидно что эта замечательная игрушка на моей убунте не работает. Даже через wine. Даже через, черт его дери, VirtualBox! При этом нет там ничего такого сверхестественного, что категорически непозволяло бы сделать клиент под Linux, а вот поди ж ты. Не стали.
И из всего этого родилась мысль, что не боги ж горшки обжигают... и пусть вторую EVE мне не сделать, но уж galaxy, battlespace и ogame я переплюну. Не от того что я такой хороший программист, скорее от того что их создатели расслабились и почивают на лаврах, не желая шагать в ногу со временем.
Есть разумеется проблема - нифига я не художник и тем паче не дизайнер... Уж программную часть я осилю, а в этом конкретно слабоват. Но с другой стороны - слона ведь едят по кусочкам? До того чтобы эта проблема стала насущной еще ой как далеко.
Итак - я обладаю временем и некоторыми навыками в программировании. Задача - создать игру которую мне не стыдно будет выложить в общий доступ. Она должна быть кроссплатформенной (Lin,Win,Mac + Android), многопользовательской, с 3D графикой. Жанр - космическая стратегия MMORPG.
Первая часть задачи - выбор технологии. Задача не такая тривиальная, варианты есть.
Клиентская часть
- Flash
- JavaScript +WebGL
- Java+JOGL
Flash - первое, что буквально просится для такой игрушки. Однако с поддержкой Flash имеются определенные проблемы в Linux, еще большие проблемы для Mac и сомнительные перспективы для Android. В топку. Не стал даже пробовать
JavaScript +WebGL - чисто теоретически, это самая кроссплатформенная технология. Практически - чистой воды геморрой. Кроссплатформенность весьма условная.
Добавим к этому, что часть кода клиента будет дублировать код сервера. При этом если сервер я пишу на Java, а клиент на JavaScript, то тут вывих головного мозга практически обеспечен. Они слишком похожи, но в то же время достаточно отличаются. Убив месяц - я отложил свои наработки в сторону. Частично они пригодятся позже.
Остается Java+JOGL. Тут конечно тоже не все слава богу, но данный вариант представляется мне в настоящий момент наиболее приемлемым кандидатом. Первые тесты быстродействия не обнадеживают, но вряди это будет работать медленнее чем JavaScript.
Серверная часть
- GAE (Java)
- Выделенный сервер (Java)
- Комбинированный вариант: выделенный сервер (Java) + GAE
GAE как основной сервер отпадает практически сразу. Модель игрового мира будет практически полность пересчитываться каждую секунду. Следовательно хранится она должна в памяти. Дергать ее каждую секунду туда-сюда из базы данных - верх неэффектиности. Держать в памяти - возникает много вопросов, как синхронизировать между инстансами. Memcache - тоже под вопросом. Хотя и возможно. Настораживает максимальный объем 1Мб. Сейчас только пустая модель из 2000 звездных систем занимает около 200К. Когда модель будет сформирована полностью - навскидку я оцениваю объем около нескольких Мб. Реальный объем игровой модели будет расти по мере ее освоения игроками и будет измеряться десятками мб. Т.е. в memcache она не поместится при всем желании, запихать в БД можно, но оптимизация доступа будет адской головной болью - и как миниму один процесс должен перемалывать весь этот объем каждую секнду, при том только для того чтобы выяснить, что ничего делать не надо (ну или опять же - оптимизация, оптимизация и еще раз оптимизация). Короче на оптимзацию работы с моделью уйдет больше сил чем на разработку всего остального. Да ну его нафиг, это тупик.
Выделенный Java-сервер - наиболее приемлемый вариант, но придется где-то его хостить... На какое-то время можно делать это дома, свет отключают не чать и канал позволяет. Но спать при включенном компе я не могу - ночью эта зараза шумит слишком сильно. Значит это аренда VDS.
Смешанный вариант позволит сэкономить на VDS - основной трафик будет идти через GAE, игровой сервер фактически будет только пересчитывать модель. GAE выступает как сервер сообщений и кэширующий прокси. Т.е. игровому серверу до лампочки треп пользователей в чате ,на игровой процесс это не влияет - стало быть и нефиг ему все это через себя пропускать. Опять же - пересчитали модель, кинули изменения на GAE один раз - пусть дальше раскидывает хоть по 2ум тысячам юзеров. Трафик через игровой сервер уменьшается в 2000 раз, количество соединений тоже - вот и здорово. GAE справится, а недорогой VDS напрягать тысячами соединений - дело неблагодарное. Лучше память заказать побольше.
Пожалуй это наиболее приемлемый вариант, но начну я со второго (с прицелом на третий). Т.е. обработка сообщения пользователей сразу должна быть выделена в отдельный код, и логика клиента сервера должна быть отделена от логики обмена.
Комментариев нет:
Отправить комментарий