**
第一步:导入pygame 模块
**
飞机大作战image数据集:https://pan.baidu.com/s/1pMM0beb
(windows环境+python3.7)
- win+R调出命令窗口
- 首先需要安装pip,在命令行中输入以下命令:python -m pip install -U pip
- 通过pip这个桥梁再来安装pygame模块,在命令行输入以下命令:pip install pygame==1.9.4 (这里是下载的pygame1.9.4版本)
- 打开pycharm->file->settings->你的project->project interpreter 你会发现导入的package:pip 和 pygame
- 在pycharm中新建.py文件导入import pygame 则不会出错
第二步:编写游戏代码
01 创建游戏主窗口
#pygame专门提供了一个模块pygame.display用于创建、管理游戏窗口
#pygame.display.set_mode() 初始化游戏窗口
#pygame.display.update()显示窗口
“”"
set_mode()方法
set_mode(resolution=(0,0),flag=0,depth=0)->返回类型Surface
参数resolution:前两个参数指定屏幕的高和宽
flags附加选项
depth:表示颜色的位数,默认自动匹配
“”"
02理解图像,并绘制图像
图像文件初始是保存在磁盘上的,如果需要使用,第一步就是需要加载图像到内存中,需要在屏幕上显示一个图像内容,需要按照以下三个步骤:
- 使用pygame.iamge.load() 加载图像至内存
- 使用游戏屏幕对象,调用**blit()**方法绘制图形(也可以利用精灵组update()更新距离,draw(self.screen)来显示到屏幕)
- 调用**pygame.display.update()**更新整个屏幕的显示
例:
import pygame
# 负责加载pygame的所有模块,Rect不需要
pygame.init()
# 创建游戏窗口 480*700
screen=pygame.display.set_mode((480,700))
# 绘制背景图像
# 1,加载图像至内存
bg=pygame.image.load('./images/background.png')
# 2,blit绘制图像
screen.blit(bg,(0,0))
# 3,update更新屏幕显示
pygame.display.update()
while True:
pass
# 卸载pygame的所有模块
pygame.quit()
03 游戏动画
pygame专门提供了一个类pygame.time.clock可以非常方便的设置屏幕绘制速度—刷新帧频
使用时钟对象需要两步:
(1) 创建游戏时钟对象
-
在游戏初始化创建一个时钟对象
-
在游戏循环中让时钟对象调用**tick(帧频)**方法(游戏一般满足秒执行60次即可)
例:
clock=pygame.time.Clock()
while True:
clock.tick(1)
pass
(2)实现飞机动画飞行实例
#创建游戏时钟对象
clock=pygame.time.Clock()
#定义rect记录飞机初始位置
hero_rect=pygame.Rect(150,500,102,126)
while True:
clock.tick(60)
hero_rect.y-=1
# 想要解决飞机重影的问题,则需要重新绘制一遍背景图
screen.blit(bg,(0,0))
screen.blit(hero,hero_rect)
pygame.display.update()
(3)在游戏循环中监听事件
事件event :用户针对游戏所做的操作,做/出针对性的响应
pygame中可以通过pygame.event.get()来捕获事件,返回的类型为列表list
代码实现:(这段代码非常的固定,几乎所有的pygame游戏都大同小异)
# 监听事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
print('游戏退出...')
# 卸载所有模块,退出游戏
pygame.quit()
exit()
04理解精灵和精灵组
(1)精灵和精灵组
- pygame.sprite.Sprite ----存储图像数据image和位置rect的对象
- pygame.sprite.Group
创建精灵类:
import pygame
class GameSprite(pygame.sprite.Sprite):
"""飞机大战游戏精灵"""
def __init__(self,image_name,speed=1):
# 注意某一个类的父类不是object,则需要主动继承父类的__init__方法
# 调用父类的初始化方法
super().__init__()
# 定义对象的属性
self.image=pygame.image.load(image_name)
# get_rect()获取 图片当前默认的大小
self.rect=self.image.get_rect()
self.speed=speed
def update