製作 Wordle — 如何自己做一個 Wordle 遊戲(免費,在瀏覽器裡)
自己動手做一個 Wordle
幾分鐘就能學會做一個 Wordle。複製我們的提示詞,得到一個屬於你自己的、能玩的文字遊戲,再把連結分享出去——免費、不用寫程式,全程在瀏覽器裡。
做一個 Wordle 只需要四樣東西,其他都不需要:一份拆成合法猜測和答案兩份清單的詞表、一個猜測驗證器、一個兩趟掃描的回饋函式,還有一個分享字串。其餘的東西——方塊翻面、螢幕鍵盤把自己一格一格染上色、猜錯時抖一下——都是樣式。Neta Studio 裡的 3D 遊戲產生器能把一段文字描述變成瀏覽器裡能走進去的世界,所以真正需要你動腦想清楚的,只有詞表和回饋規則這兩塊。
這一頁給你要貼上的提示詞、貼上之前要先改的兩個設定,以及大多數第一次嘗試都會撞上的失敗模式:重複字母被算了兩次;猜測清單和答案清單一合併,答案就藏不住了;底下詞表一變,分享字串就對不上。不用安裝,沒有建置步驟,也不用挑框架。
每個 Wordle 仿作都需要的四個系統
把這個遊戲拆開,裡面就四個系統。你記得關於它的那些體驗,全是蓋在這四個系統之上的表現層。
不寫驗證器,你得到的是壞狀態,而不是看得見的程式錯誤:四個字母的提交去和五個字母的答案比、同一列被記兩次、遊戲結束後猜的還照樣收。不寫分享字串,大家就截圖盤面——這一截圖,還沒玩過的人直接看到答案。這兩件事都不可選,也都不是這個專案裡有意思的部分。
先把這四件事用純色方塊跑通。以後再想換成別的美術,等規則穩定了交給 Agent Sprite Forge 做就行——在計分還沒寫對之前就加美術,只是讓錯誤的回饋更難被發現。
- 詞表,拆成兩份一份是你可以輸入的詞,一份是可能成為隱藏答案的詞。兩個陣列,不是一個。這一刀切下去,決定的是這遊戲玩起來公不公平,還是隨手亂判。
- 猜測驗證器在計分之前跑。拿猜的這個字串去對 WORD_LENGTH,再查它是否在合法猜測集合裡,再確認當前這一列還沒提交過,最後確認遊戲還沒結束。被拒絕的猜測不消耗列數。
- 兩趟回饋函式吃進答案和猜測,回傳五個格子狀態:完全正確、存在、不存在。第一趟先標出完全相符,第二趟再從剩下的字母裡找近似相符。多數仿作就是死在這裡。
- 分享字串一小段文字,編碼這一局的結果:謎題編號、猜了幾次、每一列的格子圖案。它帶出結果,但不帶答案,也不帶任何一個猜過的字母。
把這段提示詞複製走,去搭你的 Wordle
整個專案就在這。把它當成一段完整描述貼進產生器。裡面寫清了常數、兩個陣列,以及兩趟式的計分規則——自己寫提示詞的人,最常錯的就是最後這一塊。
> 做一個瀏覽器文字遊戲:一個隱藏的五字母單字,六次機會。 > 詞表:一個叫 ANSWERS 的陣列,裝所有可以當答案的五字母單字;一個叫 VALID_GUESSES 的陣列,裝全部答案再加上其他允許輸入的詞。保持兩個陣列分開。 > 回饋:每次猜測之後,把每個格子標成完全正確、存在或不存在。第一趟先標完全相符,第二趟只用沒被完全相符消耗掉的答案字母去標近似相符,這樣一個重複字母絕不會被標兩次存在。 > 輸入:只有當猜測正好是五個字母、且出現在 VALID_GUESSES 裡時才接受。被拒絕的猜測不佔一列。 > 列數:六列。猜中答案或第六列用完之後遊戲結束,然後亮出答案。 > 鍵盤:螢幕鍵盤上按字母顯示已知的最佳狀態,完全正確優先於存在,存在優先於不存在。同時支援實體鍵盤。 > 分享:產生一個分享字串,包含謎題編號、用掉的猜測次數,以及每次猜測對應的一列圖案,用三個固定字元分別表示完全正確、存在、不存在。不要帶猜測裡的任何字母。 > 常數:檔案頂部寫 WORD_LENGTH = 5 和 MAX_GUESSES = 6。
貼進去之前,有兩處要改。詞表,換成你自己的兩個陣列;還有 MAX_GUESSES,填 4 就是更難的每日局,填 7 就寬鬆一點。在盤面能從頭到尾正確跑通之前,別動其他東西。
設定你的詞表(合法猜測與答案)
有效猜測指的是你同意接受為輸入的任何單字。答案是任何可以成為隱藏詞的那個詞。猜測集永遠是兩者中較大的那個,通常是答案集的幾倍,而且兩者絕不會是同一個陣列。
為什麼這兩個集合必須分開
答案集裡必須是人們真正認識的詞。如果一個冷僻詞能當答案,多數玩家會輸給一個自己從沒見過的詞,這種失敗讀起來是不公平,而不是難。猜測集必須寬鬆,因為玩家輸入一個真實存在的五字母單字卻被提示不在詞表中,他就會不再信任這個輸入框,然後不再玩下去。
所以兩邊的形狀是刻意做得不一樣的:一個收緊的答案表,一個寬鬆的猜測表,後者包含答案表加上你願意接受的其他所有詞。
合併兩者會出的問題
把兩個陣列合併,一個問題立刻冒出來,另一個問題稍後才冒出來。立刻出現的是:答案池繼承了所有你為猜測放行的縮寫、容忍的複數形式和外來詞,於是謎題會給出一些不像答案的答案。
稍後出現的問題更糟:如果玩家能列舉出你的答案表,他只要按順序走一遍這張表,就能用相同的猜測次數通關任何謎題。答案集不再是隱藏資訊。合併後的表,是解題者本來就已握在手裡的表。
01
從答案表開始:幾千個常見的五字母單字,全小寫,不含專有名詞,不含縮寫。
02
猜測表按「答案 + 更寬的一批可接受單字」來建,然後去重。
03
分別存放——兩個陣列,或兩個文字檔各載入進一個陣列。絕不要在執行時建構猜測表的同時又去改寫答案表。
04
兩個表一起做版本管理。如果你替換了答案表,舊的分享字串裡仍帶著過去對應到某個具體單字的謎題編號。
回饋函式,分成兩趟
只跑一趟、問「答案裡有沒有這個字母?」會把重複字母重複計數。這裡給規則,不給程式碼。
順序不是風格選擇。如果你在判定完全相符之前先判定近似相符,靠前的一個「存在但位置不對」的格子就可能吃掉靠後的格子做完全相符所需的那個字母,於是綠色格子變成黃色。這是一個可見、可重現的程式錯誤,玩家會當成程式錯誤來回報。
抓出這個問題的重複字母檢測
用 EERIE 去猜答案 SPEED。猜測裡有三個 E 格子,答案裡有兩個 E。單趟包含性檢查會把三個 E 全部標成存在。兩趟檢查會把前兩個標成存在、第三個標成不存在,這才是真相,而第三個格子變灰,正是玩家需要的資訊。
每次改動計分邏輯之後,都把這組詞對丟進你的函式跑一遍。這是文字遊戲能有的最便宜的迴歸測試。
01
第一趟,完全相符。從位置 0 走到 4。猜的字母和答案在同一個位置上相等時,把這個格子標成完全正確,並從剩餘的答案池裡刪掉一個該字母。
02
第二趟,近似相符。再走一遍位置,跳過已經標成完全正確的格子。如果剩餘池裡還有這個字母,就把該格子標成存在,並從池裡刪掉一個。
03
剩下的全部標成不存在。不存在是預設狀態,不是對答案再跑第三趟。
04
不存在是按格子算的,不是按字母算的。同一個字母可以在一次猜測裡的某個位置是完全正確,在另一個位置是不存在。
每日謎題還是無限模式?
每日模式從日期或種子推出唯一答案,所以每個玩家拿到同一個詞,而且提交一次之後盤面就鎖住。無限模式按需開一局新盤面。
這不是同一個功能的兩種口味。它們最佳化的目標不一樣,下面這張表才是誠實的對比。
兩個都做,每日模式當預設,無限模式放在練習按鈕後面。如果只做每日模式,你想測自己的答案清單就得去改日期常數,而你會和玩家在同一時間發現那些不公平的答案。
| 項目 | 一天一局 | 無限輪次 |
|---|---|---|
| 謎題選擇 | 日期或種子決定答案;每個玩家拿到同一個詞 | 從答案清單裡隨機,或者讓玩家選你定義好的分類 |
| 分享字串 | 玩家之間可比較,因為答案是同一個 | 跨玩家不可比較;只適合當個人結果看 |
| 習慣 | 每天固定一個可預期的時段,把玩家拉回來 | 單次時長由玩家自己定;沒有固定回訪時間 |
| 重玩價值 | 對單個謎題來說偏低,因為盤面只提交一次 | 高;每日題之後,大家繼續玩用的就是這個模式 |
| 測試你的詞表 | 慢:得改日期或種子,才能看到另一個答案 | 快:按需產生新盤面,可以連續檢查很多答案 |
| 版本管理風險 | 高:中途改答案清單,會讓已有的分享字串失效 | 低:新盤面不會改寫任何已經分享出去的內容 |
用連結分享你的 Wordle 戰績
分享字串比截圖好,因為它只帶結果、不洩漏答案。截圖會顯示字母,或者在失敗後直接把答案擺出來,沒玩過這一局的人看一眼就被劇透了。而分享字串只帶網格:每一列五格,每格三種狀態。它在群組聊天裡還能扛住壓縮和圖片封鎖,截圖往往做不到這一點。
世界連結是讓人去玩這局遊戲。分享字串是展示某一局打成什麼樣。這是兩份不同的資訊,不該塞進同一個東西裡。
一個被分享的盤面要保住哪些東西,結果才可比較
兩個結果只有在字串帶上了產生它們的脈絡時才可比較。這裡缺任何一項,比較就變成了猜。
01
謎題編號或種子,這樣兩個玩家才知道兩塊盤面答案是同一個。
02
猜的次數,以及按順序每次猜一列——6 次中 4 次、先對出三個綠再對出一個綠的盤面,和 6 次中 4 次、靠四個存在格子拼出來的盤面不是同一塊,讀的人是按網格來解讀的。
03
固定的三字元格子編碼,這樣每一列渲染出來寬度一致,網格在等寬字體的聊天視窗裡能對齊。
04
如果你支援困難模式,就要帶上困難模式標記。困難模式下 6 次中 4 次和標準模式下 6 次中 4 次不是同一個結果,混在一起字串就沒意義了。
05
詞典版本。你要是改了答案表,同一個謎題編號原來對應的一個詞,可能就變成另一個詞了。
走進它所屬的那個世界
精靈有角色,卻沒有地方站。最後這一步是別處沒有的:把你剛做好的精靈表放進一個能走進去的世界——一座小島、一顆星球、一個下雨的街角。本站的每個世界都是從一句描述做出來的,發布出來就是一個能玩的頁面。
FAQ
免費也能做一個 Wordle 嗎? +
可以。產生器跑在瀏覽器裡,不用裝東西,也沒有建置步驟要設定。上面這四套系統就是全部的建置內容,本頁的提示詞在你還沒動手寫規則文字之前,就已經能給出一個能玩的盤面。
做 Wordle 需要寫程式嗎? +
不需要。你寫描述,產生器出遊戲;之後你改的是兩個陣列和 MAX_GUESSES,都只是普通設定項。只有當你想要困難模式、提示,或者想用「完全正確」「字母存在」之外的計分規則時,才需要碰邏輯。
單字要準備多少? +
兩個清單,不是一個。幾千個答案詞,外加一個比它大好幾倍的猜測詞表,是個能跑起來的規模;答案詞掉到一千以下,常玩的人就會開始碰到重複。每個詞都必須是小寫、正好五個字母、不含專有名詞。
我能玩自己做的 Wordle 嗎? +
能。世界一存在就能玩,測試就用無限模式。分享之前先連玩一批盤面,把每一個你覺得不公平的答案記下來——這些詞就是從答案表裡要刪掉的。
能分享出去嗎? +
分兩部分,這是有意設計的。世界連結讓人直接進去玩;分享字串只回報單次結果,不暴露答案。把詞典版本號留在字串裡,這樣你改過詞表之後,早先的結果記錄仍然說得通。
這和遊戲列表裡的東西有什麼不同? +
遊戲列表裡是做完的、打開就能玩的世界——Mini World 和 The Cyclops' Island 就是兩個例子,你可以看看產生器產出的世界長什麼樣。這裡給的是源頭:詞表、猜測次數、規則都在你手上,所以你能改手感,而不是去玩別人那一版。
回到 3D 遊戲產生器
31 個做完的 3D 世界、遊戲和場景都在同一頁上——每一個都能玩。