Python实现80后童年经典游戏:坦克大战

Crossin的编程教室

共 1541字,需浏览 4分钟

 · 2021-03-17



导语


大家好,欢迎来到 Crossin的编程教室 !


FC红白机上的“经典90坦克大战”是不少80后童年的集体回忆(暴露年龄了)。今天我们就分享一个用Python制作的仿“坦克大战”小游戏。


废话不多说,让我们愉快地开始吧~


环境搭建


安装Python并添加到环境变量,pip安装需要的相关模块即可。


pip install pygame


先睹为快



原理介绍


游戏源码的整体逻辑还是很清晰的,也做了很多必要的注释,所以这里讲一下主要的思路,实现的细节请阅读源代码。


游戏规则:


游戏有单人和双人两种模式,己方大本营被破或者己方坦克被歼灭则游戏失败,成功通过所有关卡则游戏胜利。另外,玩家可以通过射击特定的坦克使地图上随机出现一个道具,若己方坦克捡到该道具,则触发一个事件,例如坦克能力的增强。


玩家操作方式如下:


玩家一:

wsad键:上下左右;

空格键:射击。

玩家二:

↑↓←→键:上下左右;

小键盘0键:射击。



逐步实现:


Step1:定义精灵类


因为游戏肯定涉及到碰撞检测,所以我们需要定义一些精灵类。


首先,既然是坦克大战,总得有坦克吧?


己方坦克:



上面的代码定义了坦克的一些属性,例如速度、等级、是否处于受保护状态等等。


当然这里也实例化了一个子弹类,这个我们之后再定义,先假装有这个子弹类,这样主逻辑才是完整的,不然坦克没有子弹类怎么射击呢?


当然,有属性还是不够的,我们还要赋予坦克一些能力,例如上面所说的射击:



当然还有上下左右的移动,因为都是类似的,这里只给出向上移动的源码:



啊,还有坦克的等级提升与下降:



最后当然是坦克死后重置啦:



敌方坦克:


敌方坦克和己方坦克定义的源代码很相似,只不过移动是随机的,死后是不可复生的,就不截图了。


现在,我们可以来定义子弹类了!


子弹类:


子弹类应当具有例如速度、强度等属性,以及选择方向和移动的能力:



最后,我们来定义其他涉及到碰撞检测的物体类。


大本营:


有正常和被摧毁两种状态:



地图障碍物:


包括砖墙、钢墙、森林、河流和冰:



食物道具:


一共有7种道具,不同的道具对应不同的效果:




Step2:设计游戏地图


Emmmm,游戏的大背景是黑色的,然后在上面堆上一些步骤一中定义的障碍物就可以完成地图设计了。其中,钢墙不能被一般的子弹击破,砖墙可被任意子弹击破,除墙外,坦克可以穿过任意障碍物,不过没有任何附加效果(有兴趣的小伙伴可以自己扩展一下~比如冰上的坦克速度加快等等):



我偷懒只设计了一个地图和两个关卡,有兴趣的小伙伴同样可以在此基础上设计更多的地图和关卡。


Step3:实现游戏主循环


主循环的代码比较长,不过逻辑很清晰。首先展示游戏开始界面,玩家在此界面选择游戏模式后进入游戏;在游戏中,需要进行一系列的碰撞检测以及触发碰撞产生的一系列事件,并绘制当前存在的所有物体;最后,若游戏失败,则显示游戏失败界面,若通关,则显示游戏成功界面(Demo版本界面设计比较简陋,有兴趣的小伙伴又可以扩展啦~)。


All Done!


完整源代码和游戏素材以及打包好的游戏文件都在相关文件里有,自行下载查看即可~


源代码


公众号(Crossin的编程教室)内回复 坦克 获取。

图片素材源于网络,如有侵权请联系作者删除。


欢迎有兴趣的小伙伴进一步拓展游戏。如果文章对你有帮助,欢迎转发/点赞/收藏~


作者:白露未晞me

来源:Charles的皮卡丘


_往期文章推荐_

代码吃鸡,来挑战吗?




如需了解付费精品课程教学答疑服务
请在Crossin的编程教室内回复: 666

浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报