交互实战:Guess the number

游戏规则

计算机作为玩家甲,你作为玩家乙。
甲在心里默选一个数字让你猜,乙猜一个数字,如果正确,乙胜;如果不正确,甲告诉乙接下来的猜测方向,如果乙猜小了,甲说higher,告诉乙往大猜;如果乙猜大了,甲说lower,告诉乙往小猜。

程序功能设计

界面有三个部分:

  • 开始游戏
  • 停止游戏
  • 猜测输入窗口

猜测应该有一定的范围,否则无法进行。设置两种范围1-100和1-1000。选择这两个范围与开始游戏功能合一。
停止游戏功能暂时还做不到关闭窗口,但会给出提示,并且停止猜数判断功能。
输入窗口是乙用来输入数字的地方。

选择1-100范围内时,如果乙在5次之内猜为优秀,如果9次之内猜出为合格,9次之后算作失败。
选择1-1000范围内时,如果如果乙在7次之内猜为优秀,如果13次之内猜出为合格,13次之后算作失败。

编码设计

重点注意代码布局。根据前面的代码一般布局规范,设计大的代码段落,可以从GUI入手,思考界面,界面功能,功能所需helper functions以及变量,由表及里的进行编码。

知识点侧重于handler的运用,function的编写,逻辑判断的书写。尽可能多地尝试已学知识。

陷阱

本练习最大的陷阱在于,输入的数字与甲“心中”的数字直接比较总是不按照预期。 这是因为输入的“数字”是数字的字符串形式,而程序随机产生的数字则是“真”的数字!字符串与数字直接比较会出现荒谬的结果。
解决办法是:把输入的数字字符串转换为真数字,然后再进行比较。
转换方法是:

int(your_number_string)

安全

最大的安全往往来自不确定的输入,为了保证代码不会因为意外输入而崩溃,需要做一些防护。 请试试,在猜测窗口输入 kskdh,回车后是什么反应?
如果程序崩溃,说明安全性有待改善。

进一步设计

当程序功能基本完成,也暂时不存在明显安全问题后,可以考虑增加次要的,但是加分功能。比如,在本练习中可以让玩家甲更“人性化”,当他发现用户超过10秒钟没有继续输入,则表现得较为暴躁。
让Ta像一个女人一样唠叨可能更好,但那样要打很多字,所以这次就算了:(。