Masafi

Masafi

Пикабушник
поставил 1001 плюс и 1512 минусов
отредактировал 0 постов
проголосовал за 4 редактирования
Награды:
10 лет на Пикабу
30К рейтинг 26 подписчиков 62 подписки 119 постов 8 в горячем

Каково быть водителем трамвая

Реклама

а) На темной теме эта реклама выглядит ужасно

б) В настройках стоит "отключить рекламу", а она есть (больше нигде нет)

Реклама Реклама, Баг

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

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


Привет!

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

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

Как школьник веб игру делает #1 Компьютерные игры, Gamedev, Игры, Разработка, Веб-разработка, Разработка игр, Infected, Длиннопост

Навыки

К началу создания игры у меня было общее представление о создании игр (делал простенький платформер), знание 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, эти все "странные" токены и т.д.. Поэтому я сделал простейший клиент и сервер, на котором можно было передвигать свой спрайт игрока по полю (просто летать по экрану), но при этом с синхронизацией всех игроков.

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

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

Как школьник веб игру делает #1 Компьютерные игры, Gamedev, Игры, Разработка, Веб-разработка, Разработка игр, Infected, Длиннопост

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

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


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

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

Update 0.1.0

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

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

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

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

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

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

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

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

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

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


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

Как школьник веб игру делает #1 Компьютерные игры, Gamedev, Игры, Разработка, Веб-разработка, Разработка игр, Infected, Длиннопост

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

Как школьник веб игру делает #1 Компьютерные игры, Gamedev, Игры, Разработка, Веб-разработка, Разработка игр, Infected, Длиннопост

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

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


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

Показать полностью 3

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

Привет, пикабу!

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

Решил запилить здесь мини-дневник разработчика

Идея очень странная: RTS платформер

Две стороны: люди и вирус - пытаются захватить планету, путем уничтожения друг друга с помощью различный строений.

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

Пока лишь реализован эдакий "клон террарии" - можно лишь бегать человеком (за сторону людей) и ломать/ставить блоки

Как школьник веб игру делает Компьютерные игры, Разработка, Веб-разработка, Gamedev, Infected, Гифка

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


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

Как школьник веб игру делает Компьютерные игры, Разработка, Веб-разработка, Gamedev, Infected, Гифка
Показать полностью 1

Ну это уже совсем

#comment_96021370

Ну это уже совсем Комментарии, Комментарии на Пикабу, Пикабу, Кирилл

Portal

Просто прохождение портала... Не двигая мышь.

Про яжматерей в скейтпарке

В общем, был на ВДНХ когда-то скейтпарк от МТС. Средненький такой парк. Одно в нем огорчало - никаких ограждений не сделали и по выходным он был полностью (плотность детей людей как в метро примерно) заполнен непрофессиональными людьми (людьми типа "ой, горочка!!1")

В один из нормальных дней, когда "райдеров" было больше, чем "не райдеров", катались в этом скейтпарке подростки на самокатах (типа "райдеров") и дитя лет до 10 на каком то ашан-самокате.

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

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


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


Смог откопать только такое фото, слева можно увидеть одну их этих вывесок

Про яжматерей в скейтпарке Яжмать, Скейтпарк, Скейт, Самокат, ВДНХ
Показать полностью 1

Мнения разделились

Мнения разделились МГУ, Совет, Пей, Сессия
Показать полностью 1
Отличная работа, все прочитано!