马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 xenli 于 -12-25 11:22 编辑
创建一个游戏窗口,然后在窗口内创建一个小球。以一定的速度移动小球,当小球碰到游戏窗口的边缘时,小球弹回,继续移动。按照如下步骤实现该功能:
# _*_ coding:utf-8 _*_
import pygame #导入Pygame模块
import sys #导入sys模块
pygame.init() #初始化Pygame
screen =pygame.display.set_mode((640,480)) # 设置窗口复制代码
上述代码中,首先导入Pygame,然后调用init()方法初始化Pygame模块。接下来,设置窗口的宽和高,最有使用display模块显示窗体,display常用方法如下:
微信截图_1225104630.png (32.98 KB, 下载次数: 0)
-12-25 10:46 上传
(2)运行上述代码,会出现一个一闪而过的黑色窗口,这是因为程序执行完成后,会自动关闭。如果让窗口一直显示,需要使用while True让程序一 直执行,此外,还需要设置关闭按钮。具体代码如下:
import pygame
import sys
pygame.init() #初始化Pygame
screen =pygame.display.set_mode((640,480)) # 设置窗口
#执行死循环,确保窗口一直显示
while True:
#添加检测事件
for event in pygame.event.get(): #遍历所有事件
if event.type == pygame.QUIT: #如果点击关闭窗口,则退出
sys.exit()
pygame.quit()复制代码
上述代码中,添加了轮巡事件监测。pygame.event.get()能够获取事件队列,使用for...in 遍历事件,根据type属性判断事件类型。这里的事件处理与GUI类似,如event.type等于pygame.QUIT表示监测到关闭pygame窗口事件,pygame.keydown表示键盘按下事件,pyga.MOUSEBUTTONDOWN表示鼠标按下事件等。。。
(3)在窗口中添加小球。我们先准备好一张ball.png图片,然后加载该图片,最后将图片显示在窗口中,具体代码如下:
import pygame
import sys
pygame.init() #初始化Pygame
screen =pygame.display.set_mode((640,480)) # 设置窗口
color = (0,0,0) #设置颜色
ball = pygame.image.load("ball.png") #加载图片
ballrect = ball.get_rect()#获取矩形区域
#执行死循环,确保窗口一直显示
while True:
#添加检测事件
for event in pygame.event.get(): #遍历所有事件
if event.type == pygame.QUIT: #如果点击关闭窗口,则退出
sys.exit()
screen.fill(color)#填充颜色
screen.blit(ball,ballrect) #将图片画到窗口上
pygame.display.flip()#更新全部显示
pygame.quit()复制代码
上述代码中使用image模块的load()方法加载图片,返回值ball是一个Surface对象。Surface 是用来代表图片的pygame对象,可以对一个Surface对象进行涂画、变形、复制等各种操作。事实上,屏幕也只是一个个surface, pygame display.set_ mode 就返回了一个屏幕Surface对象。如果将ball这个Surface对象画到screen Surface对象,需要使用blit()方法,最后使用display模块的flip() 方法更新整个待显示的Surface对象到屏幕上。Surface 对象的常用方法如下表所示。
微信截图_1225104905.png (22.21 KB, 下载次数: 0)
-12-25 10:49 上传
运行上述代码,结果如下图所示
微信截图_1225105203.png (16.9 KB, 下载次数: 0)
-12-25 10:52 上传
(4)下面该让小球动起来了。ball.get_rect() 方法返回值ballrect是一个Rect对象,该对象有一个move()方法可以用于移动矩形。move(x,y) 函数有两个参数,第 一个 参数是X轴移动的距离,第二个参数是Y轴移动的距离。窗体左上角坐标为(0,0),如果设置move(100,50),小球移动后的坐标位置如图所
示。
微信截图_1225105553.png (37.34 KB, 下载次数: 0)
-12-25 10:57 上传
为了实现小球不停地移动,将move()函数添加到while循环内,具体代码如下:
import pygame
import sys
pygame.init() #初始化Pygame
screen =pygame.display.set_mode((640,480)) # 设置窗口
color = (0,0,0) #设置颜色
ball = pygame.image.load("ball.png") #加载图片
ballrect = ball.get_rect()#获取矩形区域
speed = [5,5] #设置移动的X轴和Y轴距离
#执行死循环,确保窗口一直显示
while True:
#添加检测事件
for event in pygame.event.get(): #遍历所有事件
if event.type == pygame.QUIT: #如果点击关闭窗口,则退出
sys.exit()
ballrect = ballrect.move(speed) #移动小球
screen.fill(color)#填充颜色
screen.blit(ball,ballrect) #将图片画到窗口上
pygame.display.flip()#更新全部显示
pygame.quit()复制代码
(5)运行上述代码,发现小球在屏幕中一闪而过,此时,小球并没有真正消失,而是移动到窗体之外,此时需要添加碰撞检测的功能。当小球与窗体任一边缘发生碰撞,则更改小球的移动方向。代码如下:
# _*_ coding:utf-8 _*_
import pygame #导入Pygame模块
import sys #导入sys模块
pygame.init() #初始化Pygame
screen =pygame.display.set_mode((640,480)) # 设置窗口
color = (0,0,0) #设置颜色
ball = pygame.image.load("ball.png") #加载图片
ballrect = ball.get_rect()#获取矩形区域
speed = [5,5] #设置移动的X轴和Y轴距离
#执行死循环,确保窗口一直显示
while True:
#添加检测事件
for event in pygame.event.get(): #遍历所有事件
if event.type == pygame.QUIT: #如果点击关闭窗口,则退出
sys.exit()
ballrect = ballrect.move(speed) #移动小球
#碰到左右边缘
if ballrect.left < 0 or ballrect.right > 640:
speed[0] = -speed[0]
#碰到上下边缘
if ballrect.top < 0 or ballrect.bottom > 480:
speed[1] = -speed[1]
screen.fill(color)#填充颜色
screen.blit(ball,ballrect) #将图片画到窗口上
pygame.display.flip()#更新全部显示
pygame.quit() #退出Pygame复制代码
上述代码中,添加了碰撞检测功能。如果碰到左右边缘,更改X轴为负数,如果碰到上下边缘,更改Y轴数据为负数。运行结果如下图:
微信截图_1225111141.png (15.58 KB, 下载次数: 0)
-12-25 11:12 上传
(6)运行上述代码发现好像有多个小球在飞快移动,这是因为运行上述代码的时间非常短,导致肉眼观察出现错觉,因此需要添加一个“时钟”来控制程序运行时间。这是就需要使用Pygame的time模块。使用Pygame时钟之前,必须先创建Clock对象的一个实例,然后在while循环中设置多长时间运行一,代码如下:
# _*_ coding:utf-8 _*_
import pygame #导入Pygame模块
import sys #导入sys模块
pygame.init() #初始化Pygame
size = width, height = 640, 480 # 设置窗口
screen = pygame.display.set_mode(size)# 显示窗口
color = (0,0,0) #设置颜色
ball = pygame.image.load("ball.png") #加载图片
ballrect = ball.get_rect()#获取矩形区域
speed = [5,5] #设置移动的X轴和Y轴距离
clock = pygame.time.Clock()#设置时钟
#执行死循环,确保窗口一直显示
while True:
clock.tick(60) #每秒执行60次
#添加检测事件
for event in pygame.event.get(): #遍历所有事件
if event.type == pygame.QUIT: #如果点击关闭窗口,则退出
sys.exit()
ballrect = ballrect.move(speed) #移动小球
#碰到左右边缘
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
#碰到上下边缘
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(color)#填充颜色
screen.blit(ball,ballrect) #将图片画到窗口上
pygame.display.flip()#更新全部显示
pygame.quit() #退出Pygame复制代码
至此,我们完成了小球跳跃游戏的开发。
附件为所用资源图片
ball.png (5.42 KB, 下载次数: 1)
-12-25 11:19 上传