基于Python的PyGame实现的超级马里奥游戏
一、选题
在《实践:数据结构与算法实践》中选择了“超级马里奥第一关”为最后作业的题目。
超级马里奥是红白机上的横版过关类游戏。
功能特性在于在实现人物移动的同时,要使背景的地图也要进行移动,还有砖块、怪物等其他要素也要进行移动,因为只有让两者一起进行移动,才能让人物和地图和其他的要素保持相对的位置。后期又加入了音效和美化了一下界面。
二、方案
该选题难题主要分为以下几点实现。
-
实现了人物的动态移动效果。主要是使用了MyLibrary.py里精灵类来实现的,该类在继承pygame自带的基础类上,加入符合本游戏需要运作的相关代码。在主文件main.py中我使用了四个精灵去实现人物的移动:向左走、向右走、向左跳、向右跳。然后通过一些变量继承来让马里奥实现了在图上只有一个存在且能完成四个动作。但也因为我这样设计导致了后面难以使用Pygame的碰撞检测函数,改用了点坐标去判断,有点累赘。
-
由于马里奥掉下坑和其他一些需要根据位图来判断地方和屏幕上直接绘图的数据时不同的。所以要实现人物移动的同时,要让地图、问号砖块、砖块、旗画在当前的屏幕上,以此必须要这些要素也实现相对的移动。当马里奥运行到屏幕中间时,屏幕会向左运动,而马里奥横坐标会固定在屏幕中间,以此形成一种马里奥在移动的错觉,其他的要素(问号砖块、怪物)也是在此条件下发现地图在进行相对移动时,这些要素也会进行向左移动,以此保证一种没有动的错觉。
-
关于水管和其他三角形障碍物的判定,由于马里奥精灵是使用了四个精灵来实现的,所以使用pygame自带的碰撞检测的话也不是很好用,我就直接采用了点坐标判断的方式,为了能更直观的去写代码。
-
在最后阶段,加碰砖块的特效、金币闪烁的特效,蘑菇出现的特效、所有的特效。这里也使用了精灵去实现特效。
-
由于时间有限,最后并没有实现马里奥吃蘑菇变大和吃花变无敌的特效,很遗憾。
三、关键技术
关键技术分为以下几点:
-
马里奥动态实现 。马里奥动态实现时调用了四种不同的精灵去实现,根据键盘的不同反应会调用不同的精灵,以此实现了马里奥向左走、向右走、向左跳、向右跳的动态画面。这样写的好处是我可以实现空中变向和空中控制降落地点的原作没有的功能。
-
碰撞检测 。由于马里奥动态实现不是单个精灵的问题,这里是采用了点坐标判断的方式,也就是meetobstacle.py实现的代码相当多,数据也是很复杂。
-
马里奥撞击问号砖块的判定问题和特效问题 。也是有一个碰撞检测的函数去进行了判断,然后加载动画效果,再最后在原地方画上另外一种砖块。
-
怪兽的移动、死亡、杀死马里奥 。首先要实现怪物和马里奥之间相对距离随地图的改变而变化的问题,是地图移动时,怪物还是以一种原来的速度去移动。然后追加怪兽被踩时死亡效果和杀死马里奥的判定。
四、结果和效果
人物移动和跳跃的效果可能有点违和,没有实现原作的吃蘑菇升级功能和吃花无敌功能,额外实现了空中变向和可以玩家在跳跃时选择落地点的功能。
五、总结和不足
前两周的时候,我本来是打算实现超级马里奥,但发现运用c语言去实现的话问题会有很多,于是后来就选择了中国象棋。在稍微接触了一点Python和pygame的一些相关知识后,就决定用python去实现了这个之前有点遗憾的游戏。从结果上也可以看出,Python由于拥有功能更加完善和多样的库,所以使用Python去实现像超级马里奥之类的动作较多、场景较多的游戏是比C语言要更完善的。Python的库真的很多、很方便,利用好这些库的话,可以轻松实现C语言很难实现的功能。
不足之处是没有考虑到将判定的坐标进行变量化,而是直接用数据去进行了判定,如果在一开始考虑到这点的话,可以很轻松实现马里奥吃蘑菇变大的功能,但由于写到结尾才发现这个问题,所以就没有实现这个功能,是我一个很大的遗憾。
参考文献
- 基于.NET平台的游戏门户系统设计与实现(电子科技大学·余胜鹏)
- 文本综合处理平台的研究与实现(济南大学·王孟孟)
- 一种基于LBS的O2O解谜类游戏框架的设计与实现(中国科学院大学(工程管理与信息技术学院)·于菲)
- 基于SSH框架的电子宠物系统设计与实现(吉林大学·王丽丽)
- 基于J2EE技术ACM竞赛程序在线评测系统的设计与实现(厦门大学·赵春风)
- 基于B/S架构的酷跑社区系统的设计与实现(内蒙古大学·张晓乐)
- 基于Android平台的手机游戏的设计与开发(云南大学·秦成)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于B/S架构的酷跑社区系统的设计与实现(内蒙古大学·张晓乐)
- 基于微服务架构的游戏商城服务端的设计与实现(南京大学·朱荣鑫)
- 教育类电子游戏设计与开发(上海交通大学·陶渊琛)
- 基于Web的信息发布与信息交流平台的设计与实现(吉林大学·许昭霞)
- 一种基于LBS的O2O解谜类游戏框架的设计与实现(中国科学院大学(工程管理与信息技术学院)·于菲)
- 基于手持移动设备的教学游戏设计与开发(上海师范大学·覃柳思)
- 基于J2EE的协同益智游戏的研究(华北电力大学(北京)·郭晶晶)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设项目助手 ,原文地址:https://m.bishedaima.com/yuanma/35451.html