使用函式反應式程式設計來實作 Hangman 遊戲的邏輯。
Hangman 是一款簡單的猜字遊戲。
函式反應式程式設計是一種撰寫互動式程式的方式。它和一般觀點的差異在於,你不會寫「按下按鈕時就把計數器加一」,而是寫「計數器的值,等於按鈕被按下的次數總和」。
使用函式反應式程式設計來實作 Hangman 背後的基本邏輯。為此,你需要安裝一套函式反應式程式設計的函式庫,這部分的說明會寫在這個練習所屬語言/軌道的專屬檔案裡。
請忽略關於 FRP 函式庫的部分,這個練習不需要第三方函式庫。這個練習著重在事件驅動程式設計,使用回呼與 Tcl 的事件迴圈。
你需要建構一個 TCP 伺服器和一套領域特定協定。這個伺服器在啟動時會收到要猜的單字。測試腳本則會實作負責傳送指令給伺服器的用戶端。
需要實作的協定指令如下:
STATUS:回傳遊戲目前的狀態。回應會是一個包含三個元素的陣列:
GUESS x,其中 x 是要猜的字母。每次猜測後,伺服器都會以狀態陣列回應。SHUTDOWN:從遠端關閉伺服器。否則伺服器會在獲勝或落敗之後結束。伺服器應該能不分大小寫地處理這些指令。
使用連接埠編號 0來啟動伺服器:Tcl 會找到一個未使用的連接埠,這樣我們就不必在測試腳本裡寫死連接埠編號。同一個行程中執行的所有翻譯員(包括執行緒)共用相同的環境,因此伺服器可以透過全域env陣列把自己的連接埠回報給測試腳本。一開始的 hangman.tcl 檔案裡有一個範例。
你會需要這些 Tcl 指令:
socket、
fileevent、
vwait。
這個範例 socket 程式可以幫你順利開始。