Как устроена игра

Цвет областей в Meowdoku — структура, а не украшение

Каждая клетка Meowdoku залита одним цветом, и ничто другое не отмечает конец области. Неудачные цвета двух соседей делают поле нечитаемым ещё до первого кота. Игра уже считает палитру функциональной частью; здесь мы измеряем её устойчивость к особенностям цветового зрения.

Что на самом деле отмечает область

Компонент поля не рисует отдельную границу областей: у всех клеток одинаковая тонкая рамка 1 px. Меняется только заливка, без контура, значка или текстуры. Цвет — единственное место, где записана принадлежность клетки к области.

Почему палитра несёт структуру

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

Алгоритм: настоящее раскрашивание графа

`assignRegionColors` строит граф соседства по общим сторонам, не диагоналям, начинает с областей с большим числом соседей и выбирает свободную позицию, максимально удалённую от них на кольце из 12 цветов. Области — вершины, общие стороны — ограничения, а кольцо приближает визуальное сходство оттенков.

Каков запас палитры

В палитре 12 позиций. Число областей равно размеру поля и не превышает 10.

Используемые области относительно 12 позиций палитры.
ПолеОбласти (= размер)Свободные позиции
Лёгкий 5×557
Обычный 7×775
Сложный 9×993
Экстремальный 10×10102

Даже на экстремальном поле две позиции не используются; резервный режим нехватки цветов на реальном поле не включается.

Что алгоритм даёт обычному зрению

Разделение измерено в CIE Lab ΔE: ниже 10 цвета похожи с первого взгляда, выше 30 явно различаются. На 300 новых полях каждой сложности мы сравнили ближайшую соседнюю пару с назначением, игнорирующим соседство.

Средняя ΔE ближайшей пары соседних областей на поле (светлая тема, обычное зрение), 300 полей каждой сложности.
ПолеassignRegionColorsБез учёта соседства
Лёгкий 5×536.028.0
Обычный 7×734.328.6
Сложный 9×933.528.1
Экстремальный 10×1032.527.5

Алгоритм добавляет около 20% разделения на каждой сложности. Палитра сама избегает грубых столкновений; графовое раскрашивание убирает случайность и превращает «скорее всего читаемо» в гарантию.

Что меняется при красно-зелёной цветовой недостаточности

Протанопия и дейтеранопия сжимают ось красного, оранжевого, жёлто-зелёного и зелёного и вместе встречаются примерно у 1 из 12 мужчин. Мы применили линейную RGB-симуляцию дихроматического зрения и повторно измерили ΔE. Это жёсткая оценка полной формы, а не одинаковое зрение каждого игрока.

Измеренный результат: слияние почти на каждом поле

Мы повторили измерение на тех же 300 полях каждой сложности и снова нашли ближайшую соседнюю пару после симуляции.

Средняя ΔE ближайшей соседней пары при обычном зрении и симуляции протанопии/дейтеранопии.
ПолеОбычное зрениеПротанопияДейтеранопияПоля с парой ниже ΔE 12
Лёгкий 5×536.010.118.597%
Обычный 7×734.39.016.597%
Сложный 9×933.58.415.399%
Экстремальный 10×1032.58.113.595%

ΔE 12 — практический порог, не клиническая граница. При протанопии среднее падает до однозначных чисел, при дейтеранопии — более чем вдвое; на 95–99% из 1 200 полей есть хотя бы одна пара ниже порога.

Почти всегда виновата одна пара

В 97–99% затронутых полей доминирует соседство красного и жёлто-зелёного. Пара падает с ΔE 54.0 при обычном зрении до 9.5 при протанопии — на 82%. На кольце между ними три позиции, которые алгоритм считает безопасными, но яркость совпадает; фиолетовый и бирюзовый также падают с 74.0 до 8.2.

Что помогает сейчас

Сейчас нет режима для цветовой недостаточности и границ областей. Системные цветовые фильтры macOS, Windows, iOS и Android могут снова разделить оттенки; увеличение не помогает, потому что проблема в цвете. Будущей палитре следует начать с пар на расстоянии трёх позиций.

Как проводились измерения

Поля берутся из `generatePuzzleSync`, цвета — из `assignRegionColors` и `regionAdjacency`. Используются CIE76 ΔE и линейная RGB-матрица дихроматического зрения семейства Viénot/Brettel. Тесты пересчитывают таблицы из реальных модулей, чтобы изменения генератора или палитры не оставляли устаревших цифр.

Посмотрите так на следующее поле

Откройте поле и найдите две соседние области с самыми близкими цветами. Это рабочий запас палитры и подходящая страница для проверки системного красно-зелёного фильтра, если он доступен.

Поля создаются прямо в вашем браузере. Ничего из вашей игры никуда не отправляется.