不會,在 Check 上意外雙擊並不會結束「數字著色」。檢查器會雜湊完整的 36 位數棋盤簽章,只有當該簽章與上次記錄的不同時,才會計入一次失誤,因此在未變更的錯誤棋盤上再次按下 Check 只是安全的無效操作,並不會消耗第二次失誤。只有當玩家畫出第二個、不同的錯誤完整排列,並在已變更的格子上驗證時,一局才會陷入死局。同樣的保護也延伸到鍵盤,因為重複的 Enter 按鍵事件會刻意被忽略,所以按住 Enter 鍵時並不會在格子之間快速觸發,也不會送出意外的檢查。要結束遊戲的雙失誤規則,仍然需要兩次分開的、刻意的錯誤提交,而非一次意外觸發的錯誤。「數字著色」只會為那個唯一正確的 6x6 火箭頒發正好 1,000 分,無論檢查是如何觸發的;任何結束的時機,都只會在你真正變更棋盤、畫出新的錯誤完整排列,並透過 Check picture 或 Enter 提交之後才會到來。

can an accidental double click on check end color by number
can an accidental double click on check end color by number

Check Picture 規則如何處理意外雙擊

Check picture 按鈕(或 Enter 鍵)並不像碼錶計算點擊次數那樣單純計算「點擊次數」。相反地,運行器會把每個完整畫好的棋盤視為一個 36 位數的簽章,並只記住最近一次被計入的錯誤簽章。第一次提交一個完整畫好的錯誤棋盤時,該簽章會被儲存為「上次計入的錯誤排列」。在完全相同的棋盤上再次按下 Check,會產生一模一樣的 36 位數簽章,因此運行器會辨識出這個重複,不會再加入第二次失誤。要造成死局,需要一個與第一個簽章真正不同的第二個簽章,而這只有在至少一個格子變更後才會發生。

這代表意外雙擊、意外的 Enter 按鍵,甚至是同一個未變更棋盤上快速的鍵盤自動重複,都無法單獨結束你的這一局。要結束遊戲,你必須刻意編輯一個格子、保留至少一個錯誤的格子,並提交一個完整畫好的棋盤,且其簽章與你已經計入過的不同。雙失誤契約仍然有效,但它是在「不同的錯誤排列」上強制執行,而非在按鈕按壓次數上。

當這一局陷入死局,或當你完成棋盤時,所有繪製、清除、調色盤選擇、游標移動,以及額外的檢查都會凍結。Restart 是刻意的離開方式,它會重設為全新的空白 6x6 棋盤,並預設選取 group 1,失誤數為零,分數為零。如果你想在乾淨的 Restart 之後繼續玩同一個火箭,題板永遠會還原為同一個已公開的 36 位數提示格線:111311、113331、113431、123332、123332,以及 221122,串在一起讀為 111311113331113431123332123332221122。

如何安全地繪製 6x6 火箭

  1. 閱讀每個提示並對應到編號調色盤:1 Background、2 Flame、3 Hull,或 4 Window。每個提示都是介於 1 到 4 之間的數字,而調色盤按鈕會同時顯示該數字與語意名稱。
  2. 透過點擊或輕觸選擇調色盤按鈕,或直接按下數字鍵 1、2、3、4。目前選取的筆刷會顯示在狀態列上,並在所屬的調色盤按鈕上以外框標示。
  3. 點擊或輕觸格子以套用目前的筆刷。你也可以用方向鍵移動游標(游標會在 6x6 棋盤邊緣被夾住),然後按下 1 到 4 為選取的格子塗色。按下 Space 會重複使用目前的筆刷。
  4. 使用 Delete 或 Backspace,或按右鍵,清除不小心塗錯的格子。再次塗一個格子會覆蓋先前的群組,因此在提交 Check picture 之前,錯誤的選擇永遠可以修正。
  5. 塗滿全部 36 個格子。未塗的格子在簽章中會算作 0,因此未完成的棋盤只會回傳未完成的訊息,不會加入失誤,你可以繼續填色。
  6. 按下 Check picture,或按下 Enter,以驗證棋盤。檢查器會比對每個格子與獨立的 36 位數 oracle,並回報三種結果之一。
  7. 如果你看到未完成的訊息,就繼續塗色。如果你看到完成但錯誤的嘗試,忽略它並繼續編輯。只有第二個不同的錯誤排列會使這一局陷入死局,而只有完全正確的棋盤才能獲得 1,000 分。

按下 Check 的三種結果

這三種結果共享同一個輸入(按下 Check picture 或 Enter),但會觸發不同的效果。第一種會在至少還有一格未塗時觸發。第二種會在棋盤已塗滿、且 36 位數簽章與獨立 oracle 不同時觸發,這也包含意外雙擊所走的路徑:第一個不同的錯誤排列會記錄一次失誤並保持可編輯,而只有第二個不同的錯誤排列才會使這一局陷入死局。第三種只有在每個格子都與獨立的 36 位數 oracle 完全相符時才會觸發。

結果觸發時機對這一局的效果
Incomplete至少有一格未塗(在簽章中會出現 0)不加入失誤;棋盤保持可編輯;繼續塗色
Completed wrong attempt全部 36 格都已塗色,但至少有一個群組與其提示不同(簽章與獨立 oracle 不符)第一個不同的錯誤排列會記錄一次失誤,並保持可編輯;在同一個未變更的錯誤棋盤上重新檢查不會再加入失誤;第二個不同的錯誤排列會使這一局陷入死局
一個塗滿的錯誤棋盤,其簽章與先前已計入的錯誤棋盤不同第一次發生時記錄一次失誤;第二個不同的錯誤簽章會使這一局陷入死局
Completed correct全部 36 格都已塗色,且每格都與獨立 oracle 相符這一局以正好 1,000 分結束;進一步的輸入會凍結,直到 Restart

Oracle 的群組計數同時也確認了題板的完整性。已公開的棋盤包含 15 個 Background 格子(群組 1)、8 個 Flame 格子(群組 2)、12 個 Hull 格子(群組 3),以及 1 個 Window 格子(群組 4),而 15 + 8 + 12 + 1 = 36,與 6x6 棋盤完全吻合。解答中沒有任何未知或超出範圍的值,且每個調色盤群組都是必要的:測試套件會依序替換每個完整群組,並證明那些近似解答的棋盤都無法通過。

解讀調色盤按鈕與群組字母

檢查器並不依賴顏色辨識,調色盤按鈕的設計讓僅憑文字也能解開棋盤。每個格子在塗色後仍會顯示其提示數字,而一個小字母會標示其預定群組:B 代表 Background、F 代表 Flame、H 代表 Hull,W 代表 Window。調色盤控制項會同時顯示數字 ID 與語意名稱,而螢幕閱讀器的標籤會為每個格子播報其列、欄、提示、語意群組,以及目前塗上的數字。

這個冗餘設計對於雙擊的問題很重要,因為它消除了詮釋實際色調的需要。如果你剛好混淆了兩個調色盤顏色,提示數字、群組字母,以及狀態列上的筆刷仍會告訴你每個格子應該屬於哪個群組,因此唯一能送出錯誤棋盤的方式,就是在格子上實際塗錯群組。這也是為什麼 Check 上的意外雙擊無法偷偷送進一次失誤:簽章只會在格子內容變更時改變,而在沒有編輯任何格子的情況下點擊 Check,簽章會保持不變。

你也可以只依賴棋盤本身來辨識。固定的 6x6 火箭有六列,以 row-major 順序讀為 111311、113331、113431、123332、123332,以及 221122,因此每個提示的正確答案都由其位置決定。唯一的 Window 格子位於一個固定的 row-major 位置,Hull 格子佔據 12 個固定位置,Flame 格子佔據 8 個位置,其餘 15 個由 Background 格子填滿。

鍵盤重複行為如何阻止意外提交

「數字著色」的鍵盤路徑與指標路徑採用了相同的防意外邏輯。方向鍵會把游標夾在 6x6 棋盤內,因此長按也不會逃出棋盤。按下 1、2、3 或 4 會為選取的格子塗色,並同時將該群組選為新的筆刷,而 Space 會重複目前的筆刷。Delete、Backspace,以及右鍵會清除選取的格子。Enter 會送出 Check picture。

對抗意外檢查的關鍵保護在於 keydown 篩選器。在按住按鍵期間,同一個按鍵的重複 keydown 事件會被刻意忽略,因此自動重複無法連續觸發多次 Enter 檢查,而你按住 Enter 鍵時也無法在放開之前多次提交棋盤。結合基於簽章的計數規則,這代表即使是把手靠在鍵盤上的玩家,也無法透過意外輸入累積多餘的失誤。結束這一局的雙失誤規則仍然適用,但兩次失誤都必須來自真正不同的錯誤塗色。

為了徹底安心,每次重新遊玩火箭時,都會從同一個已公開的空白提示格線開始,而老闆鍵、Restart 按鈕,以及最高分都位於共用的遊戲外殼中。在外殼的時限內連按兩次 Escape 會叫出試算表風格的封面,再按兩次會回到遊戲。塗色流程、檢查流程,以及死局流程中的任何動作,都無法被意外觸發,因此唯一刻意的離開方式就是 Restart 按鈕,以及一塊價值 1,000 分的正確解答棋盤。

如需更深入的說明,請參閱《Color Gradient Puzzle:使用鍵盤遊玩而無需拖曳》

如需更深入的說明,請參閱《Sudoku with Colors:9 個代幣、完整規則、1,000 分》