Честная игра онлайн держится на двух вопросах: действительно ли случайны раздача и кубики, и не видит ли кто-нибудь того, чего видеть не должен. На tamashebi.cc оба ответа заложены в архитектуру, а не в обещание. Карты, кости и кубики сервер бросает с помощью криптографического источника случайности; каждому игроку отправляется только его собственная рука; каждый ход проверяет сервер, и счёт тоже ведёт он. Ниже каждый пункт описан подробно — так, как он на самом деле работает в коде, без преувеличений. Краткая версия — на странице «Честная игра».
Перемешивание карт и броски кубиков
- Кости домино перемешивает сервер с помощью криптографического источника случайности Web Crypto и метода Фишера–Йейтса, который даёт каждому порядку одинаковый шанс.
- Карты джокера и японского джокера раздаёт сервер криптографической функцией Node.js. Такую раздачу нельзя предсказать, даже если видеть сотни предыдущих.
- Кубики в нардах сервер бросает в тот момент, когда игрок нажимает «бросить». Случайное число берётся без перекоса: значение, которое не делится на шесть поровну, отбрасывается и берётся заново, поэтому у каждой грани ровно одинаковый шанс.
- Случайность никогда не приходит из браузера. Раздача, на которую может повлиять клиент, — это раздача, которую клиент выберет.
- Детерминированная, «засеянная» случайность есть в коде только для тестов, чтобы ошибку можно было точно воспроизвести. Живая игра её не использует.
Что значит «одинаковый шанс», на примере домино: для последней позиции из 28 костей одна кость выбирается случайно из 28, для предыдущей — из оставшихся 27, и так до начала. Так любой возможный порядок 28 костей ровно одинаково вероятен, и ни одна кость не «тянется» к началу или к концу. Затем сервер даёт каждому по семь костей, а остальные четырнадцать остаются на базаре (в запасе) в том же случайном порядке. Это происходит перед каждой раздачей и от предыдущей не зависит.
Логика на сервере
Браузер только рисует игру. Когда вы кладёте кость или ходите картой, браузер спрашивает сервер, а сервер проверяет: ваша ли очередь, есть ли эта кость или карта у вас в руке, допустим ли ход по правилам. Недопустимый ход просто не выполняется. Очки и счёт матча считает сервер — кратные пяти в домино, лист джокера с «хишти» и «премией», «оини», «марс» и «кокс» в нардах (одинарная, двойная и тройная победа). Какую кость вы возьмёте с базара, тоже решает сервер: выбрать нельзя, а последние две кости базара не берутся вообще — таково правило грузинского домино.
Команды ограничены по частоте: в секунду или за несколько секунд принимается только определённое их число, так что «завалить» сервер командами нельзя. А игрок одновременно может быть только в одной игре.
Скрытая рука соперника
Это самая важная граница. Для экрана каждого игрока сервер строит отдельную картину, и в неё попадают только его карты или кости. Чужая рука не «спрятана» и не «перевёрнута» — её просто нет в отправленных данных. Это важно потому, что данные, скрытые на экране, не скрыты: любой может открыть инструменты разработчика в браузере и посмотреть, что пришло. Для джокера это проверяет тест: он превращает картину игрока в текст и подтверждает, что в ней нет ни одного идентификатора карты другого места.
- Домино: вы видите свои кости, стол и количество костей у соперника. Порядок базара не отправляется никому.
- Джокер: вы видите свои карты и то, что сыграно на столе в открытую.
- Нарды: скрывать нечего — доска и кубики видны обоим одинаково.
- Бот получает ту же ограниченную картину, что и человек. Исключения «он работает на сервере, значит, ему всё можно» не существует.
Античит
Античит на tamashebi.cc — это в основном то, что описано выше: информация, нужная для жульничества, до устройства игрока просто не доходит. Мы не запускаем никаких программ на вашем компьютере или телефоне и не утверждаем, что искусственный интеллект следит за каждым ходом. Что есть:
- В рейтинговом матче участвуют только зарегистрированные аккаунты; боты и гости не могут ни выиграть, ни потерять рейтинг.
- Законченный матч меняет рейтинг ровно один раз — это гарантирует база данных.
- Уходом не избежать рейтингового поражения: в домино такой матч рейтинг вообще не меняет, а в джокере бот доигрывает за вас, и результат засчитывается вам.
- Администрация может заблокировать аккаунт; заблокированный аккаунт не может писать в чат.
- Игрок может заблокировать неприятного соперника — после этого ни вызовы, ни чат между ними не проходят.
Честно скажем и о том, чего мы гарантировать не можем. Если за одним столом джокера сидят двое друзей и по телефону рассказывают друг другу свои карты, сайт этого не увидит — этот разговор через сервер не идёт. За настоящим столом то же самое: и в живой игре никто не может запретить двоим тайные знаки. Поэтому будьте осторожны за столами на монеты или рейтинг с незнакомой компанией, а если появилось подозрение, напишите нам: в записи матча видны каждый заказ и каждая карта, и странная закономерность в ней заметна.
Как решаются споры
Если что-то показалось нечестным, сначала вспомните, что счёт ведёт сервер и правила для всех одни: «странные» очки часто — следствие грузинского правила; например, в домино первой костью очки даёт только 5-5. Загляните на страницу правил. Если сомнение осталось, напишите нам через страницу контактов: укажите игру, имя соперника, дату и время матча. Сервер записывает каждый ход — события матча в домино, каждую сыгранную карту и счёт каждой раздачи в джокере, — поэтому ход матча можно восстановить. Запись законченного матча в джокер могут посмотреть его участники.
Пример
В нардах вам три раза подряд выпало «ду-яки» (двойка и единица), и вы решили, что кубики «сломаны». Вероятность одной конкретной комбинации без дубля, например двойки с единицей, — 2/36 за бросок, а три раза подряд — примерно 1 из 5800. Редко, но за тысячи бросков такие серии обязательно появляются: случайность не означает равномерность на коротком отрезке. Сервер бросает каждый раз отдельно, и прошлый результат на следующий не влияет.
Частые вопросы
- Кто бросает кубики?
- Сервер, с помощью криптографического источника случайности, в момент вашего броска. Оба игрока видят один и тот же результат.
- Может ли соперник увидеть мои карты?
- Нет. Сервер отправляет каждому игроку только его руку. Ваши карты в браузер соперника не попадают вообще, поэтому их не покажут даже инструменты разработчика.
- Бот жульничает?
- Нет. Бот получает ту же ограниченную информацию, что и человек на его месте: только свою руку и стол.
- Куда пожаловаться, если игра показалась нечестной?
- Напишите нам через страницу контактов и укажите игру, имя соперника и время матча. Сервер записывает каждый ход, поэтому случай можно проверить.
Играть на tamashebi.cc можно бесплатно, прямо в браузере, в том числе с телефона. За некоторыми столами используется Domino Coin — виртуальная игровая монета: это не деньги, она не продаётся и не обменивается на деньги. Сайт доступен на грузинском, английском, русском и турецком языках.
Игры на Tamashebi.cc идут на грузинском языке. Они бесплатны и используют виртуальную монету — не настоящие деньги.