python我们可以做文字版的游戏,比如猜数字游戏,21点游戏。那python可以做图形界面的游戏吗?偷偷告诉你,用pygame库就可以实现了。pygame是python中专门用来编写游戏的一个引擎库,通过使用它,就可以很快的实现编写图形化的游戏。

游戏效果:

【pygame系列 第二课 狮子动画 】_python


实现思路:

第一步:素材准备

网上找了一张gif动图,利用工具(我用的是爱奇艺万能播放器)将其拆分为一张张的图片。

第二步:创建游戏窗口,搭建好基本游戏框架

第三步:创建一个lions列表,利用for循环,将所有的图片load到lions列表当中

第四步:利用人眼暂留效应,将一张张图片渲染出来

1.素材准备

可以自己用其它的图片素材,或者找我提供也可以。

【pygame系列 第二课 狮子动画 】_python_02

2.创建游戏窗口

代码:

import pygame
# 使用前先需要初始化,初始化所有被导入的pygame子模块,固定用法
pygame.init() # 初始化pygame
# 游戏肯定是在一个窗口中,那我们先来创建一个窗口
size = width, height = 800, 533 # 设置窗口大小
screen = pygame.display.set_mode(size) # 设置
pygame.display.set_caption("狮子动画")
while True: # 死循环确保窗口一直显示
for event in pygame.event.get(): # 遍历所有事件
if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出
sys.exit()


screen.fill([255, 255, 255])
pygame.display.flip() # 更新


pygame.quit() # 退出pygame

效果图:

【pygame系列 第二课 狮子动画 】_初始化_03

3.将所有的图片load到lions列表当中

游戏界面显示出来后,下面加载所有狮子图片,利用循环和字符串拼接方法实现。

代码:

import pygame
# 使用前先需要初始化,初始化所有被导入的pygame子模块,固定用法
pygame.init() # 初始化pygame
# 游戏肯定是在一个窗口中,那我们先来创建一个窗口
size = width, height = 800, 533 # 设置窗口大小
screen=pygame.display.set_mode(size)# 设置
pygame.display.set_caption("狮子动画") # 设置标题


lions=[] # 创建一个列表,存储狮子图片对象
Dir = './lion/' # 狮子文件路径位置
for i in range(1,15):
lions.append(pygame.image.load(Dir+'lion_'+str(i)+'.png'))


print(lions) # 打印查看效果


# while True: # 死循环确保窗口一直显示
# for event in pygame.event.get(): # 遍历所有事件
# if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出
# sys.exit()


# screen.fill([255,255,255])
# pygame.display.flip() # 更新


# pygame.quit() # 退出pygame

效果:

【pygame系列 第二课 狮子动画 】_初始化_04

4.将所有图片渲染出来

print所有图片对象,说明已经加载成功,接下来就是将所有图片依次显示出来,形成动图的效果。

代码:

import pygame
# 使用前先需要初始化,初始化所有被导入的pygame子模块,固定用法
pygame.init() # 初始化pygame
# 游戏肯定是在一个窗口中,那我们先来创建一个窗口
size = width, height = 800, 533 # 设置窗口大小
screen=pygame.display.set_mode(size)# 设置
pygame.display.set_caption("狮子动画") # 设置标题


lions=[] # 创建一个列表,存储狮子图片对象
Dir = './lion/' # 狮子文件路径位置


for i in range(1,15):
lions.append(pygame.image.load(Dir+'lion_'+str(i)+'.png'))


# print(lions) # 打印查看效果
index = 0 # 图片索引
while True: # 死循环确保窗口一直显示
for event in pygame.event.get(): # 遍历所有事件
if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出
sys.exit()


screen.fill([255,255,255]) # 绘制背景白色
# 因为只有14张图片,一直循环增加会超出索引,通过取余实现从头再来的效果
screen.blit(lions[index%14], [0, 0]) # 将图片显示出来
# 显示下一张图片的索引
index+=1
# 设置更新间隔,数字越小,更新越快
pygame.time.wait(100)
pygame.display.flip() # 更新


pygame.quit() # 退出pygame

效果图:

【pygame系列 第二课 狮子动画 】_死循环_05

总结:

本文通过人眼暂留的一个原理实现了一个动态的效果。

index%14是取余运算,结果的数值不会超过14,所以可以起到防止索引超出范围。

pygame.time.wait(100):设置更新速率,每隔100ms更新一次

欢迎转载,转载请注明出处!

欢迎关注公众微信号:叶子陪你玩

分享自己的python学习之路