前言
王者荣耀好玩吧,吃鸡是不是更刺激呢?haha,可惜我们今天的主题跟这两个游戏一毛钱关系都没有,在接下来的几篇文章中,我会把去年我用Python做的一个小游戏整理下,然后以推文的形式发布出来,希望给小伙伴们一 nei nei灵感吧~
这个游戏我给它起了个骚气无敌的名字小粉丝大战最帅的我,是一款类似于4399小游戏中外星人大战类的射击游戏,唯五的几个区别是:我的游戏没有市场调研、没有市场分析、没有测试、没有运营推广,更没有主流人群,所以这是一款不用充值,玩一次就想吐的游戏,不过这不重要,我们是爱学习的人,我们更看重代码,是吧,况且这款游戏也不是一无是处呀,最起码还有小ha满满的爱呀,是吧
项目概述
小伙伴们想象中4399里的飞机射击游戏可能是这种:
不过,我的游戏跟它不一样,我的游戏坚持了我一贯的作风,实力不行,但是眼光很高?
下面对这款游戏的细节做下简单的概述:
你要了解的:
本游戏使用的是Pygame模块,对于某些API(比如名称设置--"pygame.display.set_caption('我是游戏名')")的调用不会进行分享,请直接移步相关网站或公众号后台留言进行学习。除此之外,你必须对于类、继承、封装、模块化思想有一定的了解。
网址:
https://www.kancloud.cn/digest/python-notes/163847
从小白到大牛:
第一次写游戏总会有些激动,一方面是憧憬着游戏写好之后的开心,另一方面是因为不知道该从哪里开始写起。
对于本文中的简单例子来说,其就是类似于外星人大战的阉割版。在写游戏之前应该做好规划(包括类的封装、类属性和方法、库的使用、模块的划分甚至是名称的设置),往往游戏之前良好的规划会占用整个项目的绝大部分时间,而真正写代码的时间很少。
对于该游戏:(只对主要部分进行分析)
游戏的主人翁:飞船、子弹、外星人
最基本的三个类:ship、bullet、alien(考虑各个类的属性和方法,对类进行合适的封装)还有一个必不可少的类:alien_invasion(控制游戏的运行)
玩法:玩家按下键盘上的左右按钮控制飞船的左右移动,通过按下空格发射子弹,击杀外星人,随着玩家分数和等级的提高,外星人和飞船的速度会越来越快,若飞船移动到了屏幕底端或和飞船相撞,则玩家损失一次机会,玩家总共有三次机会,在这三次机会全部用完时,玩家的所有数据会被清空,玩家必须重新闯关.
游戏模块拆解:
alien_invasion.py:整个游戏的核心模块,控制游戏的运行
alien.py:对于alien(飞船)的设置(包括alien图像的加载、alien图像的绘制、alien边缘的检测)
bullet.py:对于bullet(子弹)的设置(包括bullet大小、速度、绘制的设置)
button.py:对于button(控制按钮)的设置(包括大小、位置、文本内容、绘制、和游戏状态的设置)
game_functions.py:功能的主要实现模块(键盘事件的检测<左移、右移、开火、开始游戏等>、外星人移动方向的控制)
game_status.py:游戏状态的设置(比如得分等初始化信息的设置,还有游戏速度上限等游戏运行期间可能发生变化的量的控制)
scoreboard.py:用来显示玩家得分、等级
settings.py:各类(外星人、子弹、子弹移动方向)等的基本属性的设置
ship.py:飞船移动、重绘等的设置
游戏思路分析:
现在的需求很简单:玩家按下左右键控制飞船在屏幕限定范围水平内移动,按下空格键发射子弹击杀外星人。
要求:(游戏开始后)
- 点击Play按钮开始游戏,按下键盘上的Q键退出游戏
- 外星人按照S形从屏幕上方开始向底部运动,且随着用户得分和等级的提高运动速度越来越快
- 飞船一次发射的子弹控制在10个以内,且只能在屏幕范围内进行移动
- 游戏画面左上方有玩家得分、等级的显示,右上方有玩家剩余机会次数的显示
- 游戏音效的添加
问题解决:
- 对于游戏中飞船和外星人的处理为什么都以矩形处理呢?
答:像处理矩形一样处理游戏元素之所以高效,是因为矩形是简单的集合形状,这种做法的效果通常很好,游戏玩家几乎注意不到我们处理的不是游戏元素的实际形状。
- 游戏的画面为什么要做到不停的刷新呢?
答:电影视频中有"帧"的概念,同样的游戏中也有,大家在打游戏的时候想必都见过FPS吧,它的全称是(Frame Per Second),也就是每秒的的刷帧次数,根据人眼"视觉停留"特点,如果每秒刷帧的频率太低的话,就会造成视频的卡顿,那么对于游戏来说,FPS的要求就得更高点了。
声明
更多内容请移步我的公众号平台hahaCoder或者个人网站http://www.shipudong.com进行查看。