当前课程知识点:Python 交互式程序设计导论 > 第2周 > 本周项目:猫咪藏在哪个房间 > 编码步骤
返回《Python 交互式程序设计导论》慕课在线视频课程列表
我们已经为该小项目提供了一个基本模板,我们建议基础版的“猫咪藏在哪个房间”开发策略为:
1、确定一组存储游戏状态的全局变量。显而易见,你需要一个全局变量来保存程序产生的秘密房间号码,建议该变量的名称为secret_number。为了扩展基础版,你还需要其它一些全局变量。
2、弄清楚如何在给定的low(下限)至high(上限)范围内产生一个随机秘密数字,及秘密房间号。在谈及范围时,我们遵循Python的标准,即包含下限,排除上限,数学上表示为[low, high)。例如[0, 3)意味着该范围包含0、1、2三个数字。我们建议在开始编码时将范围设置为[0,25),即25个房间。
提示:查看random模块包中的函数,你会发现产生这样的随机数非常容易,建议在Python控制台先测试要使用的函数,弄明白它的作用后再往你的项目里添加代码。
3、搞清楚如何利用simpleguitk模块包创建一个文本输入框。你将使用该文本输入框来获取游戏玩家输入的猜测数字。
4、编写事件处理函数guess_room_number(input),参数input保存着玩家输入的猜测值,将该值与秘密房间号进行比较并输出恰当的回应。注意,input为字符串类型,因此在比较之前,你必须将其转化为整型数字。如果玩家猜中了房间号,除了输出恰当的信息之外,请补充输出“请点击房间按钮重新开始游戏”,之后玩家再猜,均输出“请点击房间按钮重新开始游戏”。
提示:课程视频中我们介绍过字符串转化为整型数字的方法。
5、至此,玩家可以无限制的猜测下去,直到猜对为止,猜中后如果希望继续玩一把,必须关闭程序,然后重新运行程序。
6、编写new_game()函数,将产生秘密房间号的代码移到该函数中,也就是说,调用new_game()函数将会计算秘密房间号并将其赋值给一个全局变量,该函数也应当输出一些恰当的信息提示玩家。完成该函数后,你就可以在启动窗口的代码之前调用new_game()。
以上为“猫咪藏在哪个房间”游戏的最初级版本,下面为你的项目添加额外的功能,为了获得满分,你必须完成2个增强的功能:
第1个增强功能:使用simpleguitk模块包添加重新启动游戏的按钮,这样你就无需在玩家猜中后先关闭程序,然后重新运行程序。你必须添加三个按钮:“25个房间”、“36个房间”、“100个房间”,从而允许玩家选择秘密房间号的范围。玩家在游戏运行的任何时刻点击任何一个按钮将重新开始一轮游戏并输出恰当的信息。每个按钮的事件处理函数要为秘密房间号的上限范围(应当是一个全局变量)设置对应的值,然后调用new_game()在新的范围内重新设置秘密房间号,最后设置标志新一轮游戏已经开始的全局变量为True。
在玩该游戏时,可能你已经注意到,如果猫咪藏在25个房间中的某一个,即猜测的范围为[0,25),首先猜12是一个好注意,如果计算机的回应为“太小了”,秘密房间号一定在[13,25)范围内,然后最好猜19,以此类推。这种每次缩小一半猜测范围的技术就是计算机科学领域中著名的二分查找算法。
第2个增强功能:为游戏程序添加限制玩家猜测次数的功能,每次猜测后,你的程序应当补充输出剩余的猜测机会,一旦玩家用完了规定的猜测机会,玩家失败,游戏程序输出相应的提示信息,玩家如果想继续游戏,必须点击房间按钮。
如果玩家按照二分查找策略来猜测,在[low, high)范围内,要保证玩家在n次之内猜中,n必须为满足2 ** n >= high - low + 1的最小整数。因此,对于范围[0,25),n为5,[0,36),n为6,[0,100),n为7,我们可以在三个按钮的事件处理函数中为表示剩余猜测机会的全局变量赋予相应的值(5、6、7),当然我们也可以利用math.log and math.ceil函数通过low和high计算n。
游戏程序初次启动时,猜测的范围应当为[0,25),一轮游戏结束后(玩家猜中后或玩家用完了猜测机会),应提示玩家点击房间按钮开始新一轮游戏,如果玩家此时没有点击按钮继续进行猜测(直接按回车,或输入新的数字再按回车),应当提示玩家点击房间按钮开始新一轮游戏。只要玩家点击房间按钮,当前一轮游戏无条件结束,在按钮载明的范围立即开始新一轮游戏。
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板