Skip to content

unshame/Cardgame2017

Repository files navigation

Мультиплеерная карточная игра на Phaser.js, Node.js и Eureca.io.
Тестовая версия - https://unshame.github.io/Cardgame2017/.
Документация (WIP) - клиент, сервер.
Правила игры (примерные). Реализован переводной и подкидной варианты.

Установка

  1. Клонировать git clone https://github.com/unshame/Cardgame2017.git
  2. Установить node.js 20
  3. Установить зависимости: npm i
  4. Запустить сервер: npm run dev
  5. В браузере открыть 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. Там можно посмотреть ошибки линтинга и сложность кода.

Languages