使用Pygame开发flappy bird
1.Pygame简介
Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音等,创建在SDL(simple DirectMedia Layer)基础上,允许实时电子游戏研发而不会被低级语言,如C语言或是更低级的汇编语言束缚。基于这样一个设想,所有需要的游戏功能和理念(主要是图像方面)都完全简化为游戏逻辑本身,所有资源都可以由高级语言(如python)提供。
2.Pygame常用模块
Pygame做游戏开发的优势在于不需要过多地考虑底层相关内容而可以把工作重心放在游戏逻辑上。例如Pygame集成了很多和底层相关的模块,如访问显示设备、管理事件、使用字体等。Pygame常用模块如下表:
模块 功能
Pygame.cdrom 访问光驱
Pygame.cursors 加载光驱
Pygame.display 访问显示设备
Pygame.dram 绘制形状、线、点
Pygame.key 读取键盘按键
Pygame.mouse 鼠标
Pygame.movie 播放视频
Pygame.music 播放音频
Pygame.rect 管理矩形区域
3.开发flappy bird游戏
3.1游戏简介
Flappy Bird是一款鸟类飞行游戏,有越南河内独立游戏开发者阮哈东开发。在Flappy Bird这款游戏中,玩家只需要用一根手指来操控,单击触摸手机屏幕,小鸟就会往上飞,不断地单击就会不断地往高处飞。放松手指,则会快速下降。所以玩家要控制小鸟一直向前飞,然后躲避途中高低不平的管子。如果小鸟碰到了障碍物,游戏就会结束。每当小鸟飞过一组管道,玩家就会获得一分。
3.2游戏分析
在Flappy Bird中,主要有两个对象:小鸟与管道。 可以创建Bird类和Pineline类来分别表示这两个对象。小鸟可以通过上下移动来躲避管道,所以在Bird类中创建一个birdUpdate()方法,实现小鸟的上下移动。而为了体现小鸟向前飞行的特征,可以让管道一直向左侧移动,这样在窗口中就好像小鸟在向前飞。所以,在Pineline类中也创建一个updatePipeline()方法,实现管道的向左移动。此外,还创建了3个函数:createMap()函数用于绘制地图;checkDead()函数用于判断小鸟的生命状态;getResult()函数用于获取最终分数。最后在主逻辑中实例化类并调用相关方法,实现相应功能。
3.3搭建主框架
通过前面的分析,我们可以搭建起Flappy Bird游戏的主框架。Flappy Bird游戏有两个对象:小鸟和管道。先来创建这两个类,类中具体的方法可以先使用pass语句代替。然后创建一个绘制地图的函数createMap()。最后,在主逻辑中绘制背景图片。关键代码如下:
import pygame
import sys
import random
class Bird(object):
"""定义一个鸟类"""
def __init__(self):
"""定义初始化方法"""
pass
def birdUpdate(self):
pass
class Pipeline(object):
"""定义一个管道类"""
def __init__(self):
"""定义初始化方法"""
pass
def updatePipeline(self):
"""水平移动"""
pass
def createMap():
"""定义地图创建方法"""
screen.fill((255,255,255))
screen.blit(background,(0,0))
pygame.display.update()
if __name__=='__main__':
"""主程序"""
pygame.init()
size=width,height=400,680
screen=pygame.display.set_mode(size)
clock=pygame.time.Clock()
Pipeline=Pipeline()
Bird=Bird()
while True:
clock.tick(60)
#轮询事件
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
background=pygame.image.load("background.png")
createMap()
pygame.quit()
运行效果如下:
3.4创建小鸟类
下面创建小鸟类。该类需要初始化很多参数,所以定义了一个__init__()方法,用来初始化各种参数,包括鸟飞行的几种状态、飞行的速度、跳跃的高度等。然后定义一个birdUpdate()方法,该方法用于实现小鸟的跳跃和坠落。接下来,在主逻辑的轮询事件中添加键盘按下事件或者鼠标单击事件,如按下鼠标,使小鸟上升等。最后,在createMap()方法中显示小鸟的图像。关键代码如下:
import pygame
import sys
import random
class Bird(object):
"""定义一个鸟类"""
def __init__(self):
"""定义初始化方法"""
self.birdRect=pygame.Rect(65,50,50,50)#鸟的矩形
#定义鸟的3种状态列表
self.birdStatus=[pygame.image.load("bird1.png"),
pygame.image.load