小学Python系列少儿编程课程《第10章 玩游戏不如自己开发游戏》课件(共46张PPT)

资源下载
  1. 二一教育资源

小学Python系列少儿编程课程《第10章 玩游戏不如自己开发游戏》课件(共46张PPT)

资源简介

(共46张PPT)
Python少儿编程
第十章 玩游戏不如自己开发游戏
目录
1.1
Python的游戏开发装备
1.2
Pygame大显身手
PART 01
Python的游戏开发装备
Pygame简介
1.1
Pygame是一个用于开发游戏的Python模块,它是在SDL库的基础上开发的。通过Pygame,用户可以开发功能丰富的游戏和多媒体程序。此外,Pygame是一个可移植性很高的模块,可支持多个操作系统,非常适合小游戏的开发。
Pygame是一个由一系列模块组成的集合包,不同的模块可以实现游戏中不同的功能, Pygame所有模块列表如表10-1所示。
表10-1 Pygame所有模块列表
Pygame简介
1.1
表10-1 Pygame所有模块列表(续)
Pygame第三方库安装
1.1
步骤 1 启动PyCharm,新建“第10章”项目,然后在菜单栏中选择“文件”→“设置”选项,如图10-1所示。
图10-1 设置项目
Pygame第三方库安装
1.1
步骤 2 打开“设置”对话框,选择“项目:第10章”→“Python解释器”选项,然后在显示的列表框上方单击“+”按钮,如图10-2所示。
图10-2 选择安装项目
Pygame第三方库安装
1.1
步骤 3 打开“可用包”对话框,在搜索栏中输入“pygame”,然后在显示的列表中选择“pygame”选项,单击“安装包”按钮,如图10-3所示。
步骤 4 等待安装,安装成功后,“可用包”对话框中将显示“已成功安装包‘pygame’”,如图10-4所示。
图10-3 选择安装库 图10-4 成功安装
Pygame第三方库安装
1.1
步骤 5 关闭“可用包”对话框,返回“设置”对话框,在已安装库列表中可看到“pygame”,单击“确定”按钮即可完成安装,如图10-5所示。
图10-5 完成安装
PART 02
Pygame大显身手
创建窗口
2.1
所有游戏都在一个固定的窗口(或屏幕)进行操作,故开发游戏的第一步就是创建窗口。pygame.display模块提供了set_mode()方法用于初始化一个窗口,其方法原型如下。
set_mode(resolution=(0,0)[, flags=0, depth=0])
其中,resolution是一个二元组,表示宽和高,单位为像素;flags用于指定扩展选项,可同时指定多个选项(使用“|”操作符隔开),具体选项如表10-2所示;depth表示颜色深度,如果缺省,系统会自动选择一个最优值。该方法返回一个Surface对象(即Pygame用来表示图像的对象)。
创建窗口
2.1
表10-2 flags可用的选项
创建窗口
2.1
pygame.image模块提供了load()方法用于加载图片,其方法原型如下。
load(filename)
其中,filename为加载的图片的名称(可包含路径)。该方法返回一个Surface对象。
图片加载完成后,并不是显示在窗口中,而是转换成一个Surface对象,想要将其在窗口上显示,须使用pygame.surface模块中的blit()方法将一个图像绘制到另一个图像上,其方法原型如下。
blit(source, dest[, area=None, special_flags = 0])
其中,source为Surface对象(即显示的图片);dest为坐标值,一般为source的左上角坐标;area为图片绘制的区域;special_flags用于指定混合模式。
加载图片
2.2
pygame.image模块提供了load()方法用于加载图片,其方法原型如下。
load(filename)
其中,filename为加载的图片的名称(可包含路径)。该方法返回一个Surface对象。
图片加载完成后,并不是显示在窗口中,而是转换成一个Surface对象,想要将其在窗口上显示,须使用pygame.surface模块中的blit()方法将一个图像绘制到另一个图像上,其方法原型如下。
blit(source, dest[, area=None, special_flags = 0])
其中,source为Surface对象(即显示的图片);dest为坐标值,一般为source的左上角坐标;area为图片绘制的区域;special_flags用于指定混合模式。
加载图片
2.2
【例10-1】 创建一个窗口,并加载一张图片作为背景。
【问题分析】 首先,使用import语句导入所需模块(如pygame、sys);接着,初始化pygame;然后,创建窗口、设置窗口标题、加载背景图片、绘制图形及刷新绘图;最后,程序进入无限循环,判断是否获取退出事件,如果是,则退出程序。
【参考代码】
import pygame, sys #导入模块
pygame.init() #初始化pygame
screen = pygame.display.set_mode((400, 200)) #设置窗口大小
pygame.display.set_caption('贪吃蛇') #设置窗口标题
加载图片
2.2
【参考代码】(续)
#加载背景图片
background = pygame.image.load('images\\贪吃蛇.jpg')
screen.blit(background, (0, 0)) #将背景绘制到窗口的(0,0)位置
pygame.display.update() #刷新绘图
while True: #循环
for event in pygame.event.get(): #获取事件并遍历
if event.type == pygame.QUIT: #如果为退出事件
pygame.quit() #退出pygame
sys.exit() #退出系统
加载图片
2.2
【运行结果】 程序运行结果如图10-6所示。
图10-6 例10-1程序运行结果
绘制图形
2.3
pygame.draw模块中常用的方法如表10-3所示。
表10-3 pygame.draw模块中常用的方法
绘制图形
2.3
表10-3 pygame.draw模块中常用的方法(续)
绘制图形
2.3
【例10-2】 绘制多种图形。
【参考代码】
#导入模块和常量
import pygame, sys
from math import pi
pygame.init() #初始化pygame
screen = pygame.display.set_mode((520, 250)) #设置窗口大小
pygame.display.set_caption('绘制图形') #设置窗口标题
#定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
绘制图形
2.3
【参考代码】(续)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
screen.fill(WHITE) #设置背景颜色
#绘制一条线
pygame.draw.line(screen, RED, [10, 10], [50, 10], 2)
#绘制一条抗锯齿的线
pygame.draw.aaline(screen, GREEN, [10, 50], [50, 50], True)
#绘制一条折线
pygame.draw.lines(screen,BLACK,False,[[75,10],[125,10],[125,50]],5)
#绘制一条闭环折线
pygame.draw.lines(screen,BLACK,True,[[150,10],[200,10],[200,50]],5)
#绘制一个矩形框
绘制图形
2.3
【参考代码】(续)
pygame.draw.rect(screen, BLUE, [225, 10, 50, 40], 2)
#绘制一个矩形
pygame.draw.rect(screen, BLUE, [300, 10, 50, 40])
#绘制一个椭圆框
pygame.draw.ellipse(screen, RED, [375, 10, 50, 40], 2)
#绘制一个椭圆
pygame.draw.ellipse(screen, RED, [450, 10, 50, 40])
#绘制多边形(三角形)
pygame.draw.polygon(screen,BLACK,[[10,200],[120,100],[150,200]],5)
绘制图形
2.3
【参考代码】(续)
#绘制多条弧线
pygame.draw.arc(screen, BLACK, [200, 90, 150, 125],0,pi/2,2)
pygame.draw.arc(screen, GREEN, [200, 90, 150, 125],pi/2,pi,2)
pygame.draw.arc(screen, BLUE, [200, 90, 150, 125],pi,3*pi/2,2)
pygame.draw.arc(screen, RED, [200, 90, 150, 125],3*pi/2,2*pi,2)
#绘制一个圆
pygame.draw.circle(screen, BLUE, [450, 150], 60, 2)
#刷新绘图
pygame.display.update()
while True: #循环
for event in pygame.event.get(): #获取事件并遍历
if event.type == pygame.QUIT: #如果为退出事件
pygame.quit() #退出pygame
sys.exit() #退出系统
绘制图形
2.3
【运行结果】 程序运行结果如图10-7所示。
图10-7 例10-2程序运行结果
设置动画效果
2.4
物体移动的原理很简单,即在原有坐标的基础上增加偏移量,再重新绘制图片,依次一张一张地循环绘制下去,就可以得到物体移动的效果。
此外,需要考虑两个画面之间的时间间隔,即经过多长时间绘制下一张图片。pygame.time模块提供了一个Clock对象,使用其tick()方法可解决上述问题。
(1)通过pygame.time.Clock()方法创建对象获得pygame的时钟。
(2)使用pygame.time.Clock.tick(FPS)方法设置pygame时钟的时间间隔。
设置动画效果
2.4
【例10-3】 设置动画效果示例。
【参考代码】
import pygame, sys #导入模块
pygame.init() #初始化pygame
FPS = 30 #设置帧率
fpsClock = pygame.time.Clock() #创建时钟对象
screen = pygame.display.set_mode((500, 400)) #设置窗口大小
pygame.display.set_caption('动画') #设置窗口标题
WHITE = (255, 255, 255) #定义颜色
img = pygame.image.load('images\\球.png') #加载图片
imgx, imgy = 10, 10 #初始化图片的位置
direction = 'right' #初始化图片的移动方向
设置动画效果
2.4
【参考代码】(续)
while True: #循环
screen.fill(WHITE) #背景填充为白色
if direction == 'right': #如果图片向右移动
imgx += 5 #图片x坐标加5
if imgx == 420: #如果图片x坐标等于420
direction = 'down' #设置方向为向下
elif direction == 'down': #如果图片向下移动
imgy += 5 #图片y坐标加5
if imgy == 320: #如果图片y坐标等于320
direction = 'left' #设置方向为向左
elif direction == 'left': #如果图片向左移动
imgx -= 5 #图片x坐标减5
if imgx == 0: #如果图片x坐标等于0
direction = 'up' #设置方向为向上
设置动画效果
2.4
【参考代码】(续)
elif direction == 'up': #如果图片向上移动
imgy -= 5 #图片y坐标减5
if imgy == 0: #如果图片y坐标等于0
direction = 'right' #设置方向为向右
screen.blit(img, (imgx, imgy)) #绘制图片
for event in pygame.event.get(): #获取事件并遍历
if event.type == pygame.QUIT: #如果为退出事件
pygame.quit() #退出pygame
sys.exit() #退出系统
pygame.display.update() #刷新绘图
fpsClock.tick(FPS) #设置时钟的时间间隔
设置动画效果
2.4
【运行结果】 运行程序,可以看到小球自左往右、自上往下、自右往左、自下往上循环移动,部分显示结果如图10-8所示。
图10-8 例10-3程序运行结果
播放声音
2.5
播放音效使用pygame.mixer模块,须首先创建一个Sound对象,其语法格式如下。
Sound(filename)
其中,filename为音频文件名(可包含路径)。
创建Sound对象后,可使用play()方法播放音效。Sound对象的常用方法如表10-4所示。
表10-4 Sound对象的常用方法
播放声音
2.5
播放背景音乐使用pygame.music模块,它是pygame.mixer模块的一个特殊实现,使用时须通过pygame.mixer.music调用其方法。pygame.music模块的常用方法如表10-5所示。
表10-5 pygame.music模块的常用方法
播放声音
2.5
【例10-4】 播放声音示例。
【参考代码】
import pygame, sys #导入模块
pygame.init() #初始化pygame
screen = pygame.display.set_mode((400, 300)) #设置窗口大小
pygame.display.set_caption('播放声音') #设置窗口标题
background = pygame.image.load('images\\烟花.jpg') #加载背景图片
screen.blit(background, (0, 0)) #绘制背景
sound = pygame.mixer.Sound('sounds\\燃放烟花.wav') #创建音效对象
pygame.display.update() #刷新绘图
播放声音
2.5
【参考代码】(续)
#加载背景音乐文件
pygame.mixer.music.load('sounds\\新年好.mp3')
#播放背景音乐,第一个参数为播放的次数(-1表示无限循环),第二个参数是设置播放的起点(单位为秒)
pygame.mixer.music.play(-1, 0.0)
while True: #循环
sound.play() #播放音效
for event in pygame.event.get(): #获取事件并遍历
if event.type == pygame.QUIT: #如果为退出事件
pygame.mixer.music.stop() #停止播放背景音乐
pygame.quit() #退出pygame
sys.exit() #退出系统
播放声音
2.5
【运行结果】 运行程序,出现主界面(见图10-9),然后直接播放音效和背景音乐。
图10-9 例10-4程序运行结果
显示文字
2.6
如果想要将文字显示到屏幕上,须首先使用pygame.font模块中的Font()方法创建一个Font对象,其语法格式如下。
Font(filename, size)
其中,filename为字体文件名称(一般为“.ttf”格式);size为字体的大小,单位为像素。
创建Font对象后,须使用render()方法返回一个Surface对象绘制文本,其语法格式如下。
render(text, antialias, color[, background=None])
其中,text为要显示的文字;antialias是个布尔值,表示是否开启抗锯齿,当为True时字体比较平滑;color为文字颜色;background为背景颜色。
最后还须使用blit()方法显示文字。
显示文字
2.6
【例10-5】 显示文字示例。
【参考代码】
import pygame, sys #导入模块
pygame.init() #初始化pygame
screen = pygame.display.set_mode((260, 100)) #设置窗口大小
pygame.display.set_caption('显示文字') #设置窗口标题
#定义颜色
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
#创建字体对象
font = pygame.font.Font('fonts\\simkai.ttf', 30)
显示文字
2.6
【参考代码】(续)
#设置显示的文字,创建文字对象
textSurface = font.render('恭喜你,你赢了!', True, GREEN, RED)
screen.fill(WHITE) #背景填充为白色
textRect = textSurface.get_rect() #获取文字对象的rect
textRect.center = (130, 50) #设置文字对象的中心坐标
screen.blit(textSurface, textRect) #绘制文字
pygame.display.update() #刷新绘图
while True: #循环
for event in pygame.event.get(): #获取事件并遍历
if event.type == pygame.QUIT: #如果为退出事件
pygame.quit() #退出pygame
sys.exit() #退出系统
显示文字
2.6
【运行结果】 运行程序,窗口中显示绿色的“恭喜你,你赢了!”文字,其背景色为红色,如图10-10所示。
图10-10 例10-5程序运行结果
事件处理
2.7
Pygame会接收用户各种操作(如按下或释放按键、移动鼠标、按下或释放鼠标等)产生的事件。事件随时可能发生,Pygame将一系列事件存放在一个事件队列里,然后通过for循环取出每一个事件与产生的事件进行比较,如果相等则处理产生的事件。
一般可使用pygame.event模块中的get()方法来获取所有事件,Pygame中常用的事件如表10-6所示。
事件处理
2.7
表10-6 Pygame中常用的事件
事件处理
2.7
【例10-6】 事件处理示例。
【参考代码】
import pygame, sys #导入模块
pygame.init() #初始化pygame
screen = pygame.display.set_mode((400, 300)) #设置窗口大小
pygame.display.set_caption('事件处理') #设置窗口标题
image = pygame.image.load('images\\蝴蝶.png') #加载图片
WHITE = (255, 255, 255) #定义颜色
x, y = 200, 150 #初始化图片位置
事件处理
2.7
【参考代码】(续)
while True: #循环
for event in pygame.event.get(): #获取事件并遍历
#如果移动鼠标,获得鼠标当前位置
if event.type == pygame.MOUSEMOTION:
x = event.pos[0]
y = event.pos[1]
#如果按下鼠标,输出鼠标按下位置
if event.type == pygame.MOUSEBUTTONDOWN:
print('按下鼠标:', event.pos)
#如果释放鼠标,输出鼠标释放的位置
if event.type == pygame.MOUSEBUTTONUP:
print('释放鼠标:', event.pos)
事件处理
2.7
【参考代码】(续)
#如果按下按键
if event.type == pygame.KEYDOWN:
#如果按键为方向键,输出对应的方向
if event.key == pygame.K_UP:
print('上')
if event.key == pygame.K_DOWN:
print('下')
if event.key == pygame.K_LEFT:
print('左')
if event.key == pygame.K_RIGHT:
print('右')
事件处理
2.7
【参考代码】(续)
#如果按键为Esc键
if event.key == pygame.K_ESCAPE:
pygame.quit() #退出pygame
sys.exit() #退出系统
screen.fill(WHITE) #背景填充为白色
screen.blit(image, (x, y)) #绘制图片
pygame.display.update() #刷新绘图
事件处理
2.7
【运行结果】 运行程序,出现加载图片的窗口,当鼠标在窗口上移动时,图片随着鼠标移动,如图10-11所示。单击窗口上的任意位置,输出鼠标按下和释放时的坐标;按下“上”“下”“左”“右”方向键,输出相应的“上”“下”“左”“右”信息;按下“Esc”键,退出程序,如图10-12所示。
图10-11 窗口界面 图10-12 输出信息
感谢观看

展开更多......

收起↑

资源预览