当前课程知识点:Python 交互式程序设计导论 > 第7周 > A 课程视频(类进阶及文件操作) > 处理停止的文字块
返回《Python 交互式程序设计导论》慕课在线视频课程列表
这一讲,我们给加大家介绍第七个游戏项目,决战三字经当中
当一个文字块向上移动的时候,如果它碰到画板的上方边沿或者碰到已经停止的文字块以后
我们如何来处理这种情况,因为我们的游戏当中很多重要的逻辑和功能,都是通过判断 这个文字块停止以后相应的处理来实现
比如说,游戏的加分,比如说 ,判断游戏是否要结束等等
下面,我们通过咱们的程序来看看如何来完成这个项目
在pycharm中,把我们给大家提供的程序模版拷贝下来以后
我们先看看程序的框架, 首先注意观察一下,我们给的全局变量
第一个has_rising_box,当前有没有一个上升的文字块
这个游戏当中,只有一个上升的文字块,在任何时候,只有一个上升的文字块
当这个变量为真的时候
我们有一个函数,叫做box_spawner,它是定期会生成一个文字块, 当has_rising_box为真的时候,这个函数是不能生成新的文字块的
只有前面这个变量变成假的时候,那个函数才能生成一个新的文字块
这是第一个重要的变量,后面这两个大家都熟悉,是画板的高度,画板的宽度
紧接着是我们文字块的高度和文字块的宽度,还有上升的速度
注意y轴是从屏幕的上方是0,往下是增加的,所以-1是往上移动
还有,我们的游戏是否结束,还有真正上升这个文字块
这个对象是否存在,紧接着,下面是所有停止的文字块
它的一个列表,当游戏一开始的时候,这个列表是空的
随着我们游戏的进展,这个列表当中就会有静止的文字块添加到当中
当然,如果你是三字经的高手,所有的文字块四句组成一段,就会消失掉,四句组成一段就会消除掉
没有积累出很多行的话,这个列表中的内容不会很多的
好了,这是三字经,下面这个变量是三字经的全文
每三个字一句,作为一个元素,存在这个列表当中,下面这个是我们当前正在处理的四句一段
因为我要随机的将这四句打乱顺序出现
所以,这个列表是当前正在处理的,就是游戏进行当中,正在上升的这个文字块
所在的那个段里面四个句子,好,下面是得分,要记录我们这个游戏进展当中得分的情况
好,还有其他一些函数,这一讲,我们重点讲这个函数,stop_box这个函数
就是用来处理和判断上升的文字块碰到顶部或者碰到其他的文字块以后,我们所要实现的代码
当然,这个函数会被下面的draw函数来调用,也就是说,每隔六十分之一秒,这个画布的刷新函数 会调用我们刚才编写的这个函数
下面看看这个函数里面我们主要要实现的功能
好,首先我们回顾一下box这个类,因为我们的每一个文字块,都是通过box这个类来生成的
大家都知道类是对象生成的代码模板
我们重点观注一下这个类中的属性和一个重要的方法
有哪些属性呢,大家看一下,好,第一个属性,pos,这是来描述每一个文字块它具体 在画板当中的左上角的坐标,位置,包括x分量和y分量
下面第二个是文字块的宽度,紧接着是文字块的高度,再下面是文字块正在显示的三个字,是一句
下面是这个文字块,它正确的字序,一句话正确的字序
再下面,是表明这个文字块是在上升还有已经停止了
如果是true,表示正在向上移动,如果是false,表明已经停止了
再下面,processed,这个属性如果是false,表明这个上升的文字块它碰到 了停止条件处,我们还没有对它处理
如果是true,我们已经对它处理过
下面是,这个文字块它的次序,就是它停止以后,它现在位于第一第二第三,还是第四
下面是它是否处在正确的次序,句子的次序是否正确,好了,这个方法 是用来判断当前这个文字块和上升的文字块是否发生了碰撞
注意,当自己,是静止的文字块和上升的文字块去判断是否发生了碰撞
这是box类当中重要的一些东西,好,对这个类属性和方法熟悉以后呢
我们再来看看stop_box 这个函数,我们在这个函数里面,究竟要做哪些事情才能完成上升的文字块
满足停止条件后,我们所要做的所有的功能从而实现游戏的逻辑,这个函数的名字叫stop_box
有两个参数,第一个参数,group是指的有静止的文字块,它的列表,而moving_box是正在上升的那一个文字块
好,这有两个参数,代表两类文字块,前面是所有静止的文字块,后面是正在上升的文字块
好了,这个函数,我们首先要判断停止的条件
如果停止的条件满足后,我们做下面相应的处理
否则,这个函数什么也不做,看一下,停止条件是什么,停止条件是,上升的文字块的Y坐标,它的值为0
这表明,上升的文字块已经碰到了顶端或者是上升的文字块与任何一个静止的文字块发生了碰撞
这两种情况下都必须停止,当然,同时,还要满足一个条件,我们对它没有处理
停止的条件已经满足,但同时,它还必须是没有处理过的
如果已经处理过了,我们当然也不需要做任何的工作
好,看看一旦停止条件满足以后,我们要做什么事情
所做的事情在这些代码里头
好,要做的第一件事情,将moving_box这个上升的文字块它的一个属性叫rising设置为false
就是它从上升的文字块变成了静止的文字块
一旦这个属性设置成false以后,它自己每个文字块有一个update属性,它的位置就不会再发生变化
然后,接下来要判断上升的文字块已经停止了,接下来,看这个文字块的字序是否正确
如果字序正确,要加5分,要更新得分
好,这个处理以后,看句序是否正确,如果句序正确,将这个文字块的proper_order设置为true
当然,它默认是true ,要判断句序是不是错误,如果错误,我就把它的的proper_order设为false
接下来,将这个正在处理的文字块添加到所有静止的文字块列表当中
接下来要判断是不是一段中的最后一句,一段是四句组成的,那是不是一段的最后一句
如果是一段中的最后一句, 那我们就要判断,这四句的字序和句序是否全部正确,如果正确,又要更新得分,加20分
并且要把这四句从group这个列表中删除出去,以实现那一行消除的功能
好,这个工作做完了以后,下面来判断停止块最高的累计是否达到了10行
如果达到10行,将game_over这个全局变量设置为true,一旦这个变量设置为true,意味着游戏结束
如果没有达到10行,那就将has_rising_box设置为false
因为我们当前正在上升文字块,我们已经变成了停止块
换句话说,我们的游戏当中,现在没有上升的文字块了,所以把有没有上升的文字块这个变量设置为true
这样呢,另外一个函数产生一个文字块的函数,就会产生一个新 的文字块出来,最后将当前我们正在处理的这个文字块的processed设为true
那处理过了,这样一来,我们整个函数的功能就完成了
但是,这里要注意一下,这里与静止的块发生碰撞,就是我们当前正在处理的文字块, 它是上升的文字块,静止的条件也满足,它要和所有的静止的文字块去判断有没有发生碰撞
这里我们直接判断是做不到的
因此,还要自己再编写一个辅助函数来判断它和所有的静止块是不是发生了碰撞
这个函数返回true或者false ,返回true表示有碰撞发生,返回false表示没有碰撞发生
这是大家要注意的
还有,如果最后四句的字序完全正确,这个条件我们直接用一句话判断也是有困难的,因此,我们可能也要设计一个新的辅助函数
这个函数给的参数是group就是所有静止的块,然后能返回true或false, 就是判断最后四句是不是自序和句序全部正确
如果全部正确返回true ,如果不是全部正确就返回false ,这里可以设计一个非常小的辅助函数来完成
还有一个,就是从group 上删除最后四句,这个一个语句可能实现起来有困难
也需要我们去编写一个小的辅助函数来完成这个功能
剩下的应该都能转换成相应的python语句
好了,我想 这个函数当中所要描述的算法,已经给出来了
同学们结合我们前几讲的内容在熟悉box_class这个定义的基础上应该能够实现这样的功能,好,欢迎大家收看,咱们下次再见
-课程简介
--课程简介
-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周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板