当前课程知识点:Python 交互式程序设计导论 >  第7周 >  A 课程视频(类进阶及文件操作) >  文字块类

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

文字块类在线视频

文字块类

下一节:处理停止的文字块

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

文字块类课程教案、知识点、字幕

本周各位同学将完成的实践项目是“决战三字经”

那么这个项目呢,比前面几周同学所完成项目的难度要略大一点

所以呢,在本次视频中以及随后的几次视频中

我们会把这个项目拆成几个部分,把其中最重要的内容给大家做详细的介绍

好,今天呢,我们主要围绕这个项目讲述的是

文字块类这样一部分,好,开始今天的内容

可能有的同学对三字经并不熟悉,也不清楚

我们为什么会出决战三字经这样一个游戏项目

那么为了让大家尽快的熟悉这个项目呢

我首先来介绍一下三字经的相关背景知识,在中国古代啊

《三字经》,《百家姓》《千字文》和《千家诗》合称“三百千千”

是古代的启蒙教育非常著名的教材,南宋以来已经有七百多年的历史

那么三字经啊,是中华民族珍贵的文化遗产,它的核心思想

包括了“仁、义、诚、敬、孝”

三字经独特的思想价值和文化魅力为世人所公认

90年,新加坡出版的英文版的《三字经》

被联合国教科文组织选入了“儿童道德丛书”,在世界范围内推广

可以这么讲,三字经不仅是中华民族的珍贵的文化遗产

它也是全世界的珍贵的精神财富

在这里呢,我从中摘取了两段,我们来看一下

“人之初,性本善,性相近,习相远”它的含义是

人在刚出生的时候啊,本性都是善良的,只是由于生长过程中

后天的学习生活环境不一样,性情也就有了好与坏的差别

那么,第二段呢,是跟我们教育有关的

“养不教,父之过,教不严,师之惰,”它的含义是

仅仅供养儿女的吃穿,而不好好教育,是父母的过错

只是教育,但不严格要求,就是做老师的懒惰了

从这个意义上来讲,我们课程组的全体老师都不是懒惰的老师

所以自然会对大家严格要求,这里呢,是一个游戏运行的截图

那我们先简单的介绍一下游戏的玩法和基本的规则

大家来看一下,在我们这个截图上啊,我们定义

每三个字这样一块,一个矩形的块,我们称之为一个“文字块”

在程序中呢是Box这个类来定义的

那么,每四块或者每四句叫一段,叫section

那比如说,我们来看,这一块,这一块,教不严这一块

还有师之惰这一块,这四块构成了一段

它的基本计分规则是这样的,如果在一块中,比如说,养不教

这个显示的字序是正确的,在实际的三字经中,它就是养不教

那么这个时候呢,你会加5分,分数会在这里显示,啊,在这里显示

那么在一段当中的四句,如果句序也是正确的

就是句子的排列顺序也是正确的,比如说,我们以刚才这个为例

四块内容,你就按照,养不教,父之过,教不严,师之惰

这个顺序排列的话,你可以得到20分

那显然要想得到高分同学们必须对三字经本身的内容非常熟悉才可以

那怎么玩呢,在程序一启动啊,从游戏的界面的下方

随机的位置上会生成一个文字块,注意

我所说的随机位置呢,是指的四列当中的某一列

大家看,实际上,我把游戏界面分成了四列,分成了四列

我们来拿笔划一下,大家看,实际上分成了四列

那么,游戏一开始,某一块文字块呢会从其中的某一列生成

并且以固定的速度向上运动,这个时候里面的内容呢

文字内容呢,可能是错误的,比如说我们以"父之过"为例

我们以"父之过"为例,它在一生成的时候呢

可能是过之父,过之父啊这个乱序的错误的一个顺序

那么在上升的过程当中,我们可以通过键盘的左右键,使得

这个文字块的水平位置发生变化,可以在这四列当中不断的跳转

我们还可以通过空格键来改变一块文字的字序,字序

你敲一下空格,这里面的文字顺序会发生变化

那也可能会变成了父之过,也可能变成了之过父,等等

我们的目的就是把这里面的字序调整正确

并且通过左右键把它放到相应的位置上去

使得一段当中的四句也是正确的

这就是我们游戏基本的玩法和一些基本规则

那么还有一点我想强调的是,大家想一想

这样一个文字块,在上升过程当中,什么时候会停止

两种情况,那么,当文字块上升过程中碰触到了

已经停止的这样一堆文字块的某些文字块的下沿的时候

下边沿的时候,这个文字块会停止,或者是

它是第一块,第二块文字块碰触到了整个游戏界面的最上边的时候

比如说养不教,它是碰到了这个边界的时候也会停止

这是它的停止条件,啊,这点也非常重要,这点也非常重要

那么,什么时候这个游戏算是失败或者成功呢

判断它失败的条件非常简单,当这个文字块累加到10行的时候

累加到10行的时候,那么游戏失败,什么时候算做成功呢

当三字经的所有的文字内容都全部显示完了并且都没有超过10行

因为它每生成一段,如果句序是正确的它会消失

所以呢就像俄罗斯方块一样它会不断地把行数缩减

那么当文字的所有内容都显示完毕你又没有超过10行的时候

这个时候游戏就算成功,整个游戏它的计分规则,玩法

包括失败和成功的条件就是这样,那么我们今天关注的是什么呢

为了实现上述的功能,一个文字块究竟该怎么定义

大家想一想,比如说我就来看教不严这样一个文字块怎么来定义

显然在游戏界面中会生成很多的文字块,那这个文字块

该由哪些属性来描述,又该由哪些操作方法来控制它呢

这就是我们今天关注的焦点,好,那么同学们在

这个项目的模板当中啊,实际上我们已经给了基本的框架

我把它精简一下,大家看一下啊,就是这样一个基本结构

我们来给大家详细描述一下,好,大家来看在这个Class Box当中

这个Box就对应的是文字块,定义了很多的方法

其中我们首先来看init这个方法,它表示的是初始化的方法

在面向对象的程序设计中,前面的课程当中已经介绍过

这里面呢包含了很多的参数,大家看

除了self这个特殊参数咱们不讨论以外,我们来看,有pos

有width,有height,有sentence

还有correct_sentence,还有order

一共有1,2,3,4,5,6,6个参数

并且在init这个初始化方法里面把这六个参数呢

分别赋予了它相应的属性,那我们在这就不说了

这一段话就是在赋予它相应的属性

那么我们要讨论的第一个问题是,为什么我们定义的一个文字块

需要有这六个属性来描述,这六个属性究竟是什么含义

好,我下面一一介绍,首先我们来看pos

从字面上理解它就是位置,好,那大家来看,这样一个文字块呢

实际上是由两部分来构成的,第一部分呢就是这样一个矩形块

啊,一个长方形,还有一部分呢是其中的文字,比如说

我们举个例子叫父之过,好,我们来看一下

这样一个文字块,它由两部分组成,一个是图形的这个矩形块

另外一个是文字本身,那下面的问题来了

这样一个两部分组成的文字块,我们要绘制在屏幕上

它需要有相应的参数,比如说,我们要绘制这样一个矩形

实际上可以通过很多种方法,我们在程序中呢

推荐大家可以用canvas底下的draw_polinger这个方法

那么绘制这样一个矩形,那么这个点的坐标就非常关键了

非常关键,它决定了整个矩形块的位置

那么这个文字的内容呢实际上它的位置呢跟这个点也是有关系的

大家想一想,我整个文字块向上移动的时候

文字必须跟后面的背景的这样一个矩形块得同步

它们俩得以同样的速度向上移动,所以呢这个点的坐标就很重要

那么这个pos就是来描述这个点的坐标的

好,下面这两个参数很好理解

一个是width,一个是height,分别指的是

块的宽度,宽度,还有一个指的是块的高度

那么大家想一想,有了左上角这个点的坐标pos

又有了宽度和高度,width和height

那这个时候四个点我都可以计算出来,我们就可以用

draw_polinger这个方法来绘制这个图形

来绘制这个图形,所以呢前三个参数呢实际上是

要把它绘制在屏幕上的一些相关信息,后面我们来看一下

这个sentence和correct_sentence呢

是一对属性是一对参数,其中correct_sentence

顾名思义它存放的是正确的字序的字符串,比如说

我们存放的是父之过,而这个sentence呢,参数呢

里面存放的实际上是文字块中显示的字序,有可能是错误的

比如说初始化的时候也可能是之父过,换句话说

这个sentence参数存储的是文字块中显示的文字

而correct_sentence这个参数呢存储的是正确的字序

这个时候我们只需要判断这两个字符串是否相等

就可以来判断这个文字块你是否能得5分,大家想一想

当sentence和correct_sentence相等的时候

证明你通过空格调整字序是正确的,所以我要加5分

如果不正确,那显然,不会加这5分

所以这两个参数主要是来做这个工作的,下面order

order是干什么呢,从字面上理解,它是顺序,次序的意思

大家可以想一想,在我们的计分规则中啊

有一个是四句或者是四个文字块,四个文字块如果排列正确

比如说我们,1,人之初,性本善,性相近,习相远

你是按照这个顺序把它放在一行,当这个情况出现,它会加20分,并且

这行会在屏幕中消除,啊,消除,像俄罗斯方块一样的游戏规则

那么我们怎么判断这四块位置你是否摆放正确了呢,就是把

每一块的正确的order啊,顺序啊,记录在这里,记录在这里

当你实际的这个文字块停止的时候,它来计算你的左上角的坐标

通过坐标计算出你的位置是否正确

与这个order里面存放的正确次序匹配

如果一致,会给你加20分,并且消除这一行,否则的话呢

不会给你加分,这一行呢就会累加在屏幕中,这就是6个参数

实际上赋予这样一个Box对象的6个属性,他们的作用

下面呢,我们来看第二个问题,就是Box类当中

应该有哪些操作方法,在我们的程序模板当中这些方法呢

它的名字和定义框架是给大家的,我们需要填写里面的内容

那么我们就要研究一下这些方法应该完成什么功能

好,我们来看第一个,shuffle_sentence

从字面上理解,shuffle这个函数是什么意思啊

实际上是随机生成字符串的字符顺序,也就是打乱它的顺序

那它的含义是当你生成一个文字块你会知道它的正确的字序是什么

比如说,我知道他的正确的字序叫,父之过

但是呢,在游戏界面生成的时候

我会随机生成这个字序,会随机生成这个字序

这个方法就是用来生成随机字序的这样一个字符串

显示的时候也可能显示成了过之父,实际上在程序当中

它是调用另外一个辅助函数来完成的

那么辅助函数呢又调用了呃,在前面,呃,给大家讲过的

这个random.shuffle这个函数

同学们如果忘了大家可以回头看一下之前的一个视频

我再强调一下,shuffle_sentence这个方法实际上

调用了一个辅助函数,而这个辅助函数呢

又实际上调用了我们在前面讲过的

随机函数部分random.shuffle这个方法

好,我们来看第二个,这个方法呢除了self以外

还有一个参数叫moving_object,它是什么含义呢

它是用来检测碰撞的

比如说,我们在游戏界面当中已经累加了很多的块,有一个块呢

正在上升过程中,那么这个方法,就是用来判断这些已经停止的块

某个停止的块跟这个正在上升的块是否发生碰撞

大家可以想一想,什么情况下会发生碰撞呢,大家想一想

其实很简单,首先正在上升的块的上边沿会与

已经停止的某一块的下边沿重叠,其实就是坐标的计算了

除此之外,这两块还必须在一列中,大家还记得

我们实际上是把屏幕划分成了四列,对吗

它们俩如果要发生碰撞

必须保证上边沿和下边沿重叠并且呢在同一个列当中

这些操作都可以通过左上角的这样一个坐标计算得到

这就是我们第二个方法,啊,第二个方法

这个坐标的计算非常容易,大家可以想一想

这个点的纵坐标加上它的高度刚好等于这个点的纵坐标

那么就说明两个边缘是重叠的,并且他们俩的横坐标是一致的

这个时候就说明他们两个在一列当中

下面我们来看draw这个方法,draw方法呢

顾名思义,就是把这个块呢绘制在屏幕中

绘制的时候呢,大家注意啊,我再次强调

这个块呢是由两部分组成,要绘制这个块

我们用的是draw_polinger这个方法

那么要绘制其中的文字,比如说,父之过

这个时候呢,父过之

这个时候用到的是draw_text这个方法

那么绘制这两个部分的函数或者方法呢

大家可以参考一下我们教材后面的参考资料部分

或者在网上获得帮助,在这我就不多说了

当然,如果做得再好一点

同学们应该判断一下,如果字序正确我的背景是绿色的

如果字序不正确,我的背景是红色的,这是一个颜色的修改

那这个对大家来讲只需要增加一个if语句判断一下就可以了

那么最后一个方法呢叫update,很简单啊,顾名思义

它实际上是更新这个文字块的坐标位置,大家想一想

这个文字块呢要不断地向上移动,它如果向上移动

实际上是修改这个点坐标的y分量,对吧,修改这y分量

那么在draw函数当中,在draw函数当中每一秒执行60次

这个时候呢就会看到这个文字块向上移动的这样一个动态效果

好了,总结一下,我们今天呢主要关注的是“决战三字经”

这个游戏项目中文字块类的实现,那么文字块类的实现呢

其实又包括了两个部分,就是这个类本身需要哪些属性

才能把这个对象或者这个类描述清楚

第二部分呢,是它需要哪些操作功能才能使得这个文字块实现

或者完成我游戏当中所要的一些操作

那么建议大家,认真阅读在网上给大家提供的该项目的文档

以及获取在线帮助和教材上的相关内容

好,今天的课就讲到这里

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周--小测验

-本周项目:守卫家园

--游戏说明

--程序说明

--编程步骤

--评分标准

--项目模板

文字块类笔记与讨论

也许你还感兴趣的课程:

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