基于Python的PyGame实现的超级马里奥游戏

Reindeer

发布日期: 2019-02-22 18:03:28 浏览量: 736
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、选题

在《实践:数据结构与算法实践》中选择了“超级马里奥第一关”为最后作业的题目。

超级马里奥是红白机上的横版过关类游戏。

功能特性在于在实现人物移动的同时,要使背景的地图也要进行移动,还有砖块、怪物等其他要素也要进行移动,因为只有让两者一起进行移动,才能让人物和地图和其他的要素保持相对的位置。后期又加入了音效和美化了一下界面。

二、方案

该选题难题主要分为以下几点实现。

  • 实现了人物的动态移动效果。主要是使用了MyLibrary.py里精灵类来实现的,该类在继承pygame自带的基础类上,加入符合本游戏需要运作的相关代码。在主文件main.py中我使用了四个精灵去实现人物的移动:向左走、向右走、向左跳、向右跳。然后通过一些变量继承来让马里奥实现了在图上只有一个存在且能完成四个动作。但也因为我这样设计导致了后面难以使用Pygame的碰撞检测函数,改用了点坐标去判断,有点累赘。

  • 由于马里奥掉下坑和其他一些需要根据位图来判断地方和屏幕上直接绘图的数据时不同的。所以要实现人物移动的同时,要让地图、问号砖块、砖块、旗画在当前的屏幕上,以此必须要这些要素也实现相对的移动。当马里奥运行到屏幕中间时,屏幕会向左运动,而马里奥横坐标会固定在屏幕中间,以此形成一种马里奥在移动的错觉,其他的要素(问号砖块、怪物)也是在此条件下发现地图在进行相对移动时,这些要素也会进行向左移动,以此保证一种没有动的错觉。

  • 关于水管和其他三角形障碍物的判定,由于马里奥精灵是使用了四个精灵来实现的,所以使用pygame自带的碰撞检测的话也不是很好用,我就直接采用了点坐标判断的方式,为了能更直观的去写代码。

  • 在最后阶段,加碰砖块的特效、金币闪烁的特效,蘑菇出现的特效、所有的特效。这里也使用了精灵去实现特效。

  • 由于时间有限,最后并没有实现马里奥吃蘑菇变大和吃花变无敌的特效,很遗憾。

三、关键技术

关键技术分为以下几点:

  • 马里奥动态实现。马里奥动态实现时调用了四种不同的精灵去实现,根据键盘的不同反应会调用不同的精灵,以此实现了马里奥向左走、向右走、向左跳、向右跳的动态画面。这样写的好处是我可以实现空中变向和空中控制降落地点的原作没有的功能。

  • 碰撞检测。由于马里奥动态实现不是单个精灵的问题,这里是采用了点坐标判断的方式,也就是meetobstacle.py实现的代码相当多,数据也是很复杂。

  • 马里奥撞击问号砖块的判定问题和特效问题。也是有一个碰撞检测的函数去进行了判断,然后加载动画效果,再最后在原地方画上另外一种砖块。

  • 怪兽的移动、死亡、杀死马里奥。首先要实现怪物和马里奥之间相对距离随地图的改变而变化的问题,是地图移动时,怪物还是以一种原来的速度去移动。然后追加怪兽被踩时死亡效果和杀死马里奥的判定。

四、结果和效果

人物移动和跳跃的效果可能有点违和,没有实现原作的吃蘑菇升级功能和吃花无敌功能,额外实现了空中变向和可以玩家在跳跃时选择落地点的功能。

五、总结和不足

前两周的时候,我本来是打算实现超级马里奥,但发现运用c语言去实现的话问题会有很多,于是后来就选择了中国象棋。在稍微接触了一点Python和pygame的一些相关知识后,就决定用python去实现了这个之前有点遗憾的游戏。从结果上也可以看出,Python由于拥有功能更加完善和多样的库,所以使用Python去实现像超级马里奥之类的动作较多、场景较多的游戏是比C语言要更完善的。Python的库真的很多、很方便,利用好这些库的话,可以轻松实现C语言很难实现的功能。

不足之处是没有考虑到将判定的坐标进行变量化,而是直接用数据去进行了判定,如果在一开始考虑到这点的话,可以很轻松实现马里奥吃蘑菇变大的功能,但由于写到结尾才发现这个问题,所以就没有实现这个功能,是我一个很大的遗憾。

上传的附件 cloud_download 基于Python的PyGame实现的超级马里奥游戏.7z ( 3.76mb, 8次下载 )
error_outline 下载需要12点积分

keyboard_arrow_left上一篇 : 基于C++的文件管理系统 基于JavaFx的多线程葫芦娃打斗游戏 : 下一篇keyboard_arrow_right



Reindeer
2019-02-22 18:03:44
PyGame实现的超级马里奥游戏
小太阳
2019-05-14 15:28:32
能不能发一下源代码
Tenderne
2019-05-14 18:20:31
资源就在上面呀,老兄~~

发送私信

看见你笑眼一弯呀,所有天上的星星,就被叮叮当当地摇响

9
文章数
13
评论数
最近文章
eject