49

Как школьник веб игру делает #1

Успешно слив олимпиады, можно и проектом позаниматься


Привет!

Продолжаю рассказывать о своем школьном проекте по информатике - веб игре

Решил рассказать о том, как дошел до сегодняшнего момента.

Навыки

К началу создания игры у меня было общее представление о создании игр (делал простенький платформер), знание C++, SFML, поэтому хотелось найти похожие инструменты.

Изначально думал делать на unity, но погуглив о том, как другие люди делают так называемые .io игры, пришел к выводу, что на unity никто не делает .io-шки и следует писать на javascript


Структура

Тот же гугл рассказал мне, что для клиента обычно берут pixijs для графики и socket.io для общения с сервером.

Тогда я еще ничего не понимал и не знал, так что взял Node.js для сервера, так как "клиент на js - пусть и сервер на js", хотя можно было взять любой другой (что-нибудь на python, например, хотя я его тоже не знаю). Сейчас я понимаю, что есть web server, а есть игровой сервер, и последнее может быть написано на чем угодно, хоть на C++ с вводом-выводом в файлик, но тогда, по тому же принципу, я решил, что незачем городить огороды и писал все на Node


Если вы решитесь сделать что-то подобное, то выделяйте игровой сервер в отдельный модуль, и запускайте его параллельным процессом, так как в Node это единственный способ распараллеливания.

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

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


Библиотеки

Спустя мгновение, я уже накачал себе библиотек js и на клиент, и на сервер:

На клиенте, кроме вышеупомянутых pixijs и socket.io, добавились utility библиотеки: js.cookie для кук, jquery и bootstrap для дизайна.

На сервере появились: express для запуска http сервера двумя строчками кода, jsonwebtoken для защиты (по сути, я использую токены для идентификации пользователя, для любого игрового действия клиент должен передать токен, и именно по нему я нахожу игровой объект на сервере, а не по socket.id), taffydb для онлайн базы пользователей, csv для парсинга таблицы с игровыми константами и sanitize-html для обработки корректности никнейма.


Графика

Т.к. рисовать я никогда не умел, практически вся графика взята из открытых источников:

opengameart

game-icons

itch.io

GUI на сайте сделал мой одноклассник, большое ему за это спасибо.


Процесс

Сначала моей задачей было вообще разобраться, как работает web, эти все "странные" токены и т.д.. Поэтому я сделал простейший клиент и сервер, на котором можно было передвигать свой спрайт игрока по полю (просто летать по экрану), но при этом с синхронизацией всех игроков.

Потом я начал делать собственно платформер - писал физику (сколько с ней времени провел - не описать), генерацию мира, разбиение его на чанки; комнаты и т.д.

В итоге сделал эдакий клон террарии, в котором люди (мои одноклассники)... рисовали разные (чаще - неприличные) надписи

Ну, они хотя бы играли в нее, что уже неплохо.

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


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

(ниже changelog, который я скинул своим одноклассникам)

Update 0.1.0

1) Сторона вируса:

вы - система блоков

можно перемещаться только так, чтобы в центре был блок вируса (wasd)

главный блок - ядро, начинаете только с него, при уничтожении - game over

можете ставить и ломать блоки только вокруг себя

2) Новый (вроде не лагающий) фон

3) Фикс зума - теперь игра должна быть одинакового размера везде (но это не точно)

4) Небольшая неуязвимость при получении урона за людей

5) В комнате 1 карта сохраняется между сессиями - все, что вы там наделали останется после перезапуска комнаты (в остальных как раньше - ресет)

6) Обновления GUI


Немного скриншотов:

Сторона вируса: (красным обведено ядро)

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

Но потыкать-поиграть вы все равно можете, но сервер может (и будет) падать и лагать, все ошибки я отслеживаю и стараюсь исправлять, так же вы можете писать о них мне в комментариях.


Ссылка на игру: infection.tk

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Автор поста оценил этот комментарий
И зачем выкладывать недоделанное непоймичто?
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Во первых, потому что людям интересно #comment_102385154

Во вторых, я и не говорю, что это доделанная игра, можно идти и играть

Это что-то типа дневника разработки, и, насколько я понял, это сообщество для такого и создано

показать ответы
1
Автор поста оценил этот комментарий

Проект интересный, но я не понимаю сути этой игры

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Сейчас я делал больше движок игры, а не саму игру.

Идея самой игры очень странная, но я хочу это попробовать:

RTS-платформер.

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

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

За вирус игроку предлагается этакая "фигня" в недрах земли - как какое-нибудь заражение в warcraft, starcraft, terraria. С помощью захвата земли, постройки различных улучшений и тактической игры сторона вируса должна убить людей


Сейчас не реализованы все эти улучшения, и пока есть только базовая смерть: игрок может умереть, если его здоровье опустится ниже 0 (== он станет очень красным), а вирус может умереть, если его ядро будет уничтожено.


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

показать ответы
1
Автор поста оценил этот комментарий

Есть документация/уроки на русском по pixijs?
сам начал разбираться в pointJS, ибо разрабатывает его русский парень и частенько отвечает на сообщения, что не скажешь о pixiJS, хотя у них двиг вроде как обширней и мощней.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Скорее всего нет

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

А для вопросов (тоже на английском) есть

http://www.html5gamedevs.com/forum/15-pixijs/

ну и естественно https://stackoverflow.com/

1
Автор поста оценил этот комментарий

UPD.

Вроде как я исправил баги с лобби и вылетом сервера, по крайней мере два самых явных.

0
Автор поста оценил этот комментарий
Вот как раз и понял что колизию можно на клиенте убрать и думаю как их на серваке обрабатывать. Нашел вроде p2js. А ты как колизию считаешь? Или самописный обработчик?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Самописный, делал основываясь на этом гайде https://www.gamedev.net/articles/programming/general-and-gam...

показать ответы
0
Автор поста оценил этот комментарий
@Masafi, а где ты колизии обрабатывал(обрабатываешь)? На сервере или на клиенте?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий
А есть репозиторий на гитхабе?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Пока что все на битбакете, так, на всякий :)

Скорее всего выложу на гитхаб когда-нибудь..

показать ответы
0
Автор поста оценил этот комментарий
Молодец, зачёт, если не секрет где проживаешь ? Главное не останавливаться, даже если все скажут, что это г****. Но зато в будущем, твои опыт тебе хорошенько поможет.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
В Москве
На самом деле, этот проект я пишу чтобы понять, как писать игры, ну и чтобы было хоть что то в "резюме"
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества