从这一节课开始,我们就来讲游戏开发,那么在Python中提到游戏开发,那肯定非 Pygame 莫属了,Pygame 是一个利用 SDL 库实现的模块,我们先来安装Pygame。
打开 CMD,输入 pip install Pygame,回车即可。
C:\Users\Admin>pip install pygame
Collecting pygame
Using cached https://files.pythonhosted.org/packages/e2/60/2b6c8fcbed5d8817ae43fd36308ed683961002376a7be04b0d65ebce8466/pygame-1.9.4-cp35-cp35m-win_amd64.whl
Installing collected packages: pygame
Successfully installed pygame-1.9.4
打开IDLE,验证安装成功。
>>> import pygame
pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
>>> pygame.ver
'1.9.4'
Pygame 作为一个游戏模块,主要具备哪些功能呢?
- 绘制图形:能够绘制圆形、三角形、菱形、矩形这所有我们想象的到的图形,这跟我们的tkinter一样,能够绘制这些图形。
- 显示图片:素材就是以图片的形式提供的,需要把它们显示出来。
- 动画效果。
- 与键盘、鼠标和游戏手柄等外设交互。
- 播放声音。
- 支持碰撞检测。
既然是最后一个章节,现在应该不需要一步一步给大家讲解了,目前最好的学习方法就是直接分析代码,来学习Python。
首先看一下这节课的代码:
import pygame
import sys
# 初始化Pygame
pygame.init()
size = width, height = 800, 600
speed = [-2, 1]
bg = (255, 255, 255) # RGB 白色
# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")
# 加在图片
turtle = pygame.image.load("python.png")
# 获得图像的位置矩形
position = turtle.get_rect()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 移动图像
position = position.move(speed)
if position.left < 0 or position.right > width:
# 翻转图像
turtle = pygame.transform.flip(turtle, True, False)#水平翻转,垂直不翻转
# 反方向移动
speed[0] = -speed[0]
if position.top < 0 or position.bottom > height:
speed[1] = -speed[1]
# 填充背景
screen.fill(bg)
# 更新图像
screen.blit(turtle, position)
# 更新界面
pygame.display.flip()
# 延迟10毫秒
pygame.time.delay(10)
运行的效果就是:一只小猪,到处走,撞墙之后自动掉头
我们现在来分析代码,通过代码来学习Pygame。
首先就是 import pygame。import sys 是退出程序要用的。
第一个要执行的就是 init(),初始化 pygame,为什么要初始化呢?因为我们的 pygame 事实上是一个包,一个包里面包含了各种不同功能的模块,init() 就是初始化这些模块,让它们做好准备,随时待命。
下面接下来是一些变量的设置,我们还不管它们,接着往下看。
我们调用 display.set_mode() 创建指定大小的窗口,创建的窗口就是一个 Surface 对象,size 就是上面定义的变量,实际上是一个元组。
然后设置标题。
我们使用 image.load() 加载图片,加载的图片也是一个 Surface对象。
把图片加载进去,我们通过 get_rect() 来获得它的当前矩形位置,赋值给 position。
然后我们就进入死循环,在死循环里面,我们移动图像位置。
我们如何停止程序呢?我们就是通过检测是否点击了 X ,如果点击了,就退出,sys.exit() 。
移动图像就是使用 矩形位置对象的 move() 方法,偏移位置就是 speed,x轴偏移-2,y轴偏移 +1。
下面两个 if 语句 就是检测是否出了边界,通过 矩形位置对象的 left 、right、top、botton 属性来判断是否出界,如果要出界,就反方向走。同时,如果左右出界的话,还要水平翻转一下。
下面填充背景为纯白色(255,255,2550)
blit() 就是将 一个图像画到另一个图像上。
然后就是刷新界面。
最后就是延迟10毫秒,减缓图像移动速度。
这节课到此结束,大家好好分析一下代码,后面会加深难度哦。