包含四个部分:
引入第三方库
初始化init()以及设置(包括设置窗口大小,窗口名字)
能对各种功能模块进行初始化创建并进行变量设置。
pygame.display.set_mode((width, lenth)),用于初始化一个显示窗口,变量为一个二维元组,设置窗口的宽和高。
pygame.display.set_caption("title"),用于对初始化的窗口进行命名。
引入和初始化模块只进行一次。
进入一个循环,获取事件
循环应该会无限循环下去,知道用户退出。
pygame中所有的事件都会进入一个event队列,包括键盘的输入等。通过不断地从事件队队列中取出事件来对用户进行相应。for event in pygame.event.get()
如果事件类型为QUIT类型,那么就应该调用sys.exit()进行退出。
除了获得事件响应事件之后,还应该对窗口进行更新,否则用户无法认知是否进行了响应。
刷新屏幕
游戏就是要不断地获取用户的输入,并不断输出,进行响应。
import sys, pygame pygame.init() screen = pygame.display.set_mode((600, 400)) pygame.display.set_caption("pygame游戏之旅") while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() pygame.display.update()
从需求到实现的三个要素:
import sys, pygame pygame.init() size = width, height = (600, 400) speed = [1, 1] Black = 0, 0, 0 screen = pygame.display.set_mode(size) pygame.display.set_caption("pygame壁球") ball = pygame.image.load("滑稽球1.jpg") ballrect = ball.get_rect() # pygame对任意导入的图像都表示为surface对象,通过get_rect()形成与对象紧密相关的矩形对象 # rect对象有一些重要属性,如top,bottom,left,right表示上下左右边的坐标width和height表示宽和高 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() ballrect = ballrect.move(speed[0], speed[1]) # 通过move方法可以对矩形进行移动 if ballrect.left < 0 or ballrect.right > width: speed[0] = -speed[0] if ballrect.top < 0 or ballrect.bottom > height: speed[1] = -speed[1] # 遇到上下边界则y方向速度取反,遇到左右边界则x方向速度取反 screen.fill(Black) # 显示窗口进行填充,因为移动后默认原本位置为白色,所以必须不断刷新背景,使用RGB色彩体系 screen.blit(ball, ballrect) # 实际的移动是通过不断把小球的图像绘制到对应的矩形框里面来完成的 pygame.display.update()
需求:壁球可以按照一定速度进行运动。不像之前那么快。
要素:如何有效控制壁球的速度呢?
引入了新的函数:
需求:希望通过上下左右来控制小球的速度。
实现:↑增加一个像素的纵向速度,↓减少一个像素的纵向速度,左右同理。
键盘使用:如何获取键盘输入。
速度调节:根据对应按键来调节小球的速度。
在事件处理部分增加了键盘的敲击事件的响应。
pygame对键盘的敲击提供了对应的事件:
pygame.KEYDOWN,
pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT
import sys, pygame pygame.init() size = width, height = (600, 400) speed = [1, 1] Black = 0, 0, 0 screen = pygame.display.set_mode(size) pygame.display.set_caption("pygame壁球") fps = 300 fclock = pygame.time.Clock() ball = pygame.image.load("滑稽球1.jpg") ballrect = ball.get_rect() # pygame对任意导入的图像都表示为surface对象,通过get_rect()形成与对象紧密相关的矩形对象 # rect对象有一些重要属性,如top,bottom,left,right表示上下左右边的坐标width和height表示宽和高 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0])-1)*int(speed[0]/abs(speed[0])) elif event.key == pygame.K_RIGHT: speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1 elif event.key == pygame.K_UP: speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1 elif event.key == pygame.K_DOWN: speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1])-1) * int(speed[1] / abs(speed[1])) ballrect = ballrect.move(speed[0], speed[1]) # 通过move方法可以对矩形进行移动 if ballrect.left < 0 or ballrect.right > width: speed[0] = -speed[0] if ballrect.top < 0 or ballrect.bottom > height: speed[1] = -speed[1] # 遇到上下边界则y方向速度取反,遇到左右边界则x方向速度取反 screen.fill(Black) # 显示窗口进行填充,因为移动后默认原本位置为白色,所以必须不断刷新背景,使用RGB色彩体系 screen.blit(ball, ballrect) # 实际的移动是通过不断把小球的图像绘制到对应的矩形框里面来完成的 pygame.display.update() fclock.tick(fps)
感觉这个游戏系列作为消遣还是很有意思的,哈哈哈哈。
以上内容来自北京理工大学嵩天老师及其团队的《Python游戏开发入门》课程第二周的内容。
非常感谢嵩天老师及其团队给我们带来这样优质的课程。