# Arena Shooter

Эта работа представляет собой попытку (очередную) запилить что-нибудь сетевое. На этот раз попытка оказалась даже относительно успешной. Однако из-за своей же сетевой природы, а также из-за выбранного стека, скорее всего вы видите эту работы среди дисквалифицированных.

## Как запустить ЭТО?!

Есть два пути:

1. Следуя инструкциям для своей ОС здесь https://nodejs.org/en/download/ развернуть на своем ПК node.js окружение, после чего пройти в папку `release` и выполнить в ней команды `npm install`, а затем `npm start`. В результате будут собраны клиентские файлы при помощи `webpack`, а также будет запущен веб-сервер на порту `8080` и можно будет открыть http://localhost:8080/ в любимом браузере и наслаждаться одиночной игрой с единственным и неподвижным врагом.

2. Вариант для знакомых с Docker (а как следствие имеющих его установленным на текущем ПК): пройти в папку `release` и выполнить `docker-compose up`. В результате также запустится сервер на порту `8080` и игру можно будет испытать в браузере.

На момент проведения конкурса также был доступен сервер здесь: http://95.183.9.227:8080/ но скорее всего уже не доступен на момент прочтения этого документа (если конечно вы его читаете после 20 марта 2019 года, т.е. после даты когда заканчивается оплата сервера).

## Об игре

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

## Об архитектуре

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

Сервер написан на node.js с использованием библиотеки socket.io, которая реализует веб-сокеты.

## Контакты

Если остались вопросы, пишите в телеграм @x_michael или на мыло m.s.miriti@gmail.com

Скорее всего после конкурса код также будет доступен здесь: https://github.com/miriti/igdc160-arena-shooter

---

27 февраля 2019
