Цвет областей в Meowdoku — структура, а не украшение
Каждая клетка Meowdoku залита одним цветом, и ничто другое не отмечает конец области. Неудачные цвета двух соседей делают поле нечитаемым ещё до первого кота. Игра уже считает палитру функциональной частью; здесь мы измеряем её устойчивость к особенностям цветового зрения.
Что на самом деле отмечает область
Компонент поля не рисует отдельную границу областей: у всех клеток одинаковая тонкая рамка 1 px. Меняется только заливка, без контура, значка или текстуры. Цвет — единственное место, где записана принадлежность клетки к области.
Почему палитра несёт структуру
Похожие цвета у соседних областей превращают их визуально в одно пятно. Комментарий модуля предупреждает, что простое назначение сталкивает красный с розовым или оранжевый с жёлтым, вынуждая всматриваться там, где распознавание области лежит в основе каждого вывода.
Алгоритм: настоящее раскрашивание графа
`assignRegionColors` строит граф соседства по общим сторонам, не диагоналям, начинает с областей с большим числом соседей и выбирает свободную позицию, максимально удалённую от них на кольце из 12 цветов. Области — вершины, общие стороны — ограничения, а кольцо приближает визуальное сходство оттенков.
Каков запас палитры
В палитре 12 позиций. Число областей равно размеру поля и не превышает 10.
| Поле | Области (= размер) | Свободные позиции |
|---|---|---|
| Лёгкий 5×5 | 5 | 7 |
| Обычный 7×7 | 7 | 5 |
| Сложный 9×9 | 9 | 3 |
| Экстремальный 10×10 | 10 | 2 |
Даже на экстремальном поле две позиции не используются; резервный режим нехватки цветов на реальном поле не включается.
Что алгоритм даёт обычному зрению
Разделение измерено в CIE Lab ΔE: ниже 10 цвета похожи с первого взгляда, выше 30 явно различаются. На 300 новых полях каждой сложности мы сравнили ближайшую соседнюю пару с назначением, игнорирующим соседство.
| Поле | assignRegionColors | Без учёта соседства |
|---|---|---|
| Лёгкий 5×5 | 36.0 | 28.0 |
| Обычный 7×7 | 34.3 | 28.6 |
| Сложный 9×9 | 33.5 | 28.1 |
| Экстремальный 10×10 | 32.5 | 27.5 |
Алгоритм добавляет около 20% разделения на каждой сложности. Палитра сама избегает грубых столкновений; графовое раскрашивание убирает случайность и превращает «скорее всего читаемо» в гарантию.
Что меняется при красно-зелёной цветовой недостаточности
Протанопия и дейтеранопия сжимают ось красного, оранжевого, жёлто-зелёного и зелёного и вместе встречаются примерно у 1 из 12 мужчин. Мы применили линейную RGB-симуляцию дихроматического зрения и повторно измерили ΔE. Это жёсткая оценка полной формы, а не одинаковое зрение каждого игрока.
Измеренный результат: слияние почти на каждом поле
Мы повторили измерение на тех же 300 полях каждой сложности и снова нашли ближайшую соседнюю пару после симуляции.
| Поле | Обычное зрение | Протанопия | Дейтеранопия | Поля с парой ниже ΔE 12 |
|---|---|---|---|---|
| Лёгкий 5×5 | 36.0 | 10.1 | 18.5 | 97% |
| Обычный 7×7 | 34.3 | 9.0 | 16.5 | 97% |
| Сложный 9×9 | 33.5 | 8.4 | 15.3 | 99% |
| Экстремальный 10×10 | 32.5 | 8.1 | 13.5 | 95% |
Δ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. Тесты пересчитывают таблицы из реальных модулей, чтобы изменения генератора или палитры не оставляли устаревших цифр.
Посмотрите так на следующее поле
Откройте поле и найдите две соседние области с самыми близкими цветами. Это рабочий запас палитры и подходящая страница для проверки системного красно-зелёного фильтра, если он доступен.
Поля создаются прямо в вашем браузере. Ничего из вашей игры никуда не отправляется.