學習軌道
/
Tcl
Tcl
/
練習
/
猜字遊戲
猜字遊戲

猜字遊戲

困難

說明

使用函式反應式程式設計來實作 Hangman 遊戲的邏輯。

Hangman 是一款簡單的猜字遊戲。

函式反應式程式設計是一種撰寫互動式程式的方式。它和一般觀點的差異在於,你不會寫「按下按鈕時就把計數器加一」,而是寫「計數器的值,等於按鈕被按下的次數總和」。

使用函式反應式程式設計來實作 Hangman 背後的基本邏輯。為此,你需要安裝一套函式反應式程式設計的函式庫,這部分的說明會寫在這個練習所屬語言/軌道的專屬檔案裡。

這個練習的新做法

請忽略關於 FRP 函式庫的部分,這個練習不需要第三方函式庫。這個練習著重在事件驅動程式設計,使用回呼與 Tcl 的事件迴圈。

你需要建構一個 TCP 伺服器和一套領域特定協定。這個伺服器在啟動時會收到要猜的單字。測試腳本則會實作負責傳送指令給伺服器的用戶端。

領域特定協定

需要實作的協定指令如下:

  • STATUS:回傳遊戲目前的狀態。回應會是一個包含三個元素的陣列:
    1. 剩餘的猜錯次數,
    2. 未猜出的字母以底線遮蓋的單字,以及
    3. 狀態欄位("ongoing"、"win" 或 "lose" 其中之一)
  • GUESS x,其中 x 是要猜的字母。每次猜測後,伺服器都會以狀態陣列回應。
  • SHUTDOWN:從遠端關閉伺服器。否則伺服器會在獲勝或落敗之後結束。

伺服器應該能不分大小寫地處理這些指令。

伺服器使用哪個連接埠?

使用連接埠編號 0來啟動伺服器:Tcl 會找到一個未使用的連接埠,這樣我們就不必在測試腳本裡寫死連接埠編號。同一個行程中執行的所有翻譯員(包括執行緒)共用相同的環境,因此伺服器可以透過全域env陣列把自己的連接埠回報給測試腳本。一開始的 hangman.tcl 檔案裡有一個範例。

提示

你會需要這些 Tcl 指令: socket、 fileevent、 vwait。

這個範例 socket 程式可以幫你順利開始。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Tcl Exercism

準備好開始 猜字遊戲 了嗎?

註冊 Exercism,透過 135 個練習 和真人引導來學習並精通 Tcl,全部免費。