Python编写超级玛丽真的如此简单?不信你试试

Python编写超级玛丽真的如此简单?不信你试试_第1张图片

 

得益于Python简洁的语法和强大的扩展库,使用Python编写应用变得十分快捷方便。比如今天要介绍的一款经典游戏超级玛丽的编写,如果用其他语言可能要上千行代码,而使用Python最少只需两百多行就可完成。不信?那就让我们一起开始吧。

我们使用的扩展库是 Pygame Zero(简称Pgzero)。该库是一个基于Pygame的游戏编程框架。它可以更容易地编辑游戏,无需模板、不用编写事件循环,也无需学习复杂的Pygame API,而且支持树莓派。

安装:pip install pgzero

1

建立游戏场景

建立游戏窗口只需两行代码:

pgzrun. go

在Python自带的IDLE编辑器中输入上述代码,运行便可以看到一个游戏窗口

Python编写超级玛丽真的如此简单?不信你试试_第2张图片

 

如果想到调整窗口大小也很简单,只需再加入两行代码:

importpgzrun

HEIGHT= 640

WIDTH= 1024

pgzrun. go

现在我们想为窗口设置一个背景颜色,可以在Pgzero提供的draw函数中编写代码:

defdraw:

screen.fill(( 148, 146, 255))

上述代码用RGB颜色值(148, 146, 255)为游戏窗口生成了一个背景色,并自动显示出来,效果如下:

Python编写超级玛丽真的如此简单?不信你试试_第3张图片

 

接下来定义一个文本文件,把游戏场景中各种物体的位置用字母记录下来:

Python编写超级玛丽真的如此简单?不信你试试_第4张图片

 

然后在程序中编写代码来读取文件,在相应字符的位置处生成物体,并将生成的物体全部加入到列表objs中。

defdraw:

obj.draw

场景的最终显示效果如下:

Python编写超级玛丽真的如此简单?不信你试试_第5张图片

 

2

创建游戏角色

现在轮到主角隆重登场了。Pgzero中生成一个游戏角色十分简单,只需一行代码即可:

mario=Actor( "smario.png",( 200,HEIGHT- 120))

Actor类是Pgzero提供的角色类,调用该类的构造方法并传入角色图片和位置便可生成一个角色对象,同时在draw函数中显示该角色即可。修改后的draw函数如下:

defdraw:

obj.draw

mario.draw

现在看看效果:

Python编写超级玛丽真的如此简单?不信你试试_第6张图片

 

怎样?是不是还原度很高呢!

现在我们想让他动起来,比如按下空格键玛丽能跳跃,那怎么办呢?首先可以为玛丽对象设置一个属性vy来表示垂直方向的速度值:

mario.vy=0

然后使用Pgzero提供的键盘处理函数on_key_down,在其中加入如下代码:

defon_key_down(key):

mario.vy= -800

该函数会自动检测玩家的键盘按键事件,并将按键信息保存在key变量中。从代码中可以看到,当玩家按下的是SPACE键(即空格键),那么玛丽将获得一个垂直向上的速度值。

此外还要在Pgzero提供的update方法中编写代码:

defupdate(dt):

uy=mario.vy

mario.vy=mario.vy+ 2000.0*dt

mario.y=mario.y+(uy+mario.vy)* 0.5*dt

update也是Pgzero提供的一个内置函数,用来按固定的频率更新游戏逻辑,它和draw一道构成了基本的游戏循环。上述代码对玛丽的速度值vy和坐标值y进行了精细的控制,以便真实模拟跳跃时的重力效果。

如此一来,当玩家按下空格键时,玛丽便可以腾空而起,然后在重力作用下掉回到地面。对于玛丽的左右移动控制也与此类似,详情可以查阅源代码,这里不再赘述。

3

场景与角色的交互

最后编写代码实现场景与角色的交互,这样玛丽便能站在地面上,而且可以顶砖块、吃蘑菇、捡金币、踩怪物等等。

以吃金币为例,我们可以编写如下代码:

classCoin( Actor):

ifmario.colliderect( self):

sounds.coin.play

objs.remove( self)

mario.points=mario.points+ 1

我们首先定义了一个金币类Coin,它继承自Actor类。然后在其中定义了react方法,该方法判断玛丽是否“吃”到了金币,如果吃到则先播放一个音效,接着将金币对象从objs列表中移除,最后为玛丽增加一个游戏积分。

可以看到,Pgzero为我们提供了非常便捷的API来实现游戏基础功能,比如判断玛丽是否吃到金币,这实际上是个碰撞检测问题,只需调用colliderect方法即可,而不需要手动编制大量代码。同时播放声音也只用一行代码就可搞定,足见Pgzero是多么的方便。

游戏场景中其他物体与玛丽的交互与此类似,有兴趣的朋友可自行参阅代码。游戏最终运行效果如下:

  关于Python技术储备
Python学习路线汇总
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。


Python必备开发工具  

  精品Python学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

  温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

Python学习视频600合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

   实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。


100道Python练习题
检查学习结果。 
面试刷题

在这里插入图片描述
在这里插入图片描述

 结束语

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码【免费获取】。 

Python编写超级玛丽真的如此简单?不信你试试_第7张图片

你可能感兴趣的:(python,程序人生,面试,python,开发语言,经验分享,测试,职场和发展)