Исходный код игры в домино: правила, соперники и 58 тестов
Что входит в пакет Pip Club Dominoes, какие правила в нём работают, где менять тексты и плитки и что в пакет не входит.

Исходный код игры в домино выглядит простым, пока не проверишь крайние случаи. Кто ходит первым, если ни у кого нет дубля? Что происходит, когда базар пуст и оба игрока пасуют? Как считаются очки в конце заблокированного раунда? Шаблон, который отвечает на эти вопросы в коде и доказывает это тестами, стоит больше, чем шаблон с более красивыми костяшками. Pip Club Dominoes, наш шаблон «дабл-шесть», содержит 58 автоматических тестов, которые покрывают правила, компьютерного соперника, раскладку стола, сохранения и 14 переводов.
Это руководство объясняет, какие правила играет игра, как устроен пакет, что можно поменять в текстовом редакторе, а что требует пересборки, как её разместить и что разрешает лицензия. Имена файлов взяты из иллюстрированного руководства для покупателя, которое входит в товар.
Одно, что нужно знать прежде всего: в Pip Club играют против компьютера. Онлайн-режима и режима на двоих на одном устройстве в нём нет.
Правила, которые играет этот исходный код игры в домино
Правила — главное, в чём шаблоны домино отличаются друг от друга, поэтому сверьте их с тем, что ждут ваши игроки. Pip Club играет классическую блочную игру «дабл-шесть», один игрок против одного компьютерного соперника.
- 28 костяшек от 0 до 6. Каждый игрок получает 7, а остальные 14 остаются в базаре.
- Открывает игру самый большой дубль. Если дублей нет, открывает самая большая сумма очков, а при равенстве — самая большая половинка.
- У стола всегда два конца, A и B. Костяшка должна совпадать с концом, и ноль совпадает с нулём.
- Дубли можно класть поперёк, но от них не ответвляются линии и они не дают дополнительного хода.
- Если совпадения нет, тяните по одной костяшке, пока не сможете ходить. Если базар пуст и совпадения нет, пасуйте.
- Domino: тот, кто первым избавится от всех костяшек, записывает сумму очков, оставшихся у соперника.
- Lock: два паса подряд при пустом базаре блокируют стол. Побеждает тот, у кого меньшая сумма, разница идёт ему, а при равных суммах — ничья.
Quick Round (быстрый раунд) заканчивается после одного раунда. Points Match (матч на очки) играет раунды, пока кто-то не наберёт 50 или 100 очков. В кампании 9 встреч в 3 главах, по одной на каждое место встреч, и каждая победа даёт печать.
Что входит в пакет
Игроки встречают трёх компьютерных соперников с собственными характерами: енота-диджея Rico, лису-скейтера Faísca и кота-художника Nix, каждый на уровне Easy, Normal или Hard. Доступные костяшки светятся, стол показывает, куда ляжет костяшка, а подсказка предлагает ход. Есть три места встреч (Rooftop, Skate Park и Midnight Arcade), шесть наборов костяшек для коллекции, печати кампании и статистика. Работают мышь, касание и клавиатура.
- game/: готовая к размещению сборка с index.html, pip.config.js, modules/, lib/, assets/ и licenses/.
- game/lib/phaser.js: Phaser 3.90.0, читаемый, по лицензии MIT.
- source/: редактируемый TypeScript, графика, музыка, переводы и автоматические тесты.
- documentation/index.html и DOCUMENTATION.html: руководство для покупателя на 14 языках, которое открывается офлайн.
- THIRD-PARTY-LICENSES/: уведомления для Phaser и шрифта Barlow Condensed.
Графика и музыка — оригинальные ассеты продукта, лицензированные покупателю вместе с товаром. Интерфейс доступен на 14 языках и следует языку браузера; записанного голоса нет, поэтому каждая реплика соперника идёт на выбранном языке.
Pip Club Dominoes: демо, руководство и цена
Меняйте без пересборки: pip.config.js
Рядом с index.html лежит pip.config.js. Откройте его в любом текстовом редакторе, поменяйте значение, загрузите файл и перезагрузите страницу. Здесь три настройки.
- title: заголовок вкладки браузера.
- saveKey: имя, под которым хранится сохранение. По умолчанию pip-club.
- defaultLanguage: стартовый язык. Если поле пустое, игра следует языку браузера.
На живом сайте не меняйте saveKey. Другой ключ заставит игру игнорировать существующий прогресс и начать новое сохранение, что полезно для второй копии и болезненно при обновлении.
Где в исходнике лежат тексты, графика и костяшки
- Тексты и переводы: source/src/ui/i18n.ts и source/src/ui/locales/.
- Графика персонажей, сцены и логотип: source/src/assets/club/.
- Музыка: source/src/assets/music/.
- Цвета костяшек: source/src/art/palette.ts и source/src/art/tileArt.ts.
- Тесты: source/tests/.
Типичная работа с брендом идёт в таком порядке: логотип и графика сцен в assets/club/, затем палитра костяшек, затем формулировки в locales. White label разрешён, так что ваш бренд может заменить наш. Изменение игры компьютера или правила — более глубокая работа; запускайте тесты до и после, потому что они покрывают и то и другое.
Если вы собираете небольшой каталог настольных игр, рядом с этой подойдут ещё два наших шаблона.
Ludo Cats: Ludo с котятами, компьютер на трёх уровнях или друзья на одном устройстве
Boba Club: пасьянс Klondike с кампанией из 12 раскладов
Пересборка после правок TypeScript
Папка game/ уже собрана, поэтому для установки игры Node.js не нужен. Он нужен только после изменений исходника.
- Установите Node.js 22.12 или новее (руководство проверено на 22.23). npm идёт вместе с ним.
- Откройте терминал в папке source/, где лежат package.json и package-lock.json.
- Выполните npm ci. Он устанавливает точные зафиксированные версии Phaser, Vite, Vitest и TypeScript.
- Выполните npm test (58 тестов) и npm run typecheck. Исправьте ошибки до сборки.
- Выполните npm run build. Результат попадёт в source/dist-static/, с index.html, modules/, lib/, assets/ и licenses/.
- Сделайте резервную копию размещённой игры, затем загрузите содержимое dist-static/ точно так же, как game/.
Руководство предостерегает от npm audit fix и npm update, потому что они меняют проверенные версии. Если возникла проблема с пакетами, верните поставляемую пару package.json и package-lock.json.
Размещение на вашем сайте
Загружайте только содержимое game/, чтобы index.html лежал прямо в целевой папке, например public_html/games/pip-club/. Держите рядом assets/, lib/, modules/, licenses/ и pip.config.js и сохраняйте регистр букв в каждом имени. Не загружайте source/, documentation/ или ZIP.
- Подойдёт любой статический HTTP(S)-хостинг, в любой подпапке любого домена, потому что игра использует относительные пути.
- Для игры не нужны база данных, PHP или сервис Node.js.
- Открытие index.html с компьютера (file://) не поддерживается.
- Хостинг должен отдавать .js, .webp, .woff2 и .mp3 с обычными типами.
- Игра не делает вызовов аналитики, рейтингов, платежей или рекламы.
Сохранения остаются в браузере игрока, в IndexedDB или localStorage, и не синхронизируются между устройствами. Чтобы обновить, загрузите новую game/ поверх старой, сохраните pip.config.js и его saveKey, а если показывается старая версия, очистите кэш файлов, а не данные сайта.
Чего не входит и лицензия
В издании нет онлайн- или локального режима на двоих, облачных сохранений, онлайн-рейтинга, покупок за реальные деньги и рекламного SDK. Нативные приложения, хостинг и индивидуальная разработка тоже вне пакета. Добавление рекламы, магазина или синхронизации — это работа разработчика, которой нужны ваши собственные аккаунты и согласования.
Pip Club стоит $49, с акцией Black Friday до 30 ноября 2026 года — $41.65; скидка за набор от 5% до 20% применяется, если вы покупаете два и более шаблона вместе. Лицензия бессрочная и неэксклюзивная, на один конечный продукт, ваш или одного клиента. Вы можете менять код, графику и аудио, ставить свой бренд и пускать игроков бесплатно или с рекламой, но не можете перепродавать шаблон или его код отдельно. Поддержка длится шесть месяцев или двенадцать с расширением; всё, что выходит за рамки установки и исправления дефектов, оценивается отдельно.
Прочитать условия лицензии и поддержки
Часто задаваемые вопросы
Исходный код игры в домино на TypeScript или JavaScript?
Исходник — это читаемый, неминифицированный TypeScript. Готовая к размещению папка game/ содержит собранный JavaScript, поэтому инструменты TypeScript нужны только для изменения игры.
Могут ли два человека играть друг против друга?
Нет. Игроки играют против компьютерных соперников на одном устройстве. Режима на двоих ни онлайн, ни локально нет.
Какой вариант домино в игре?
Классический «дабл-шесть», один против одного, с добором из базара, пасами и правилом блокировки. Domino засчитывает оставшуюся сумму соперника, а заблокированный стол достаётся тому, у кого меньшая сумма.
Что можно поменять без пересборки?
pip.config.js задаёт заголовок браузера, ключ сохранения и стартовый язык. Правила, графика, тексты и музыка меняются в исходнике и требуют пересборки.
Работает ли игра офлайн?
Игра не обращается к внешним сервисам, но это не устанавливаемое офлайн-приложение. Игрокам нужно открыть ваш веб-адрес, чтобы загрузить её.
Это та основа для домино, которая вам нужна?
Pip Club подходит сайту или порталу, которому нужна классическая настольная игра для всех возрастов, студии, которая делает брендированную игру в домино для одного клиента, и разработчику, которому нужен читаемый TypeScript с компьютерным соперником и настоящими модульными тестами. Она не подходит проекту, где люди должны играть друг против друга, онлайн или на одном экране: это индивидуальная работа с самого начала.
Сыграть в демо Pip Club и купить лицензию
Нужен другой набор правил или несколько лицензий? Запросите смету
