関数型リアクティブプログラミングを使って、ハングマンゲームのロジックを実装してください。
ハングマンは、単語を当てるシンプルなゲームです。
関数型リアクティブプログラミングは、インタラクティブなプログラムを書くための考え方です。通常の見方とは異なり、「ボタンが押されたらカウンターを増やす」と書く代わりに、「カウンターの値は、ボタンが押された回数の合計である」と書きます。
関数型リアクティブプログラミングを使って、ハングマンの基本的なロジックを実装してください。そのためには、関数型リアクティブプログラミングのライブラリをインストールする必要があります。インストール方法は、この演習のプログラミング言語やトラックに固有のファイルで説明されています。
FRPライブラリに関する部分は無視してください。この演習にサードパーティのライブラリは必要ありません。この演習では、コールバックとTclのイベントループを使ったイベント駆動型のプログラミングに取り組みます。
TCPサーバーとドメイン固有のプロトコルを作る必要があります。このサーバーは、推測する単語を指定して起動します。テストスクリプトが、サーバーにコマンドを送るクライアントを実装します。
実装するプロトコルのコマンドは次のとおりです。
STATUS:ゲームの現在の状態を返します。応答は3つの要素からなるリストです。
GUESS x:xは推測する文字です。サーバーは推測のたびにステータスのリストを返します。SHUTDOWN:サーバーをリモートでシャットダウンします。それ以外の場合、サーバーは勝敗が決まった時点で終了します。サーバーはこれらのコマンドを大文字小文字を区別せずに扱える必要があります。
サーバーはポート番号0で起動しましょう。Tclが未使用のポートを見つけてくれるので、テストスクリプトにポート番号をハードコードしなくて済みます。1つのプロセスで動くすべてのインタプリター(スレッドも含む)は同じ環境を共有するので、サーバーはグローバルのenv配列を使って自分のポートをテストスクリプトに伝えられます。最初のhangman.tclファイルに例があります。
必要なTclコマンドは次のとおりです。socket、fileevent、vwait。
このサンプルソケットプログラムから始められます。