淘先锋技术网

首页 1 2 3 4 5 6 7

本文参考链接如下:

以下内容摘自知乎

Python游戏和动画——Pygame模块

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游戏或动画的三个步骤。后面的内容会详细介绍如何使用此模块来创建一款属于自己的游戏。