Мультиплеерная карточная игра на Phaser.js, Node.js и Eureca.io.
Тестовая версия - https://unshame.github.io/Cardgame2017/.
Документация (WIP) - клиент, сервер.
Правила игры (примерные). Реализован переводной и подкидной варианты.
Установка
- Клонировать git clone https://github.com/unshame/Cardgame2017.git
- Установить node.js 20
- Установить зависимости: npm i
- Запустить сервер: npm run dev
- В браузере открыть localhost:5000
Отладка и тестирование
Параметры запуска сервера
node server -param1 value -param2 -param3 и т.д.
Параметры:
- --debug [string],- -d [string]- включает дебаг сообщения в консоли, опционально можно указать уровень сообщений (- silly, debug, info, notice, warn, error, по умолчанию- debugс флагом и- noticeбез флага)
- --port number- порт сервера игры (если стандартный 5000 занят)
- --testing [number],- --test [number],- -t [number]- запускает тесты вместо обычного режима, опционально можно указать длительность тестов (2000мс по-умолчанию)
- --dt number,- --decisiontime number- устанавливает время ответа ботов
Параметры настройки быстрой игры:
- --bots number,- -b number- игра будет запускаться с этим кол-вом ботов (по-умолчанию 0)
- --players number,- -p number- игра будет ожидать этого кол-ва игроков перед запуском (по-умолчанию 4)
- --transfer- можно переводить карты
- --followup- убирает ограничение подбрасывания карт кол-вом карт в руке защищающегося в начале хода
- --attack- убирает ограничение кол-ва атакующих
- --freeforall,- --ffa- все атакующие игроки ходят одновременно
Тестирование сервера
Тесты очень примитивные, все, что они делают, это прогоняют игру с ботами без задержки.
При тестах проверяется две вещи: кол-во карт у защищающегося при атаке и корректность прохождения перевода.
В данный момент оба эти теста всегда проходят. Иногда при тестировании возникают предупреждения о неверных ходах ботов,
это нормально и значит, что боты выполнили действия одновременно друг с другом и одно оказалось устаревшим.
В основном такое тестирование используется для быстрого прогона игровой логики.
Если поставить тест на 10-20 секунд, большая часть веток алгоритма будут пройдены.
Отладка сервера
Для более направленной отладки лучше использовать дебаггер.
Для этого нужно запустить node со специальным флагом: node --inspect server.
Перед запуском сервера можно указать точки остановки прямо в коде при помощи ключевого слова debugger.
Дальше нужно открыть Chrome, запустить дебаггер (консоль), там должна появиться иконка Node.js, нажать ее.
После этого откроется еще одно окно и дебаггер подключится к ноду.
Если это не работает, можно скопировать ссылку из консоли и открыть ее в хроме.
Также из консоли есть доступ к серверу и всем его элементам: server.
И если запущены тесты, есть доступ к тестовой игре: game.
Серверные логи
В папке \logs создаются логи сервера. Каждая игра, игрок и очередь создают свои логи.
Логи именуются по шаблону Type-DATEtTIME.log.
Нужный лог можно найти по сообщениям в консоли. Например:
03:02:36:554 - warn: [Game#IgXcRjU] Invalid action bot_U2rIpo2 PASS { type: 'PASS' }
Полный лог будет в файле с именем, начинающимся на Game#IgXcRjU, соответствующую строку в файле можно найти по таймкоду 03:02:36:554.
Для создания логов и вывода сообщений в консоль используется winston.
Полезные для отладки фичи
- Кнопка D в правом нижнем углу открывает меню переключения режима отладки отдельных элементов игры
- Кнопка S пропускает все запланированные анимации
- Глобально доступные модули: game, gameOptions, gameInfo, actionHandler, ui, skinManager, cardControl, connection, fieldManager, cardEmitter, cardManager
- printLayers()- выводит в консоль вертикальное положение элементов игры
- Средний клик на карте, потом в консоли Chrome правый клик на появившейся строчке -> Store as global var, чтобы получить прямой доступ к карте (сейчас работает только с картами в руке игрока)
Разработка
Пакетная обработка
Есть несколько скриптов для облегчения разработки и загрузки игры на сервер при помощи gulp.
gulp addtags добавляет <script> теги с адресами .js файлов из public\js в index.html для облегчения локального теста игры.
gulp build создает копию игры в папке prod, минифицируя .js файлы из public\js.
Также туда копируются файлы для деплоя.
gulp buildall в дополнению ко всему вышеперечисленному копирует документацию и отчеты в prod\public.
gulp buildsafe и gulp buildallsafe делает тоже самое, только убирает все игровые модули клиента из глобального доступа
(предотвращает модифицирование поведения клиента игры через консоль)
Для того, чтобы эти скрипты могли найти .js файлы и правильно их собрать, необходимо указать имена файлов в public/js/index.js:
\\@include:ИмяФайлаИлиПапки
Если указано имя папки, то будет добавлен файл с таким же именем в этой папке (Filename/Filename.js).
Если файл уже указан в index.js, в нем можно указывать имена других файлов и т.д.
Документация
npm run doc генерирует документацию из комментариев в папке doc при помощи JSDoc.
Тестовая версия загружена на https://unshame.github.io/Cardgame2017/doc/client/.
В корне репозитория лежит модифицированный файл подсветки синтаксиса для Sublime 3 с подсветкой документации (с этим она значительно более читабильна в коде).
Валидация кода
В репозитории настроены .jshintrc файлы для линтинга кода при помощи JSHint.
npm run report создает отчеты по коду в папке report при помощи plato.
Там можно посмотреть ошибки линтинга и сложность кода.