本文参考链接如下:
- 1.https://zhuanlan.zhihu.com/p/136664950
- 2.https://www.bilibili.com/video/BV1bE411p7Ue?from=search&seid=1875084054523930161
以下内容摘自知乎
Python游戏和动画——Pygame模块
学习编程,如果只是简单的敲代码,虽然也能看到程序运行的一些效果,但也会觉得枯燥乏味。
我们前面介绍了海龟绘图,这样学起来也是很有趣的,通过简单的代码,可以在屏幕上绘制想要的图形。
这里开始介绍使用Python库Pygame来编写游戏和动画,用代码来编写属于自己的游戏,想想就是特别有成就感,学习编程也会变得非常有趣。
Pygame是一个开源的Python模块,可以用于2D游戏制作,包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。
Pygame让游戏开发者不再被底层语言束缚,可以更多的关注游戏的功能和逻辑。
安装Pygame
Windows使用pip命令进行安装
pip3 install pygame
安装成功
>>> import pygame
pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
导入Pygame模块
import pygame
我们在使用Pygame设计一款游戏或动画的时候,需要包括三个部分:
一、初始设置
首先需要导入模块,创建游戏屏幕,然后初始化一些重要的变量
二、游戏循环
游戏循环使用while循环,使游戏持续更新屏幕和处理事件,除非用户退出程序,否则就会一直执行
三、退出程序
当用户想要停止程序的时候,使用一种方式来结束程序
Pygame窗口坐标系统
我们在学习turtle绘图的时候,认识了一个笛卡尔坐标系,原点(0,0)位于屏幕的中心并且越向屏幕上方,y坐标的值就越大。
这里我们有一个新的坐标系统,Pygame窗口的左上角是原点(0,0),越往右x的值越来越大,x为正值,负值在屏幕的左边;同样越往下,y坐标的值也越来越大,y坐标的负值在窗口的上方,也是位于屏幕的外面。
绘制一个圆
import pygame
# 初始设置
pygame.init() # 初始化pygame
screen = pygame.display.set_mode((800,600)) # Pygame窗口
pygame.display.set_caption("Pygame绘制图形") # 标题
keep_going = True
RED = (255,0,0) # 红色,使用RGB颜色
radius = 20 # 半径
# 游戏循环
while keep_going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
keep_going = False
pygame.draw.circle(screen,RED,(200,300),radius)
pygame.display.update() # 刷新屏幕
# 退出程序
pygame.quit()
第一步:初始设置
import pygame
# 初始设置
pygame.init() # 初始化pygame
screen = pygame.display.set_mode((800,600)) # Pygame窗口
pygame.display.set_caption("Pygame绘制图形") # 标题
keep_going = True # 循环变量标值
RED = (255,0,0) # 红色,使用RGB颜色
radius = 20 # 半径
这里我们首先导入了pygame模块,然后在使用pygame.init()对其进行初始化。pygame.display.set_mode((800,600))创建了一个800*600像素的显示窗口,保存到变量screen中,以后的程序中就可以直接调用变量screen即可。
pygame.display.set_caption("Pygame绘制图形")给屏幕窗口添加一个标题。
在Pygame中创建的游戏窗口,或者加载到窗口的图形都称为Surface。Surface screen即显示窗口,是绘制其他所有图形的主要窗口。
我们定义了一个布尔类型的标志,来控制程序的持续运行,想要暂停,只需要改变keep_going的值为False。
定义了一个颜色常量RED,用于设置RGB三色值(255,0,0),第一个值代表红色R,第二个值代表绿色G,第三个值代表蓝色B,每一个值的范围都是从0~255。
还在程序开始设置了圆的半径,变量radius = 20
第二步:游戏循环
# 游戏循环
while keep_going:
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
keep_going = False
pygame.draw.circle(screen,RED,(200,300),radius)
pygame.display.update() # 刷新屏幕
while keep_going:如果keep_going为True游戏一直持续进行,持续运行Pygame窗口,直到用户选择退出。
for event in pygame.event.get():这里使用for循环遍历Pygame中的所有事件,if event.type == pygame.QUIT:如果用户按下关闭按钮,退出程序,这样变量keep_going变为False,游戏结束。
游戏持续进行的时候,即用户没有触发关闭窗口的事件。我们开始在Pygame窗口绘制其他Surface图像,pygame.draw.circle(screen,RED,(200,300),radius)在屏幕窗口(200,300)位置上绘制半径为20的,填充颜色为RED的圆。
第一个参数screen,指定要在那个Surface上绘制图形。pygame.draw除了可以绘制圆(circle),还可以绘制矩形、线段等形状。
最后:游戏结束
# 退出程序
pygame.quit()
当用户退出游戏的时候,调用这段代码,清楚所有的设置,关闭屏幕窗口。
加载图片
import pygame
# 初始化设置
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("加载图片")
keep_going = True
pic = pygame.image.load("logo_lofi.png") # 图片加载
# 游戏循环
while keep_going:
for event in pygame.event.get(): # 循环遍历事件
if event.type == pygame.QUIT:
keep_going = False
screen.blit(pic,(100,100)) # 在Surface上绘制图片
pygame.display.update()
# 游戏退出
pygame.quit()
这一次并不是绘制一个圆,而是将我们保存的图片加载到Surface屏幕上。注意图片保存的位置和我们.py文件在同一个目录下。
pic = pygame.image.load("logo_lofi.png")从一个文件载入图像,保存到变量pic中,在以后的程序中通过pic来引用这个图片。
将图片绘制到Surface屏幕上并且更新绘制窗口,确保所有内容出现在屏幕上。
screen.blit(pic,(100,100)) # 在Surface上绘制图片
pygame.display.update()
blit()方法将我们从文件中加载的图片pic绘制到screen屏幕的(100,100)位置上。
这里简单介绍如何使用Pygame绘制图形和加载图片到Surface屏幕上。创建一个Pygame游戏或动画的三个步骤。后面的内容会详细介绍如何使用此模块来创建一款属于自己的游戏。