当前课程知识点:Python 交互式程序设计导论 >  第7周 >  B 课程视频(游戏状态控制) >  游戏结束的条件及处理

返回《Python 交互式程序设计导论》慕课在线视频课程列表

游戏结束的条件及处理在线视频

游戏结束的条件及处理

下一节:编程技巧

返回《Python 交互式程序设计导论》慕课在线视频列表

游戏结束的条件及处理课程教案、知识点、字幕

各位同学大家好

欢迎回到Python程序交互式课程中

经过前几次课程的讲解

相信同学们对于决战三字经这个游戏项目, 已经有了一些初步的认识

今天我们要研究其中一个重要的组成部分

游戏结束的条件,以及相应的处理

好,下面开始今天的内容

在讨论“决战三字经”这个游戏结束条件及处理之前, 我们首先运行这个程序

可能在前面的课程中,已经有老师给大家演示过这个程序

我们在这重点看一下,什么样的条件,导致(游戏)程序结束, 我们首先来运行一下

这时候文字块上升速度很慢,这个游戏结束,可能时间很长, 我们调整下游戏速度

把-1改成-5,这里的-(负号)表示由下向上运动, 我们再来运行下这个程序

好,大家看,我为了使它快速结束,我把所有的文字块落在一起

第六块,第七块,第八块...好,结束了

大家看,这个结束条件是文字块超过10块以上,会导致游戏结束

那么处理这样的结束条件以外,还有什么情况下会结束呢, 大家可以想象

假设我对三字经的文字内容非常熟悉,所有的文字块, 我都把它调整好顺序,并且能够消除这一行

使得整个三字经的所有的文字块全部显示完毕, 它都没有累加到10行

这个时候呢,实际上是游戏成功结束, 当然你可以得到一个很高的分数

那么大家看,当游戏结束以后,我的游戏应该做哪些收尾工作呢, 大家看

直观上来看,首先,原先这些已经停止的文字块会消失

第二,会显示游戏结束的提示信息

除此之外呢,大家想一想,这个时候敲击键盘的左右键, 还可能对文字块进行控制么?

显然不是,甚至它不会产生新的文字块

这是我们直观的感觉,那么我们下面在课件当中来看一下究竟

当游戏结束的时候,我们要做哪些收尾工作,我们来看一下

好,仍然是这个游戏的截图,我们要考虑两个问题

游戏结束的条件是什么?如果游戏结束我们要做哪些收尾工作?

那么第一个问题呢,实际上刚才我们已经得到结论了:两种情况

一种情况是文字块累加的高度超过10行,游戏失败, 当然也是游戏结束了

那么还有一种情况是《三字经》的全文显示完毕,也就是所有的 文字块,都已经顺利的显示完毕

并且没有触发上一条件,也就是说没有累加到10行以上, 这个时候游戏成功,也算是结束

那么,不管是哪一种结束方式,我们实际上都要做 这样四项收尾工作

就是游戏结束了,我们需要做哪些操作

首先,不再绘制屏幕上的文字块,大家考虑下, 这主要是指屏幕上已经停止的文字块

第二,不再生成新的文字块,就是界面的下方再不会 生成新的文字块

第三,显示“游戏结束"提示信息

这个同学们可以想象下,非常简单, 只需要用draw_text来输出文字串就可以了

那么第四项是屏蔽键盘操作,这个时候你敲击键盘是 没有用的,这四项工作

那么我们可以考虑一下,如何判断这个两个游戏结束条件

如何处理这些操作

并且把这些处理放到哪个代码模块中,这是我们今天要讲 的重点内容

好了,我们切换到PyCharm的实际开发环境 中来给大家做讲解

为了让大家对这个程序结构有一个更加清晰的了解和认识

我会把一些函数的代码折叠起来,并且给每个 函数简短的注释和说明

告诉你这个函数主要完成什么工作,我们来看一下

首先我们考虑下,如何判断文字块累计超过10行, 大家可以想象

我们看一下幻灯片里面的这张图

我们来看下这张图

我如果想判断是否累计到了10行,实际上非常简单

当一个文字块停止的时候,我来算一下,这个文字块的左上角的坐标

它的纵轴分量,就是y分量

它的值如果恰好等于0,一直到10倍的文字块高度

它如果恰好等于,当然你写大于等于,也是可以的, 那么这个时候它就已经到11块了

大家想想,是不是这道理

如果它是第11块,上面就已经累计有10块

那么这个点的纵坐标应该是10倍的height (文字块的高度)

这个条件非常容易判断,实际上通过我的描述

这个判断我应该放在哪个逻辑代码块当中才行了,大家考虑一下

显然我们应该放到哪里呢

我们应该把它放到检测文字块停止事件里,大家想一下, 为什么呢?

因为stop_box这个函数,就是当文字块停止的时候

会触发里面的逻辑代码,会执行里面的逻辑代码

那么大家想一想,当一个文字块一停止的时候

我就要检测它的左上角的点的坐标的y轴分量是否大于等于10倍的文字块高度

如果这个条件成立,实际上就说明这已经是第11行了

这个时候我就要告诉程序,游戏结束

那下面的问题是我如何表示这个游戏结束

实际在我们这个程序框架中, 已经给大家一个全局变量叫game_over

game_over这个全局变量, 它的实际意义是游戏是否结束的一个一个标志

初始状况下,我赋值为False

那么当我们检测到上升的文字块停止, 并且已经是第11行的时候

我们就会把game_over这个标志置为True

告诉程序游戏结束了

那么我们就会触发下面一系列的动作来完成收尾工作

这是第一个条件,大家思考一下

我们再回过头来看这样一张图

第二个游戏结束条件是所有的文字块内容全部显示完毕, 还依然没有超过10行

那很简单,我只需要判断存储三字经所有文字块 的列表是否已经为空了

为空说明,所有的元素,所有的文字块都已经输出完毕了

那么大家想想,这个逻辑判断应该放在哪个代码块当中呢

我们回到给大家的模板当中,我们来看一下

大家看,在我们项目文档当中说的非常清楚

这个函数是用来生成新的一段(四句),三字经的四个文字块, 并随机排列的这样一个函数

这个函数的主要作用,就是从保存全部这样一个文字块的列表当中

取出前四句组成一个新的section,一个新的段

当保存所有文字块这样一个列表为空的时候, 表面整个程序应该结束了,实际上所有文字块都已经输出了

好,我们来看一下,在全局变量里面,我们有这样一个全局变量

它是个列表它里面保存了三字经的全文,每句为一个列表元素

那在刚才的这个函数里面实际上每次就会从这个全局变量里面, 取出前四句

组成一个section,赋给这个全局变量(current_section_list)

在这注释的是当前段落的文字列表,实际上是四句

那么当我所有的文字块全部都正常输出了, 那么这个时候就说明游戏结束

实际上是游戏成功了

这个逻辑代码呢,大家想想,是不是应该在这个里面 有个条件判断呢

这是我告诉大家游戏结束的两个条件, 以及这样的逻辑判断语句应该放在哪个逻辑块当中

下面我来讨论第二个大的问题

如果游戏结束了,我们需要做什么

在这里我们列出了四块,实际上在我们演出程序的过程中

当显示游戏结束的时候,是一片黑屏, 它在后台实际上完成了这样四项工作

同学们直观上也能感受的到

第一条,是不再绘制屏幕上的文字块, 大家知道绘制应该是在draw()函数底下

那么我怎么让它不再绘制呢

实际上恰恰用到了我们前面提到的一个全局变量, 叫game_over

我可以用一个简单的逻辑判断实现这样一个功能

在draw()函数中,只要判断game_over的值

如果game_over的值为True,说明游戏结束了

这个时候我就不再绘制屏幕上的文字块了

否则(else),我才去绘制文字块,等等

也就是说,我会通过game_over这个全局变量, 在draw()函数当中做一个简单判断

当game_over这个值为True,表示程序结束, 我就不再绘制了

否则,就是程序为结束,我就继续绘制屏幕上的文字块

这个逻辑代码非常简单,当然我们应该在draw() 函数底下去实现

因为大家知道draw()函数就是完成屏幕绘制的 这样一个逻辑模块

我们在来看,不再生成新的文字块

从逻辑上来讲,它也是这样一个语法结构

如果game_over这个全局变量为True,表示程序 结束,那么这个时候我就不会继续生成了,什么都不做

否则的话,我会不断创建文字块,创建一个新的文字块

那么这个代码应该放在那里呢,实际上就要切换到我们的PyCharm当中

再来看下程序结构,同学们就会非常清楚了

大家看,在我们的模板当中,实际上给了大家这样一个函数

叫box_spawner(),spawner在我前面的视频 当中解释过,叫产卵的鱼

实际上我这样命名呢,就是告诉大家这个函数 是用来创建文字块的,产生文字块的

那么也就是说我只需要在box_spawner() 这个函数当中

用if与game_over来进行判断

如果(if)game_over这个值是True, 那么我不创建,否则创建

这个函数会在计时器当中,每隔一秒执行一次

每秒钟调用box_spawner函数一次

所以判断是否产出新的文字块,这一项工作, 我们应该写在哪个逻辑模块中呢?

应该写在刚才给大家说的box_spawner() 这个函数中,上面这个写在draw()中

下面显示“游戏结束”这样一个提示信息,这非常简单, 我们只需要用draw_text就可以输出这个文字

第四个操作是屏蔽键盘操作,其实第四个操作 与上面两个操作是类似的

我们也是根据game_over的值来判断键盘的敲击 是否会触发相应的事件,我们来看一下

也是根据game_over全局变量的值来判断

在PyCharm当中看一下

大家看,我们的键盘敲击的函数叫keydown

它是在frame.set_keydown_handler(keydown) (即:键盘敲击的处理函数)中注册的

keydowm(参数)是函数名,他的逻辑代码是在这

那么在这里面,我也只需要加一个if 与game_over的判断

如果(if)game_over的值等于False,所有的键盘响应 才是有效的,否则是我就不响应

实际上否则,你可以什么都不干

在这里同学们可以感觉的到,我们实际上来判断 游戏结束的条件是一个比较容易的事情

但是这些游戏的结束判断条件应该放在哪个 代码块当中或是哪个函数当中比较合理

这是大家要考虑的一个问题

下面呢,如果游戏结束,我们需要做哪些处理工作

而这些处理工作实际上大部分工作都是 由一个叫game_over的全局变量来控制的

同学们要认真的看给大家提供的项目模板, 搞清楚每个函数和逻辑代码块之间的关系

再认真阅读给大家提供的文档和网上的一些帮助信息

同学们实现这样一个条件处理是非常容易的

好了,今天的课就讲到这里

Python 交互式程序设计导论课程列表:

第0周

-课程简介

--课程简介

-A 课程视频(算数操作符及表达式)

--绪论

--Python交互式解释器使用方法

--PyCharm集成开发环境介绍

--算数操作符及表达式

-B 课程视频(变量及赋值)

--变量

--项目提交

--“我喜欢Python”热身小项目

-C 辅助视频(计算机结构、Python开发环境安装)

--Windows平台安装Python开发环境

--Mac平台安装Python开发环境

-D 辅助视频(如何提交项目)

--项目提交

-第0周--小测验

-本周项目:"我喜欢Python"

--项目发布、完成、提交及评分流程

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

--项目提交

第1周

-A 课程视频(函数)

--函数

--其它操作符

--随机函数

-B 课程视频(逻辑及表达式)

--逻辑值和比较

--条件

--编程技巧

--“老虎杠子鸡虫”游戏

-第1周--小测验

-本周项目:“老虎杠子鸡虫”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第2周

-A 课程视频(Python交互式应用)

--事件驱动编程

--事件可视化跟踪执行

--SimpleGUITk

--按钮

-B 课程视频(输入框、全局变量)

--输入框

--局部变量和全局变量

--编程技巧

--“猫咪藏在哪个房间”游戏

-第2周--小测验A

-第2周--小测验B

-本周项目:猫咪藏在哪个房间

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第3周

-A 课程视频(画布绘图)

--画布和图形绘制

--字符串处理

--绘图和计时器可视化跟踪执行

--图片和音效

-B 课程视频(计时器)

--计时器

--交互式绘图

--“神奇时钟”游戏

--编程技巧

-第3周--小测验A

-第3周--小测验B

-本周项目:“神奇时钟”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第4周

-A 课程视频(列表)

--列表

--键盘输入

--列表及变化可视化跟踪执行

--碰撞和反射

-B 课程视频(键盘控制)

--速度控制

--运动

--编程技巧

--“桌上冰球”游戏

-第4周--小测验A

-第4周--小测验B

-本周项目:“桌上冰球”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第5周

-A 课程视频(鼠标输入、列表进阶)

--鼠标输入

--Video

--Video

--Video

-B 课程视频(字典和图片)

--Video

--Video

--Video

--Video

-第5周--小测验A

-第5周--小测验B

-本周项目:“世界杯八强连连看”

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第6周

-A 课程视频(类)

--面向对象编程(类和对象入门)

--面向对象编程(类和对象进阶)

--对象可视化跟踪执行

--华容道中的类

-B 课程视频(平铺图片)

--平铺图片

--理解对象

--编程技巧

--“华容道”游戏

-第6周--小测验A

-第6周--小测验B

-本周项目:“华容道”游戏

--游戏说明

--程序说明

--编码步骤

--评分标准

--项目模板

第7周

-A 课程视频(类进阶及文件操作)

--集合

--文件操作

--文字块类

--处理停止的文字块

-B 课程视频(游戏状态控制)

--游戏记分规则

--游戏结束的条件及处理

--编程技巧

--“决战三字经”游戏

-第7周--小测验A

-第7周--小测验B

-本周项目:决战三字经

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

第8周

-A、课程视屏(精灵集合)

--Video

--精灵类

--战士类

--编程技巧

-B、课程视屏(动画)

--精灵碰撞

--精灵动画

--编程技巧

--保卫家园游戏

-第8周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

游戏结束的条件及处理笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。