python我们可以做文字版的游戏,比如猜数字游戏,21点游戏。那python可以做图形界面的游戏吗?偷偷告诉你,用pygame库就可以实现了。pygame是python中专门用来编写游戏的一个引擎库,通过使用它,就可以很快的实现编写图形化的游戏。
游戏效果:
实现思路:
第一步:素材准备
网上找了一张gif动图,利用工具(我用的是爱奇艺万能播放器)将其拆分为一张张的图片。
第二步:创建游戏窗口,搭建好基本游戏框架
第三步:创建一个lions列表,利用for循环,将所有的图片load到lions列表当中
第四步:利用人眼暂留效应,将一张张图片渲染出来
1.素材准备
可以自己用其它的图片素材,或者找我提供也可以。
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
效果图:
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
效果:
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
效果图:
总结:
本文通过人眼暂留的一个原理实现了一个动态的效果。
index%14是取余运算,结果的数值不会超过14,所以可以起到防止索引超出范围。
pygame.time.wait(100):设置更新速率,每隔100ms更新一次
欢迎转载,转载请注明出处!
欢迎关注公众微信号:叶子陪你玩
分享自己的python学习之路
网友评论