トラック
/
Tcl
Tcl
/
演習
/
ハングマン
ハングマン

ハングマン

上級

説明

関数型リアクティブプログラミングを使って、ハングマンゲームのロジックを実装してください。

ハングマンは、単語を当てるシンプルなゲームです。

関数型リアクティブプログラミングは、インタラクティブなプログラムを書くための考え方です。通常の見方とは異なり、「ボタンが押されたらカウンターを増やす」と書く代わりに、「カウンターの値は、ボタンが押された回数の合計である」と書きます。

関数型リアクティブプログラミングを使って、ハングマンの基本的なロジックを実装してください。そのためには、関数型リアクティブプログラミングのライブラリをインストールする必要があります。インストール方法は、この演習のプログラミング言語やトラックに固有のファイルで説明されています。

演習への新しい取り組み方

FRPライブラリに関する部分は無視してください。この演習にサードパーティのライブラリは必要ありません。この演習では、コールバックとTclのイベントループを使ったイベント駆動型のプログラミングに取り組みます。

TCPサーバーとドメイン固有のプロトコルを作る必要があります。このサーバーは、推測する単語を指定して起動します。テストスクリプトが、サーバーにコマンドを送るクライアントを実装します。

ドメイン固有のプロトコル

実装するプロトコルのコマンドは次のとおりです。

  • STATUS:ゲームの現在の状態を返します。応答は3つの要素からなるリストです。
    1. 残り何回間違えられるか
    2. まだ推測していない文字をアンダースコアで伏せた単語
    3. ステータスのフィールド("ongoing"、"win"、"lose"のいずれか)
  • GUESS x:xは推測する文字です。サーバーは推測のたびにステータスのリストを返します。
  • SHUTDOWN:サーバーをリモートでシャットダウンします。それ以外の場合、サーバーは勝敗が決まった時点で終了します。

サーバーはこれらのコマンドを大文字小文字を区別せずに扱える必要があります。

サーバーはどのポートを使うのでしょうか?

サーバーはポート番号0で起動しましょう。Tclが未使用のポートを見つけてくれるので、テストスクリプトにポート番号をハードコードしなくて済みます。1つのプロセスで動くすべてのインタプリター(スレッドも含む)は同じ環境を共有するので、サーバーはグローバルのenv配列を使って自分のポートをテストスクリプトに伝えられます。最初のhangman.tclファイルに例があります。

ヒント

必要なTclコマンドは次のとおりです。socket、fileevent、vwait。

このサンプルソケットプログラムから始められます。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Tcl Exercism

ハングマンを始める準備はできましたか?

Exercismに登録すれば、135個の演習、そして本物の人間によるメンタリングとともに、Tclを学んでマスターできます。すべて無料です。