使用函数式响应式编程实现 Hangman 游戏的逻辑。
Hangman 是一个简单的猜单词游戏。
函数式响应式编程 是一种编写交互式程序的方式。它与通常的视角不同:你不再写“按下按钮时让计数器自增”,而是写“计数器的值是按钮被按下次数的总和”。
使用函数式响应式编程实现 Hangman 背后的基本逻辑。为此你需要安装一个 FRP 库,具体做法会在该练习针对具体语言和赛道的文件中说明。
请忽略有关 FRP 库的部分,本练习不需要第三方库。本练习侧重事件驱动编程,使用回调和 Tcl 的事件循环。
你需要构建一个 TCP 服务器和一个领域特定协议。启动服务器时会传入要猜的单词。测试脚本实现了向服务器发送命令的客户端。
需要实现的协议命令有:
STATUS:返回游戏的当前状态。响应是一个包含三个元素的数组:
GUESS x,其中x是要猜的字母。每次猜测后,服务器都会返回状态数组。SHUTDOWN:远程关闭服务器。否则服务器会在获胜或失败后退出。服务器应当能够不区分大小写地处理这些命令。
请使用端口号 0启动服务器:Tcl 会找一个未使用的端口,这样我们就不必在测试脚本中硬编码端口号。一个进程中运行的所有解释器(包括线程)共享同一个环境,因此服务器可以通过全局env数组把自己的端口回传给测试脚本。最初的 hangman.tcl 文件中有一个示例。
你需要用到这些 Tcl 命令:socket、fileevent、vwait。
这个示例 socket 程序可以帮你上手。