连载11|定时器和动画(上)
(续)
看着被点亮的7个关卡,大卫的心里泛起一阵自豪与自信,想着还有最后3个关卡,大卫的脚步更加轻快。虽然他还不足以改变世界,但是他在慢慢改变自己,这一路的成长是他来到300年前收获最宝贵的经验,他从一无所知到渐渐建立了编程意识,到开始独立思考,遇到问题第一时间从来不会想着去依赖别人,这些点滴的改变让他逐渐有信心去做人类辉煌文明的继承者和接力者。
这时,卡尔朝大卫走了过来,大卫询问起第8个关卡是否有消息,卡尔摇摇头,并让大卫再耐心等等。
“你可以玩一会游戏放松下”卡尔随口说道“我来看看最近的游戏排行榜都有哪些好玩的游戏”,说着,卡尔打开游戏排行界面,排在第一名的是一款“寻宝”游戏。卡尔随口说了一声指令“download(下载)”,游戏下载的速度非常快。大卫在他的世界中从来没有玩过游戏,因此这样的体验对他来说太过新奇。
“这也是人类创造出来的吗?”大卫问道。
“是的,这款游戏应该也有机器人的功劳,比如一些策略的优化,这都是机器人不断学习之后得出的最优方案。”卡尔用专业的术语解释道。
大卫虽然不完全明白卡尔的意思,但是他知道,人类的文明曾经如此辉煌灿烂过,他心底里想要重建人类家园的愿望更加迫切和强烈了。
“其实,我们人类的天性是爱玩游戏的,很多技能和知识的学习也可以从游戏中获得”乔走了过来加入了大卫的游戏。
大卫点点头“就我所知,我的族人都很厌恶游戏,因为是游戏让他们不务正业,最终,我们变成了机器人的阶下囚。”
图1(图片来源于网络)
“游戏固然有他的好处,比如帮助我们解压,让我们娱乐,但是如果一味沉浸在游戏的世界中,显然不是明智的做法,我更倾向于我们能够从游戏中学到什么?比如当我在玩游戏的时候,我会去观察游戏策略的设计,游戏故事背景的编排,游戏界面的设计。一款好的游戏为什么能够吸引人,一定是这些方面做得很好。那我们能不能把这些优点借鉴参考呢?”乔说完,一局游戏已经结束。乔潇洒地得到了top 1。
大卫佩服地看着乔,仔细回味乔刚才说的那一番话,似乎明白了一些什么道理。
此时,时光穿梭机已经将第8个关卡的线索传输回来,这次的线索依然是视频形式,只见视频中有一个球从屏幕中的左上角一直运动到屏幕的右下角,与之前的乌龟画图不太一样,这次视频中的球不再是图形格式,倒是像早已经画好的一幅图片。
“这次的解决方法可能跟乌龟画图的解决方法不一样”大卫有种预感。
“之前的图形问题基本上是使用turtle库来解决的,但是turtle库在运行的时候太慢了以至于无法用大量的动画或者移动对象。”乔在一旁解释道,他喝了一口水接着说:“还记得在披萨计算器以及猜数字游戏关卡的时候,我们都使用文字形式让用户与计算机进行交互。文字形式的交互只能进行简单的操作,对于一些更为复杂的操作却不够友好,这就诞生了图形化用户界面。图形化用户界面(Graphical User Interface,GUI)包括了你在计算机屏幕上所能见到的所有按钮、图标、菜单和窗口,图形化界面正是我们和计算机交互的方式。比如,在刚才的游戏中,当你按下按键、移动鼠标或点击的时候,之所以能够发生一些动作,比如跳跃、走动,唯一原因是程序安装了GUI。和turtle库一样,Pygame也是可视化的,经常用来设计游戏、动画的GUI,用Pygame设计的游戏可以移植到不同的操作系统中。”
“什么叫移植呢?”大卫听到这里有点不明白。
“在信息技术中,移植是指从从使用一个操作系统环境到另一个操作系统的过程。”卡尔在一边补充道,:“比如用pygame设计的游戏既可以在windows系统中运行,也可以顺利地在Mac系统中运行,还可以在Linux等其他操作系统中运行。”
大卫听了这么多,他意识到之所以乔和卡尔会跟他解释这么多,一定跟解决关卡有关系。也就是说这次的关卡解决是通过Pygame这个库来突破的。
“使用Pygame跟使用turtle库一样呢?是不是只需要import(导入)就可以了呢?”过去的经验积累让大卫养成了一种潜意识,那就是解决一个新问题,最好从跟已知的解决办法进行关联会更快找到切入点。
“Pygame模块跟turtle库不太一样,需要先下载安装才可以使用,具体的安装方法,以windows为例,以管理员身份运行cmd,进入到命令提示符窗口,执行命令 pip install pygame”卡尔提示道“你可以试一下”
在卡尔的帮助下,大卫很快就装好了Pygame模块。
图2 在命令提示符窗口输入pip install pygame
图3 安装过程
“怎么知道安装成功了呢?”大卫问道。
“试一试在windows中以管理员身份运行cmd,执行
python -m pygame.examples.aliens大卫照着卡尔的提示开始测试,结果出现了一个游戏界面。
图4 pygame自带的游戏
“能看到这个界面,就说明已经成功安装pygame了”卡尔在一边祝贺大卫。
“好了,既然你已经安装好了pygame模块,可以用pygame模块编写一个简单的图形界面了”乔走过来。“相信它会为你破解关卡奠定基础。”
“你可以从Hello World开始”乔提醒大卫,正说着,乔在一旁的电脑中演示了一段代码。
import pygamepygame.init()screen=pygame.display.set_mode((600,600))pygame.display.set_caption("Hello Wold")keep_going=Truewhile keep_going:for event in pygame.event.get():if event.type==pygame.QUIT:keep_going=Falsepygame.display.update()pygame.quit()向右滑动查看完整代码
乔输完代码,熟练得按住“保存”按钮,紧接着按住F5运行代码,弹出了一个带有“Hello World”标题窗口的界面,点击窗口右边的关闭按钮,窗口便退出了。
图5 用pygame编程实现的“Hello World”窗口
“这就是用pygame编写的图形界面吗?只是这儿什么也没有。”大卫略有所思。
“第1行表示导入pygame库,只有这样,你才可以使用pygame库中的函数;
第2行初始化pygame,每次想要使用pygame的时候,我们都要调用pygame.init(),而且它总是要出现在import pygame命令之后而在任何其他pygame函数之前;
第3行表示创建了一个宽600像素,高600像素的显示窗口,我们将该窗口存储在screen变量中;
第4行是将窗口的标题设置为Hello World。”乔在一旁为大卫解释。
“While True是什么用法?”还没等到乔解释,大卫便提出了问题。
“while循环是游戏循环,它将持续运行pygame窗口,直到用户选择退出。”卡尔在一旁为大卫解释道。“第5行是一个赋值语句,将True这个真值赋给keep_going这个逻辑变量,第6行进行while循环,如果keep_going一直为真,则不退出。”
“如何判断用户要退出呢?”大卫很疑惑。
“这就是后面for循环要做的事情了,for event in pygame.event.get(): 这句话执行的功能是从pygame的事件队列中取出事件,例如键盘按下便是一个事件。”卡尔条理清晰地为大卫解释着。
“我看出来了 if event.type==pygame.QUIT: 这句代码的意思是好像是判断是否要退出。”大卫猜测到。
“这句话是在判断事件类型是否为退出,event.type是事件类型,也就是说用户是否点击了关闭窗口,如果用户触发了关闭窗口事件,如果是这样的话,接下来将keep_going设置为False,游戏循环结束。”卡尔继续为大卫进一步补充道。
“ pygame.display.update() 是更新的意思吗?”大卫问道。
“这句代码是指对显示窗口进行更新,默认窗口全部重绘,update()函数告诉pygame用绘制修改来刷新屏幕。”卡尔补充道。
“quit是退出的意思,所以最后一句应该是退出程序。”大卫大胆地猜测。
“最后一句代码很好理解,一旦游戏循环结束,游戏便会退出。pygame.quit()命令的作用是清除pygame模块,这个动作会撤销之前init做的所有设置,并且会关闭screen窗口。”
“这几段代码就是pygame最小编程框架”乔总结道,“明白了最小编程框架,你就可以在此基础上根据线索去拓展了。”
《定时器和动画》(上)结束,敬请期待《定时器和动画》(下)
我是今日小结:
1.pygame模块需要先下载才能使用;
2.pygame模块的下载命令为:pip install pygame;
3.每次想要使用pygame的时候,我们都要调用pygame.init();
4.while循环是游戏循环,它将持续运行pygame窗口,直到用户选择退出。
Python教育读本
连载系列:
来自“黑暗森林”的求救信
连载2|寻找万能钥匙
连载3|找到万能钥匙
连载4|what is turtle海龟程序
连载5|pizza calculator披萨计算器
连载6|flower of friendship友谊之花
连载7|体验虚拟现实
连载8|crazy bubble疯狂的泡泡
连载9|Guessing Game猜数字游戏
连载10|友谊之花的盒子——函数
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com