8 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как создать онлайн игру на php

Разработка браузерной стратегии

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

Что представляет собой игра? Видимо наиболее коротким описанием будет «клон Цивилизации» =). Но это не значит что у меня не хватило фантазии придумать что-то свое. Просто сделать «Цивилизацию» было моей мечтой. Вряд ли бы я получил столько удовлетворения от написания другой игры. Ну а фанаты Цивилизации наоборот считают, что моя игра совсем не похожа на Цивилизацию, разве что только с виду. Может это и к лучшему.

Статья в тему:  Как убрать задержку в доте

Игра называется The Fate of Nation http://fatenation.com

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

Для создания игры я использовал php и MySQL на сервере, html и javascript на клиенте. Flash не используется. Из html5 есть только видео на сайте и несколько областей с канвасом в самой игре — включая поверхность карты и мини-карту. Объем кода клиентской части в несколько раз превышает серверную часть, поэтому в основном буду рассказывать о клиентской разработке, но начнем с сервера.

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

Общая архитектура приложения выглядит как полностью асинхронное веб приложение на JavaScript. Перезагрузок страниц не предусмотрено. Обмен данными с сервером исключительно через Ajax и JSON. В JSON’е передаются только данные, без html кода. Html разметка загружается отдельно в начале загрузки приложения и процессится с данными через клиентский шаблонизатор по мере загрузки данных с сервера.

На сервере никаких фреймворков не использовал — хотя начинал писать с использованием Zend Framework, который выкосил потом за ненадобностью. Вместо него создал свою простую архитектуру отдаленно напоминающую контроллеры и экшены из ZendFramework.

Как видно из рисунка, на сервере одна точка входа — файл index.php. В процессе игры на сервер идут запросы вроде такого: /Unit/Move. И посылается JSON с параметрами, в данном случае это id юнита и координаты перемещения. Сервер перенаправляет этот запрос на index.php, в котором последовательно выполняется подключение к БД, проверка текущего пользователя и парсинг строки запроса для определения контроллера (Unit) и действия (Move). Если контроллер не задан то сервер выдает индексную страницу с кодом для построения клиентского приложения, но об этом позже. Если же контроллер задан то ищется файл этого контроллера, подключается его код и запускается обработка запросов этого контроллера, где соответственно ищется необходимый экшн, а в нем производится проверка входных данных и дергается бизнес логика.

Статья в тему:  Для чего нужны руны в доте 2

Для работы с БД написан специальный класс абстракции базы данных через который проходят все запросы к БД от бизнес логики и контроллеров, экранирование данных и прочие небольшие удобства. Собственно на сервере все довольно просто с архитектурой, а зона ответственности сервера заключается лишь в проверке входных данных и выдаче информации из БД. Все остальное делает клиент.

Теперь немного о самой игре.

Карта

Первое что было сделано это карта на которой происходят почти все игровые действия: строительство городов, улучшений (посевы, дороги), перемещение юнитов и исследование карты. Размер карты составил 1000 на 1000 клеток для каждой отдельная запись в БД. Я видел игры где карта сделана бесконечной и записи о клетках динамически вставлялись тогда, когда с клеткой производились какие-либо действия. Но меня такой подход немного пугал своей непредсказуемостью. Гораздо проще планировать игру, когда точно знаешь, что у тебя есть фиксированная карта. Можно запланировать расположение игроков их количество, количество городов и юнитов, приблизительно оценить нагрузку.

Итого получилось 1000 * 1000 = 1 000 000 записей в БД для карты. До этого я не работал с таким количеством записей и меня это насторожило. Думал что будет тормозить.

Я решил перехитрить MySql и разместить карту в 10-ти таблицах по 100 000 записей в каждой с надеждой, что станет быстрее работать. В итоге пришлось написать дурацкую логику по выборке клеток из нескольких таблиц сразу, а замеры показали что производительность только упала. Вернул все назад в 1-у таблицу.

Статья в тему:  Как накрутить рампаги в доте 2

  • x, y — это координаты клетки.
  • terrain — тип территории (луг, лес, гора. ).
  • resource — ресурс если он есть на клетке (глина, лошади).
  • wens9_code — название поля произошло от west-east-north… 9 — означает что изображение данной клетки зависит от территорий 8-ми рядом стоящих клеток и естественно от территории самой этой клетки — всего 9. Эту логику я спер с 3-ей цивилизации, насмотревшись их спрайтов территорий там где по 512 вариантов иконок для одной клетки!)) Потом у меня вскипел мозг разбирая зависимости по которым они выбирали иконки и я понял, какой это большой геморрой. =) И все только для одного: чтобы спрайты имели жесткие концы в виде ромбиков 128 на 64 пикселя. В конце концов мы решили использовать png24 с полупрозрачными краями накладывающиеся друг на друга и создающих в 10 раз лучший и разнообразный ландшафт, чем в описанном примере из Цив3. А выбираем иконки случайно независимо от соседних клеток. Это видно на скрине — сразу не скажешь где там одинаковые иконки полей. Вот горы по краям размыть забыли и они имеют четкие границы — что плохо смотрится.
  • starting_position — означает что в этой клетке появится игрок.

Конечно это не весь список полей, но здесь и далее для упрощения буду приводить только те поля, о которых рассказываю в статье.

Статья в тему:  Какой есть антидот против дисульфирама
Регионы

Клиент написан таким образом, что он не запрашивает с сервера определенные клетки, а запрашивает их партиями по 100 штук (10 на 10), которые я назвал регионами. То есть каждая клетка принадлежит какому-то региону и клиент запрашивает регионы и не конкретные клетки. Как только игрок перемещает карту так, что становится виден новый регион, мы посылаем запрос на сервер за этим регионом и граничащими с ним. Данные каждого загруженного регионакешируются на 30 секунд на клиенте. Это позволяет легко прокручивать карту без тормозов и лишних запросов на сервер и избавляет от задержки при появлении нового региона на карте — так как мы загружаем все соседние наперед.

Когда я делал эти «регионы» я не предполагал насколько они увеличат производительность. Оказалось выделить 100 клеток фильтруя по полю региона получается многократно быстрее чем фильтруя по координатам. Несмотря на то, что я объединил x и y координаты клетки в одно поле location = 1000*x + y. Сделал это прежде всего для удобства — чтобы легче было достать одну клетку.

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

Статья в тему:  Как играть в свою игру с друзьями онлайн

Таким образом получилась такая система: клиент запрашивает регионы — сервер достает из БД карту и все сущности на ней, быстро фильтруя по регионам — клиент отрисовывает это все в браузере на канвасе. У каждой сущности есть такие поля как время до окончания битвы или время до перемещения в следующую клетку — в этом случае по истечении этих таймаутов мы обновляем локально только то что требуется. Например если мы исследуем карту то догружаем только что открытые клетки и не более. Если вражеский юнит переместился — догружаем следующую точку его перемещения.

Исследование карты

Однако меня терзал еще один вопрос. Мне позарез хотелось сделать исследование карты — чтобы изначально она была не разведана и нужно было ходить по ней чтобы что-то увидеть.

Такого я не видел еще в браузерных играх (собственно как и юнитов передвигающихся по карте, а не по воздуху). Я принялся за расчеты. Стартовая позиция игрока расположена внутри региона. То есть максимальное количество игроков 10 000 как и регионов. Каждый игрок может разведать всю карту. Итого 10 000 * 1 000 000 = 10 миллиардов записей может быть в таблице пермишенов на клетки! Таблица карты показалась на фоне этого детским лепетом =). Конечно эта цифра завышена. Вряд ли кому-то удастся разведать всю карту — она очень большая. Но десятки и сотни миллионов записей в таблице пермишенов точно могут быть в конце игры.

Статья в тему:  От чего зависит ммр в доте 2 2018

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

Провести нагрузочное тестирование чтобы определить на каком этапе сервер начнет тормозить не удалось еще. Максимум что я видел это чуть более 2-ух миллионов записей в таблице пермишенов.

Перемещение юнитов

Чтобы сделать перемещение юнитов пришлось тоже подумать и переписать логику несколько раз.
Первое что нам нужно, это точно отслеживать время открытия новых клеток чтобы можно было отфильтровывать клетки, юниты и города по этим данным. Сразу напрашивается использовать таблицу пермишенов на карту, но со спец-полем — означающим время когда эта запись станет активной. Так и было сделано. Клиент отправляет id юнита, и новую координату дислокации. Сервер просчитывает текущую позицию юнита, координаты клеток по которым он будет перемещаться, и в зависимости от территории этих клеток, типа юнита и других параметров высчитывает время когда этот юнит будет в каждой клетке. Затем дополнительно просчитываются таким же образом соседние клетки в зависимости от радиуса обзора юнита.

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

Статья в тему:  Что такое бабочка в доте

Далее записи пермишенов, которые говорят о перемещении юнита мы помечаем еще 2 полями: id юнита и типом записи: ‘обзорные клетки‘ или ‘клетки по которым идет юнит‘. Первое поле нужно чтобы при остановке юнита или смене пункта назначения можно было их удалить, второе нужно чтобы при выборке юнита записать ему времена смены дислокации.

Затем коллеги по работе мне подсказали еще один довольно очевидный момент: ввести поле означающее время выхода юнита с данной клетки. Я назвал его out_timestamp. Это позволило легко выбирать текущие позиции всех юнитов и соответственно фильтровать вражеских юнитов по видимым нами клеткам.

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

Да, кстати, часто после различных постов об игре народ начинает хвалить графику, а не геймплей. Так что скажу сразу — я ее не рисовал. Это все наш художник-дизайнер Максим Кудрицкий.

P. S. Спасибо TheShock за помощь и поддержку в написании топика! =)

Как создать онлайн игру на php

Вот такие не хитрые вещи мы разберем. Передача от сервера (php) клиенту flash и обратно.
Напомню — главная цель — php и flash, а игра лишь для примера.
Таблица рекордов будет полезна для любых flash игр, так же вы сможете понять сам механизм взаимодействия flash и php.
Мини-вступление
Разрабатывая игру на flash, вы столкнетесь с проблемой передачи данных от клиента к серверу. Я предлагаю вам вполне стандартное решение проблемы, читайте статью и все станет понятно

Статья в тему:  Drakensang как идентифицировать вещи

Приступаем. Создаем Новый ActionScript3.0 документ в вашем Flash-редакторе.
Шаг I. Рисуем компоненты
Для примера создадим простую игру, где нужно кликать по квадратику.
Первое. Создаем «тексты»: score текст со значением 0, пустой текст priem. Остальные тексты не обязательны.
Второе. Создаем компонент TextInput с названием login (догадались? сюда будем вводить логин)
Третье. Рисуем квадратик, конвертируем в муви-клип(символ) с названием ene.
Четвертое. Создаем компонент button с названием кнопка.

Смотрим рисунок, сверяем.

Шаг II. Пишем код для игры.
Код очень прост и создает лишь перемещение квадрата и увеличение очков по клику.
Этот код разбирать не будем, все его составляющие прокомментированы.

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
/* По таймеру перс перемещается на рандомное расстояние */
// первая переменная задает время таймера, вторая в миллисекундах продолжительность интервала
var sc = 0; //очки: 0
var fl_SecondsToCountDown:Number = 100000; // пусть это число для примера. 100000 секунд перс будет перемещаться на рандомное расстояние

var fl_CountDownTimerInstance:Timer = new Timer(1000, fl_SecondsToCountDown);
fl_CountDownTimerInstance.addEventListener(TimerEvent.TIMER, fl_CountDownTimerHandler);
fl_CountDownTimerInstance.start();

function fl_CountDownTimerHandler(event:TimerEvent):void
<
//перемещение рандомное
var massiv_Array= [0,5,10,15,20];
var random_int= massiv[int(Math.random()*massiv.length)];

var massiv2_Array= [0,5,10,15,20];
var random2_int= massiv2[int(Math.random()*massiv2.length)];

ene.x += random;
ene.x -= random2;
ene.y += random;
ene.y -= random2;
fl_SecondsToCountDown—; //увеличиваем таймер
>

/* По клику мыши добавляем очки */

function fl_MouseClickHandler(event:MouseEvent):void
<
//добавляем очки
sc++;
score.text = sc;
>

Шаг III. Пишем код для flash передача/возвращение видоизмененных данных на сервер.
Сначала посмотрите код, чтобы вникнуть. Код добавить туда же, куда и игровой листинг (Слой1 например).

Статья в тему:  Как оплатить онлайн игры

Код я прокомментировал, но расскажу еще раз.
Во flash есть класс URLVariables для приема и отправки внешних данных. Условно говоря у нас на сервере в одной папке лежат test.swf и test.txt.
Для получения доступа к текстовому файлу(например, чтобы прочитать его данные и изменить) нужно использовать URLVariables.
То же самое и с php файлами. Однако тут больше возможностей. Мы можем отправить переменную из флеш, видоизменить в php (например было a = 0;, php сделал a = 100;)
данные и вернуть флешу измененную переменную.

У нас в скрипте мы отправляем по клику (на кнопку)в php две переменных: score и login. Там Эти переменные должны будут занестись в Mysql базу данных, php скрипт сделает выборку из бд и отправит всю таблицу рекордов прямо во flash!
Далее выводим priem.text = loader.data //подзагружаем ее в текст

Шаг IV. Php обработка и запись в Mysql.
Первое. Создаем таблицу в вашей бд game.
Создаем 3 поля:

(как на картинке id [not null, auto_increment, первичный ключ, int(11)] score [varchar(11) not null, по умолчанию ноль] login [text])
Теперь у нас есть база данных — место, куда будут записаны данные (таблица рекордов)
Php код я решил написать в форме класса, но это не суть важно.
Самое главное запомните: принимаются данные с помощью $_POST[‘имя_отправляемой_переменной’];

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
score = isset($_POST[‘score’]) ? $_POST[‘score’] : null;
$this->login = isset($_POST[‘login’]) ? $_POST[‘login’] : null;
>

Статья в тему:  Почему не работают гайды в доте 2

public function Mysql ()
<
//функция подключения к бд
$lnk = mysql_connect(‘localhost’, ‘_test’, ‘123456’)
or die (‘Not connected : ‘ . mysql_error()); //замените _test на логин,а 123456 на пароль.

// сделать текущей базой данных
mysql_select_db(‘test’, $lnk) or die (‘Can’t use db : ‘ . mysql_error()); //замените test на вашу бд

public function Insert ()
<
//функция записи в бд
if ($this->score != null && $this->login != null)
<
$this->Mysql();
$ins = mysql_query(«INSERT into `game` (login,score) VALUES (‘$this->login’,’$this->score’)»);
>
>

public function Select ()
<
//функция выборки данных
$this->Mysql();
$q = mysql_query(«SELECT * FROM `game`»);
while ($arr = mysql_fetch_assoc($q))
<
echo «Login $arr[login] Score $arr[score]
«; //вывод на экран через цикл
>
>

function __construct()
<
//get — получение переменных mysql — подключение к бд, insert — запись в бд, select — извлечение
//метод _construct удобен, когда не нужно объявлять 10 раз функции через $object.
$this->Get();
$this->Mysql();
$this->Insert();
$this->Select();
>

Создание браузерной игры. Как заработать миллион?

К браузерным играм не привыкли относиться всерьез, но на самом деле – это неплохой бизнес для небольшой команды друзей, у которых нет денег, но есть светлые мысли. А если еще и деньги есть, то тогда все значительно упрощается.

На самом деле создать браузерную онлайн игру может любой, у кого есть желание учиться, но не думайте, что вас ждет легкая прогулка. Даже если вы мастер на все руки (программист и дизайнер в одном флаконе), то придется потратить уйму времени. Если же вы не владеете ни кодом, ни карандашом, то затраты будут финансовыми.

Статья в тему:  Как убрать задержку в доте

Как создать браузерную игру ничего не изучая?

Ответ – никак. Для начала нужно будет выучить HTML – язык разметки, который работает в связке с каскадной таблицей стилей – CSS. Эти языки располагают текст и изображения на странице, собирая картинку из множества фрагментов. Поскольку вы намерены сделать именно браузерную игру, то ей обязательно понадобится сайт, желательно красивый и функциональный. Поэтому не обойтись без JavaScript – самого простого способа визуализировать вашу игру на стороне геймера. Этот язык позволяет менять местами элементы страницы без ее перезагрузки. По сути, JavaScript управляет элементами CSS и HTML в реальном времени.

Для создания браузерной игры придется выучить HTML, CSS, PHP и JavaScript, так что бессонные ночи вам гарантированы

Язык программирования PHP нужен для создания движка игры. Он используется на сервере для обработки данных, поступающих от разных геймеров. Это – ядро, которое приводит в действие все внутренние механизмы.

Я не хочу ничего учить, но у меня есть деньги

Поздравляем, вы избежали многих проблем. И тут же получили новые. Чтобы сделать браузерную игру хорошего качества (в плохую никто играть не будет) нужно иметь хорошую команду разработчиков, а хорошие спецы стоят денег. Если брать по минимуму, то вам необходимы:

  • Программист – 2 штуки
  • Дизайнер и художник – 2 штуки
  • Гейм-дизайнер – 1 штука
  • Комьюнити-менеджер – 1 штука
  • Гейм-мастер – 1 штука.
Статья в тему:  Drakensang как идентифицировать вещи

Если у вас нет личных знакомств, то придется обращаться к аутсорсингу. Обычно такие ребята трутся на биржах фрилансеров, самой популярной их которых является www.fl.ru/.

Всех необходимых работников можно найти на биржах фрилансеров

Правда, в этом случае нужно быть очень осторожным, поскольку фрилансеры привыкли регулярно срывать сроки. Как говорят опытные руководители, можно бесконечно смотреть на 3 вещи: как течет память, как горит дедлайн и как не работает фрилансер.

Во сколько обойдется разработка?

Во столько, сколько у вас есть денег. Вот здесь приведены примерные выкладки и структура расходов на создание среднестатистической браузерки. Итоговая сумма – 25 миллионов рублей. Однако не стоит пугаться этой цифры. В статье автор посчитал расходы на разработку по максимуму, так что при желании эту сумму модно уменьшить в разы и даже десятки раз. Или увеличить, если ваш папа – прокурор. Безусловно, такие проекты, как Drakensang Online или City of Steam требуют сумм как минимум с шестью нулями, но простую табличную браузерку можно сделать за пару десятков тысяч рублей.

В конце концов, вы всегда можете обратиться к краудфандингу. Пути Кикстартера неисповедимы, взлететь там может любой проект. Главное правильно подать блюдо.

Этапы разработки

Создание браузерной игры с нуля можно разделить на несколько этапов:

1. Поиск идеи

Поскольку у вас вряд ли есть 25 миллионов рублей и вы вряд ли являетесь гением в программировании и дизайне, единственное, чем вы можете зацепить пользователя, это необычный сеттинг. Даже пресловутая кампания из эльфов, орков, людей и гномов способна увлечь клиента, если погрузить их в необычную среду или заставить делать странные вещи. Например, игра Ботва Онлайн была написана «по приколу» четырьмя людьми в свободное от работы время, но благодаря своему необычному сеттингу быстро стала успешным бизнес проектом.

Статья в тему:  Почему не работают гайды в доте 2

2. Разработка сюжета

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

3. Создание игры

Даже если вы выучили вдоль и поперек JavaScript и CSS, вы все еще ничего не знаете о том, как создать браузерную игру. Это примерно то же самое, как если бы вы выучили теорию плавания, ни разу не побывав в бассейне. Лучший выход в этом случае – воспользоваться самоучителем. Вот здесь можно многое узнать о разработке игр, причем не только браузерных.

Скорее всего, ваша первая браузерка будет выглядеть так. Это – легендарный Бойцовский Клуб

4. Продвижение проекта

Последний этап, на котором дело в свои руки берут комьюнити-менеджер и специалист по маркетингу (если таковой имеется). В крупных компаниях на долю рекламы уходит примерно 60% бюджета, поэтому на эту статью денег лучше не жалеть. Если же ваши финансы поют романсы, то тогда не остается ничего другого, как самому перепахивать игровые форумы и завлекать геймеров всеми возможными способами.

Как создать браузерную игру с помощью конструктора

Оказывается, ушлые программисты уже давно создали кучу конструкторов MMO, которые могут помочь новичку создать браузерную онлайн игру бесплатно. Это не значит, что вы можете успокоиться и удалить все закладки по программированию, но с помощью конструктора можно здорово ускорить процесс.

Статья в тему:  Что такое бабочка в доте

Популярный игровой конструктор Construct 2

Большой популярностью пользуется MMO Constructor – отечественный продукт, в котором можно создать все элементы полноценной браузерной RPG. Взамен авторы требуют совсем ничего – 50% от прибыли проекта. Разобраться в конструкторе непросто, но добрые люди уже написали гайды. Также чтобы создать браузерную игру, можно воспользоваться такими программами, как Construct Classic, Eclipse, FPS Creator.

Больше информации о конструкторах можно узнать на форуме Gcup, где тусуются все: и продвинутые геймдевы, и зеленые новички.

Так что там насчет миллиона?

Любая, даже мобильная игра должна приносить прибыль. Иначе нет никакого смысла тратить свое и чужое время. Дабы сделать свой проект финансово успешным, нужно слушать, что говорят опытные разработчики и делать то же самое:

  • Не жадничайте! Более 80% игроков вообще не платят, либо платят копейки. Однако они создают массовку, на которую подтягивается крупная рыба. Сконцентрируйтесь на ней. Остальным дайте возможность резвиться бесплатно.
  • Постарайтесь сделать так, чтобы донаторы не сильно выделялись из общей массы, иначе масса уйдет, оставив вас без донаторов и без денег. В общем, бряцайте мускулами аккуратно.
  • Лучше всего тратят деньги те, кто не хочет тратить свое время, поэтому монетизируйте наиболее рутинные операции. Не разменивайтесь по мелочам.
  • Уроки истории создания игр показывают, то онлайн-проект должен быть бесконечным. Если у геймера появится чувство, что ему нечего делать – он уйдет, а туда, где нет онлайна, новый геймер не придет никогда.
Статья в тему:  От чего зависит ммр в доте 2 2018

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

Вебсокеты на PHP. Часть 3. От чата до игры: Battle City

В предыдущих 2-х частях (Делаем вебсокеты на PHP с нуля и Межпроцессное взаимодействие) в качестве демонстрации я применял чаты, но в этой статье на примере онлайн-игры я покажу, что сфера использования вебсокетов может быть значительно шире.

Как традиционно, в конце статьи ссылки на демонстрационную игру и начальный код на гитхабе.

  • Помощь вебсокетов браузерами
  • Разработка онлайн-игры
  • Благодарности
  • Демка и начальный код

Помощь вебсокетов браузерами

Некоторые считают, что вебсокеты ещё рано применять, потому что они поддерживаются ещё не всеми браузерами. Следственно, если их применять, то только коллективно с альтернативными транспортами: Adobe® Flash® Socket, AJAX long polling, AJAX multipart streaming, Forever Iframe, JSONP Polling.

Википедия нам подсказывает, какие браузеры поддерживают вебсокеты:

Google Chrome (начиная с версии 4.0.249.0);
Apple Safari (начиная с версии 5.0.7533.16);
Mozilla Firefox (начиная с версии 4);
Opera (начиная с версии 10.70 9067);
Internet Explorer (начиная с версии 10);

Как мы видим, самым слабым звеном является Internet Explorer с версиями поменьше десятой. Согласно статистике liveinternet, для России — Internet Explorer с версиями 9, 8, 7 и 6 имеет доли 1.4, 1.7, 0.5 и 0.1 процентов соответственно. Суммарно получается 3.7%. Если добавить к этой цифре ещё пользователей с устаревшими версиями других браузеров, то итоговая оценка может немножко увеличиться, но, не думаю, что она станет огромнее 4%.
Базируясь на этом, всякий должен решить для себя сам — необходимо ли поддерживать зоопарк альтернативных транспортов либо позабыть про этих пользователей и жить дальше.
честности ради хочу сказать, что за рубежом доля Internet Explorer огромнее, и обстановка с помощью вебсокетов там соответствующая. Согласно статистике с сайта w3schools Internet Explorer с версиями 9, 8, 7 и 6 имеет доли 2.3, 3.1, 0.4 и 0.1 процентов соответственно, что в сумме составляет 5.9%

Статья в тему:  Для чего нужны руны в доте 2

Разработка онлайн-игры

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

все игроки обязаны находиться на одной карте и иметь вероятность взаимодействовать с любым иным игроком

Я длинно гуглил на эту тему, пока не наткнулся на эту страницу в «тостере», где TravisBickle, разработчик phpdaemon, умоляет у сообщества подсказать идею примитивный игры, которая бы продемонстрировала работу вебсокетов. Невзирая на то, что некоторые результаты были довольно увлекательными, этому вопросу теснее примерно 3 года…
Из всех предложений я предпочел «танчики», но решил сделать упрощённую версию того что предлагали, а не полновесную игру, Дабы процесс разработки не затягивался и демка всё-таки увидела свет, а не осталась в чертогах моего интеллекта.
Взяв код чата из предыдущей статьи, я дописал немножко клиентскую часть, применяя:

  • canvas и способ объекта context : drawImage для отрисовки изображения танка, fillRect — для закрашивания прямоугольников и fillText для надписей (сразу скажу, что я с ними прежде никогда не работал)
  • addEventListener для обработки нажатий клавиш «вверх», «вниз», «налево», «вправо» и «пробел» (а также «w», «s», «a», «d»)

На серверной стороне я немножко расширил обработчик сообщений от заказчика:

  • всякий танк — это массив состоящий из координат, имени и числа «жизней»
  • при приходе от клиен
Статья в тему:  Как накрутить рампаги в доте 2

Сложно ли создать онлайн игру? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.

Закрыт 3 года назад .

Сложно ли создать онлайн игру, например, Гонки?

3 ответа 3

Достаточно многое зависит от Ваших возможностей. Ведь на вопрос: «Сложно ли построить дом?» ответить однозначно нельзя. Вопрос оценивается от масштабов. Это может быть как будка, так и вила высшего класса.

Эта тема также относится к Вашему вопросу. Игры могут быть двухмерные, так и трехмерные с открытым миром и высококачественной графикой. А могут быть что-то вроде тетриса. Нельзя забывать о физике и режимах игры в «онлайн». Даже тот же онлайн, можно трактовать по разному. Можно сделать игры на время ( гонка по одному), а можно сделать режим реального времени (чтобы ездить на трассе с другими игроками). Но тут вопрос идет в сторону сети(пинг, проблемы с интернетом, все это нужно будет продумывать. )

В целом, основным фактором является уровень Ваших знаний или команды, наличия времени и желание

Броузерные онлайн игры. Это обычно игры, типо текстовых, но есть и другие, стратегии там, и так далее. Тут преимущественно веб языки, плюс Flash, но можно и java-апплеты применить (хоть и технологии разные,возможно многие думают,что они умирают,но писать на них можно)

Это клиентские онлайн игры (т.е ,что-то скачивать,а потом играть). Тут господствуют C++/Java,и другие подобные игры,хотя C++,думаю тут будет лучше)

Статья в тему:  Как оплатить онлайн игры

Плюс не забудьте, что в онлайне, чтобы играть нужны сервера, и подобие онлайн сервиса, у вас же будут игроки регистрироваться, значит база нужна, чтобы игра с ней соединялась, для выставления статистики и так даллее. Вот вам это на обдумывание, правильно многие советую, не пишите сразу 3D шутер, лучше напишите сначала текстовую игру консольную, а там дальше пойдет. Удачи)

Я свое время занимался созданием браузерной мобильной игры. Ушло у меня на нее полгода (было реализовано регистрация, авторизация, обучение, режим карьеры, покупка/продажа недвижимости, автомобилей, тюнинг, детали, был реализован открытый мир с возможностью встретить на дороге другого игрока (и это все в пределах wap браузерной игры), был режим драга даже, с переключением передач, но работал он откровенно плохо т.к. постоянно обновлять страницу что бы узнать когда переключать передачу, были персонажи и диалоги, гонки с ботами и чемпионаты, было достаточно много по тем меркам народу, но этим всем занимался я сам, было крайне трудно, да и это скорее хобби было, а не серьезный проект, но вот что хочу сказать, создавать легко, если у тебя есть идея, цель, знания и настрой, но в итоге это все канет в небытье в любом случае, ибо тебе надоест или ты увидишь, что это бесперспективно, по этому или работа командой или забей на это дело вообще. К слову, на проект я подзабил и с хостинга потом удалили, а исходники сгорели вместе с жестким диском, остались только воспоминания.. Вот такие дела

Статья в тему:  Какой есть антидот против дисульфирама

Всё ещё ищете ответ? Посмотрите другие вопросы с метками php html css разработка-игр или задайте свой вопрос.

Похожие

  • Блог
  • Facebook
  • Твиттер
  • LinkedIn
  • Instagram

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.1.40358

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector