25 января 2018 г.

Многопользовательская браузерная карточная игра Дурак

Не так давно я начал работу над новым своим пет-проектом – это многопользовательская карточная игра в Дурака в вебе. Я выбрал именно Дурака, потому что не смог найти, где можно в нее поиграть в вебе с конкретным игроком без всяких фейсбуков. Выдача завалена флешевыми поделками, наверное, где-то ниже есть что-то годное. Я знаю точно, что на мобильной платформе этого полно и, скорее всего, качественного. Но я собираюсь играть в Дурака с родителями, а им с ПК удобнее. В качестве серверного языка программирования я выбрал Go на вебсокетах. Фронтэнд я буду делать с помощью нового для меня Vue.


Разработку я начал с продумывания, какие запросы и ответы должны быть в процессе самой игры. Сначала я думал, что создам REST-API для игры, потому что REST годится для пошаговой работы. Но мне все равно требовалось бы обновления состояния у других игроков, а это удобнее делать как раз веб-сокетами.

Имея представление о пакетах, которые будут передаваться от сервера к клиенту, я начал планировать сущности. Я занялся базовыми сущностями: `Карта`, `Колода`, `Игра`, `Игрок`. Набросав несколько атрибутов к ним, я предполагал, что буду указывать у этих сущностей тип `json:”…”` для передачи к клиентам. Но позже осознал, что удобнее будет иметь отдельные сущности для каждого события, отправленного клиенту, которые будут содержать только необходимые данные.

Проверив, что колода перемешивается, а карты раздаются, я принялся разрабатывать обертку над самой сессией игры, оставив реализацию ходов, правил и прочего на потом. Мне нужно было `Холл` – место, куда попадают все подключенные клиенты, `Комната` – место, которое может создать любой игрок из Холла и куда могут подключиться игроки и зрители. Параллельно с разработкой этих сущностей и всех связанных событий передачи команд и состояний я стал набрасывать примитивный фронтэнд.

Страницу входа я скопировал с ранее созданной мной игры в Танчики. Она содержит поле ввода псевдонима игрока и кнопку подключения. На этой же странице прописан код подключения к серверу через вебсокеты. Обработка полученных сообщений и отправка команд вынесена в отдельный js-файл. Я обратил внимание, что Vue в простом использовании очень похож на Angular 1, поэтому мне не составило труда быстро сделать обновляемые списки подключенных игроков к Холлу и комнатам и забиндить переменные состояния игры, приходящие с сервера.

Планы по разработке большие, они перечислены на Github. В репозиторий с кодом я подключил популярные инструменты: TravisCI для сборки тестов,  Coveralls для просмотра процента покрытия кода тестами, GoReportCard для контроля форматирования кода, наличия рекомендуемых комментариев и отсутствия распространенных опечаток.

Приложение в данный момент имеет следующий возможности:
  • Подключаться под псевдонимом
  • Хранить ранее введенный псевдоним в куках
  • Создавать Комнату
  • Подключаться к комнатам
  • Менять владельца комнаты, если он её покидает
  • Удалять комнату, если её покидает последний участник
  • В серверном коде есть возможность создать игру в комнате, но это требует серьезной доработки
На всё это (планирование, интеграции, программирование) у меня ушло около 20 часов работы. Я собираюсь уделять разработке игры свободное время, но немного, чтобы не перегореть раньше времени. Планов по продвижению и монетизации не имею, так как занимаюсь её разработкой в свободное время, потому что просто люблю программировать. Сейчас я запускаю сервер только локально, поделиться могу только кодом, который уже выложен на Github: https://github.com/rnixik/durak

Комментариев нет:

Отправить комментарий