Warhammer 40K: раб MySQL таблиц

Всем привет! Хочу поделиться своим опытом написания многопользовательской браузерной игры с наработки до рабочего проекта. С точки зрения непосредственно программирования, архитектуры и возникших проблем. Это мой первый опыт создания игры и, возможно, вы заметите множество недочетов или промахов, или посоветуете чего дельного. Но не суть важно — главное, я стараюсь довести дело до рабочего проекта и наверняка многим будет интересно узнать подробности.

Что представляет собой игра? Так сходу я не могу определить жанр, но, возможно, это сделаете вы? У меня было желание сделать игру по вселенной Warhammer 40000. Вряд ли бы я получил столько удовлетворения от написания другой игры. Игра называется Warhamik.

Расписывать архитектуру и логику работы приложения можно до бесконечности, поэтому придется видимо разделить на несколько частей статью, если к ней будет интерес. Кроме того, не вижу большого смысла приводить много кода, так как реализовать написанное мной можно на любом языке и платформе. Начнём с сервера.


Общая архитектура


Общая архитектура сайта выглядит как синхронная браузерная игра, написанная на PHP. К сожалению, я не успел ещё поставить Ajax, и поэтому иногда приходится перезагружать страницу вручную.
Как я сказал раннее, для создания игры я использовал наработки php и MySQL на сервере, html и javascript на клиенте. Flash не используется. Из html5 есть только области поверхности карты.

Из-за того, что у меня уже был костяк скрипта, мне оставалось дополнять его, чтобы в конечном итоге получилось, то что я представлял.


Карта


Первое что было сделано это карта на которой происходят почти все игровые действия: перемещение героя, сражения с ксеносами (мобами) или же PVP сражения.

Передвижение по карте происходит посредством синих стрелочек, которые видны выше. При нажатии на одну из кнопок иконка персонажа передвигается по оси 0Х 0У, о которой я расскажу позднее.
В игре находятся множество локаций, размер которых колеблется от совсем маленьких (20 на 20 клеток) до гигантских (150 на 150). Я видел игры, где карта сделана единой, бесконечной, и записи о клетках динамически вставлялись тогда, когда с клеткой производились какие-либо действия. Но меня такой подход немного пугал своей непредсказуемостью. Гораздо проще планировать игру, когда точно знаешь, что у тебя есть фиксированная карта. Можно запланировать расположение игроков и их количество, количество мобов, приблизительно оценить нагрузку. На самой большой карте получилось 22,500 клеток, подходящих для перемещения (секторов). По началу, я боялся, что игра будет тормозить, но из-за того, что я разделил карту на множество разных частей, нагрузка на сервер была уменьшена.
Вот пример таблицы локации :

  • id — это номер, под которым будет использоваться локация в других скриптах
  • name — это название локации 🙂
  • max_x — максимальное количество секторов на оси OX
  • max_y — максимальное количество секторов на оси ОУ
  • torg — количество торговцев на локации
  • text — это описание локации
  • type — тип локации (anarh — локация на которой возможны пвп бои; ganza — безопасная зона, где можно починить своё снаряжение и поторговаться с другими игроками; tonnel — локация-переход, где нет враждебных мобов)
  • opit — количество опыта необходимого для того, чтобы попасть на локацию
  • control — какой клан контролирует локацию

Здания


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

Здесь есть некоторое сходство с работой локаций. Самые проницательные могли уже догадаться, что значат строки в таблице, но я все же поясню самые непонятные.

  • x — это координата, на которой находится здание на оси ОХ
  • у — это координата, на которой находится здание на оси ОУ
  • type — тип здания, из-за цифры, которая будет стоять в этой строчке зависит, что будет выпадать из здания (предметы для Крафта, патроны, еда или какие-то интересные плюшки :з)
  • time_otkat — количество секунд, через какое время будет доступен новый предмет для сбора
  • time_z — время, через которое будет доступно нападение другого клана, с целью захвата и контроля, на здание
  • kom — количество предметов для сбора
  • predmetu — какой тип предмета доступен для сбора

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


Еще раз ссылочка на игру: http://warhamik.ru/

Всем спасибо!


Подписывайтесь на нас в Яндекс.Дзен

Возможно, Вам понравится:

guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x