多年前,你我在一块儿"打飞机"。为了实现真正的打飞机,在下一年前踏足帝都学习了无所不能的Python,辣么接下来带你在俩个小时用200行代码学会打飞机。html
python中提供了一个pygame的模块可以让咱们快速编写一个游戏。接下来,简要建立一个目录结构,存放代码(规范的目录结构可让代码保持高度的灵活性及可读性),以下: python
""" PlayPlane/ |-- bin/ | |-- main.py 程序运行主体程序 |-- config/ | |-- settings.py 程序配置(例如: 游戏背景音乐的加载等) |-- material 程序素材放置(打飞机游戏素材放置) |-- ... |-- src/ 程序主体模块存放 | |-- __init__.py | |-- bullet.py 我方飞机发射子弹实现代码存放 | |-- enemy.py 敌方飞机实现代码存放 | |-- plane.py 我方飞机实现代码存放 |-- manage.py 程序启动文件 |-- README.md """
1、首先在 config/settings.py 中进行如下功能的实现git
游戏素材滑动到文章底部点击连接便可下载github
2、小试牛刀
ide
飞机和子弹都是可移动的,那么怎么实现让它们动起来呢(我方飞机能够玩家进行操控,敌机就是随机性的出现,子弹暂由我方飞机发射)。函数
在Pygame中,全部移动对象均可看作是一个精灵(sprite),精灵之间可以进行相互的交互通讯,例如如何让碰撞检测更加精准等等。学习
那么先让咱们先在屏幕上制做一个游戏板,根据 settings.py 配置,并让它有声音播放,首先咱们在 bin/main.py 中这么写:spa
咱们能够直接运行它,那么咱们会看到如下画面,而且还会有激情的声音吆!!!可是咱们要将文件配置为绝对路径才能够运行,由于刚刚在settings中的加载的音乐文件为相对路径。code
接下来呢,咱们将要制做我方飞机,敌方飞机和子弹如何让它们展现在游戏画板上,继而让它们变得可移动起来,请看代码实现方案...htm
从游戏画板上添加飞机,首先咱们应怎样在屏幕上输出飞机???
上述讲过,pygame中的 sprite(精灵)可以使一张图片或者一个静态物体动起来,那么制做飞机须要考虑并作些什么呢?
那么如何实现以上的功能呢?接下来结合上述的示例代码咱们先将我方飞机绘制到画板上方,而且咱们经过按键 J 断定我方飞机的存活状态为死亡,绘制飞机的死亡画面并重置飞机
""" 建立飞机 在pygame中, 全部可移动的对象均叫可看做一个精灵(sprite) 该类并实现了碰撞方法 spritecollide 我方飞机和敌方飞机指定掩膜属性以及生存状态标志位 添加 self.mask 属性(能够实现更精准的碰撞效果) """ # 倒入精灵模块, 使飞机能够动起来 import pygame class OurPlane(pygame.sprite.Sprite): def __init__(self, bg_size): super(OurPlane, self).__init__() # 肯定我方飞机背景图(有俩张,可让它们不停的切换,造成动态效果) self.image_one = pygame.image.load("material/image/hero1.png") self.image_two = pygame.image.load("material/image/hero2.png") # 获取我方飞机的位置 self.rect = self.image_one.get_rect() # 本地化背景图片的尺寸 self.width, self.height = bg_size[0], bg_size[1] # 获取飞机图像的掩膜用以更加精确的碰撞检测 self.mask = pygame.mask.from_surface(self.image_one) # 定义飞机初始化位置,底部预留60像素 self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (self.height - self.rect.height - 60) # 设置飞机移动速度 self.speed = 10 # 设置飞机存活状态(True为存活, False为死亡) self.active = True # 加载飞机损毁图片 self.destroy_images = [] self.destroy_images.extend( [ pygame.image.load("material/image/hero_blowup_n1.png"), pygame.image.load("material/image/hero_blowup_n2.png"), pygame.image.load("material/image/hero_blowup_n3.png"), pygame.image.load("material/image/hero_blowup_n4.png") ] ) def move_up(self): """ 飞机向上移动的操做函数,其他移动函数方法相似 """ if self.rect.top > 0: # 若是飞机还没有移动出背景区域 self.rect.top -= self.speed else: # 若即将移动出背景区域,则及时纠正为背景边缘位置 self.rect.top = 0 def move_down(self): """ 飞机向下移动 """ if self.rect.bottom < self.height - 60: self.rect.top += self.speed else: self.rect.bottom = self.height - 60 def move_left(self): """ 飞机向左移动 """ if self.rect.left > 0: self.rect.left -= self.speed else: self.rect.left = 0 def move_right(self): """ 飞机向右移动 """ if self.rect.right < self.width: self.rect.right += self.speed else: self.rect.right = self.width def reset(self): # 初始化飞机(飞机挂了, 初始化到初始位置) self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (self.height - self.rect.height - 60) # 重置飞机的存活状态 self.active = True
上面的代码写了一个 咱们的飞机 (OurPlane) 类,它初始化了一些属性以及 上下左右 移动的方法和重置方法,接下来将要运用它展现到游戏画板上面
因为飞机是一直存在的,接下咱们主程序 main 下面的死循环中这样写
那么上述的功能都已经实现了,接下来就开始真正的"打飞机"
3、接下来能够制做我方飞机,敌方战机,子弹等,这些功能均在 src/ 目录下实现
在上面的内容中,使用面向对象的形式制做了游戏中可移动的对象并继承 pygame.sprite.Sprite
4、继而在 bin/main.py 中进行主体功能的实现
5、畅汗淋漓,一鼓作气打飞机
组合一下,running起来
from bin.main import main if __name__ == '__main__': """ 环境: python3 + pygame running 起来就能够打飞机了O(∩_∩)O~. """ main()
原文来自:http://www.javashuo.com/article/p-vxjwovow-d.html
github下载:https://github.com/1352282824shy/-Lightning-Fighter-Game