轨道
/
Tcl
Tcl
/
练习
/
猜词游戏
猜词游戏

猜词游戏

困难

说明

使用函数式响应式编程实现 Hangman 游戏的逻辑。

Hangman 是一个简单的猜单词游戏。

函数式响应式编程 是一种编写交互式程序的方式。它与通常的视角不同:你不再写“按下按钮时让计数器自增”,而是写“计数器的值是按钮被按下次数的总和”。

使用函数式响应式编程实现 Hangman 背后的基本逻辑。为此你需要安装一个 FRP 库,具体做法会在该练习针对具体语言和赛道的文件中说明。

本练习的新方案

请忽略有关 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,全部免费。