Meowdoku 的區塊顏色是結構性的,不是裝飾
在 Meowdoku 的棋盤上,每一格都只是單一的實心填色,除此之外沒有任何東西標示一個區塊在哪裡結束、下一個區塊從哪裡開始。這讓調色盤成為謎題真正運作的一部分,而不只是一層塗裝:把兩個相鄰區塊的顏色選壞了,棋盤在你放下第一隻貓之前就已經看不懂。遊戲本身早就是這樣處理的——它還沒檢查過的是,同一套調色盤能不能撐過色覺缺陷,這篇文章要做的就是這件事。
真正標示區塊的是什麼
打開棋盤元件,找找看有什麼東西畫出了兩個區塊之間的邊界——什麼都沒有。每一格都套用完全相同的 1px 細邊框,不管旁邊那一格屬於同一個區塊、還是完全不同的區塊。從一格換到下一格,唯一會變的只有填色:沒有邊框、沒有圖示、沒有紋理。
這是真正的設計選擇,不是疏漏——在每個區塊交界都畫一條粗線,會讓已經有十二種顏色、上百格的棋盤又多一樣東西要畫。但這也代表顏色承載的資訊沒有別的地方可以存放。「這一格屬於哪個區塊」是遊戲裡每一條規則都依賴的第一個事實,而填色是唯一寫下這個事實的地方。
這為什麼讓調色盤變得舉足輕重
一旦顏色是唯一的邊界訊號,兩個顏色相近的相鄰區塊就不再讀作兩個區塊——它們會被看成一整塊形狀奇怪的色塊,而任何需要區分它們的推理,都會從一眼看出變成瞇眼細看。
負責指派顏色的模組,在自己的註解裡就寫明了這一點:一個隨意的指派方式「often produce[s] clashes like red next to rose or orange next to yellow — the player has to stare to tell whether it's one block, and 'which region is this' is the premise of every reasoning step in this game.」(常常會產生像是紅色貼著玫瑰紅、或橘色貼著黃色這種衝突——玩家得盯著看才能分辨是不是同一塊,而「這是哪個區塊」正是這款遊戲裡每一步推理的前提。)這句話就是接下來這套演算法存在的全部理由。
這套演算法:真正的圖著色,不是打亂的清單
`assignRegionColors` 首先會建立一張區塊相鄰圖:只要兩個區塊有任何格子共用一條邊,就算相鄰,而且刻意只採用上下左右四方向的相鄰關係,不算對角——對角相碰在視覺上不會被誤認成同一塊,所以不算是著色上的限制。接著它依照鄰居數量處理各個區塊,每次都在調色盤自己的色環上,挑一個離所有已上色鄰居都最遠的空格位;遇到平手,就挑能讓十二種色相整體分布得最開的那一格。
這不只是名字叫圖著色,功能上也確實是圖著色:區塊是頂點,共用邊是限制條件,調色盤格位則代表顏色。唯一偏離經典公式的地方,是色環本身——色環上位置相近的格位(紅色和橘色)被視為比位置相對的格位(紅色和藍綠色)更相似,這也符合這些色相實際並排時的觀感。
調色盤實際上有多少餘裕
調色盤總共有十二個格位,而棋盤從來不會全部用完:區塊數量等於棋盤邊長,邊長最大是十。
| 棋盤 | 區塊數(=棋盤邊長) | 調色盤剩餘格位 |
|---|---|---|
| 簡單 5×5 | 5 | 7 |
| 普通 7×7 | 7 | 5 |
| 困難 9×9 | 9 | 3 |
| 極難 10×10 | 10 | 2 |
即使是極難難度,也還有兩個格位完全用不到。演算法在「區塊數超過調色盤格位」時的備援機制,在真正的棋盤上從未被觸發——它是為目前難度階梯根本到不了的情況準備的。
在正常色覺下,這套演算法到底多爭取到了什麼
以 CIE Lab 的 ΔE 作為色彩差異的量測方式(這是一種標準的知覺色差指標——粗略來說,差距在 10 以下時一眼看去會覺得相近,超過 30 則會覺得明顯不同),下面是每個難度下,三百個新產生棋盤中,任兩個相鄰區塊之間最小色差的平均值:
| 棋盤 | 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 |
這套演算法在每個難度下,都穩定地多爭取到大約五分之一的色彩距離。有一點值得說清楚:這裡取樣的一千兩百個棋盤裡,就算不考慮相鄰關係,也沒有出現真正嚴重的撞色(ΔE 低於 20)——在這種區塊數量下,光靠十二種分佈良好的顏色裡挑五到十種,運氣本來就不容易太差。這套演算法真正拿掉的是運氣,而不是常見的災難;它把「大概沒問題」變成一個有設計保證的結果——而這正是接下來要拿去對照色覺缺陷的那個保證。
紅綠色覺缺陷會改變什麼
紅色盲(protanopia)和綠色盲(deuteranopia)是兩種常見的紅綠色盲類型,合計大約影響每 12 名男性中的 1 人。這兩種色盲都會把一般三色視覺原本能區分開的一段色彩空間壓縮在一起——也就是紅、橘、黃綠、綠這條軸線——所以原本在這條軸線兩端的顏色,看起來可能會變得幾乎一樣。
為了實際測量這套調色盤受到的影響,而不是只用理論去描述,這篇文章讓每個顏色都通過一套標準的二色視覺模擬(一種線性 RGB 矩陣轉換,瀏覽器與作業系統的無障礙工具也採用同一類模型),再重新計算 ΔE。這是完全嚴重程度、最壞情況的模擬,不代表每一位色盲玩家看到的數字都完全一樣——大多數紅綠色覺缺陷是程度上的差異,而不是全有全無的崩壞。
測量結果:幾乎每個棋盤都會崩壞
重新跑一次每個難度三百個棋盤,再次取最接近的相鄰區塊配色——這次是在模擬色覺缺陷下的結果:
| 棋盤 | 正常色覺 | 紅色盲 | 綠色盲 | 有配色低於 Δ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% 至少會出現一組相鄰配色低於這個門檻。
幾乎總是同一組顏色
這種崩壞並不是平均分散在調色盤上的。找出每個受影響棋盤裡真正造成問題的那組顏色,會發現每個難度都是同一組顏色獨佔鰲頭:紅色貼著黃綠色,出現在 97% 到 99% 有任何崩壞情況的棋盤裡。單獨拿出來看,這一組顏色在正常色覺下的 ΔE 是 54.0——確實有明顯區別——但在紅色盲模擬下掉到 9.5,等於下降了 82%。
原因要追溯到調色盤自己的色環順序。紅色和黃綠色在十二色的色環上相隔三格,`assignRegionColors` 把這個距離視為一個舒適、不算相鄰的間隔。但這個量測方式假設的是為正常色覺校準過的色相輪,而紅色盲與綠色盲剛好會壓縮這兩種色相所在的那一段色相輪——所以演算法認為安全的間隔,實際上還是會崩壞。
調色盤自己的原始碼註解裡,還標出了一個每三格重複一次的「淺、中、深」明度規律——所以剛好相隔三格的配色,永遠會落在同一個明度區段(紫色和藍綠色也有同樣的問題,是次要的元兇:ΔE 從 74.0 掉到紅色盲下的 8.2,是測量到單一跌幅最大的一組,只是出現頻率比紅色和黃綠色低)。在這個色環距離下,色相是唯一能區分兩種顏色的線索,而色相正好是紅綠色覺缺陷會侵蝕的東西。
現在真正有幫助的做法
遊戲目前沒有色盲模式,區塊之間也沒有邊框可以當備援——這正是這個問題無處可躲的原因。真正有效的緩解方式在遊戲之外:macOS、Windows、iOS 和 Android 都內建系統層級的色覺缺陷濾鏡(設定 → 輔助使用 → 色彩濾鏡,或對應的選項),而因為這裡的問題正是色相被壓縮,針對玩家自身色覺缺陷調整過的濾鏡,能重新拉開這次測量顯示會崩壞的那些色相。放大畫面沒有用——這是顏色問題,不是尺寸問題。
如果未來真的要改版調色盤,這次測量指出該從哪裡下手:是色環距離為三的這種關係,而不是距離為一的那種。明顯相近的配色,演算法早就已經把它們拉開,在模擬中大多也撐得住。真正出問題的,是演算法目前認為已經安全隔開、實際上並沒有的那些配色。
這是怎麼測量出來的
所有數字都來自這款遊戲自己的程式碼:棋盤由 `generatePuzzleSync` 產生,配色由 src/engine/palette.ts 裡的 `assignRegionColors` 和 `regionAdjacency` 決定,執行方式與正式遊戲完全相同。色差採用 Lab 色彩空間下的 CIE76 ΔE;色覺缺陷模擬則是先套用一種標準的線性 RGB 二色視覺矩陣(Viénot/Brettel 系列方法),換算回來後再重新測量。不考慮相鄰關係的對照組,則是把每個區塊自己的數字編號直接對應到調色盤格位,完全跳過 `assignRegionColors`。
這些數字反映的是這款遊戲目前調色盤與棋盤產生器的實際狀態。這篇文章的測試套件會在每次執行時,從正式模組重新推導每一張表格的數字,所以未來調色盤或產生器一旦改動,會直接讓建置失敗,而不是讓一個過時的數字繼續留在頁面上。
用這種方式看下一個棋盤
打開一個新棋盤,找出顏色感覺最接近的那兩個相鄰區塊——大多數棋盤都至少有一組值得多看一眼。這就是調色盤實際運作中的安全邊際。如果你有可以用的紅綠色覺系統濾鏡,這一頁也很適合拿來測試看看。
棋盤都是在你的瀏覽器裡生成的,你玩的內容不會被傳送到任何地方。