Python写Flappy Bird

import pygame
import sys
import random

class Bird(object):
    """定义一个鸟类"""
    def __init__(self):
        """定义初始化方法"""
        self.birdRect = pygame.Rect(65, 50, 50, 50)  # 鸟的矩形
        # d定义鸟的3种状态
        self.birdStatus = [pygame.image.load("png/1.png"),
                           pygame.image.load("png/2.png"),
                           pygame.image.load("png/dead.png")]
        self.status = 0  # 默认飞行坐标
        self.birdx = 120  # 鸟所在的x轴坐标
        self.birdy = 350  # 鸟所在的Y轴坐标,即上下飞行的高度
        self.jump = False  # 默认情况下小鸟自动降落
        self.jumpSpeed = 10  # 跳跃高度
        self.gravity = 5  # 重力
        self.dead = False  # 默认小鸟为活着
    def birdUpdate(self):
        """创建一个鸟的方法更新鸟的运动状态"""
        if self.jump:
            #小鸟跳跃
            self.jumpSpeed -= 1     #速度递减,上升越来越慢
            self.birdy -= self.jumpSpeed    #鸟的Y轴坐标减小,小鸟上升
        else:
            self.gravity += 2      #重力递增,下降越来越快
            self.birdy += self.gravity    #鸟的Y坐标增加,小鸟下降
        self.birdRect[1] = self.birdy    #更改Y轴位置
class Pipeline(object):
    """定义一个管道类"""
    def __init__(self):
        """定义初始化方法"""
        self.wallx = 400    #管道所在X轴坐标
        self.pineUp = pygame.image.load("png/top.png")    #加载上管道图片
        self.pineDown = pygame.image.load("png/bottom.png")   #加载下管道图片
    def updatePipeline(self):
        """让管道水平向左移动"""
        self.wallx -= 5    #管道X轴坐标递减,即管道向左移动
        #当管道运行到一定位置,即小鸟飞跃管道,分数加1,并且重置管道
        if self.wallx < -80:
            global score
            score += 1
            self.wallx = 400
def createMap():
    """定义创建地图的方法"""
    screen.fill((255,255,255))   #填充颜色
    screen.blit(background,(0,0))   #填入到背景
    # 显示管道
    screen.blit(Pipeline.pineUp,(Pipeline.wallx,-300))   #上管道坐标位置
    screen.blit(Pipeline.pineDown,(Pipeline.wallx,500))   #下管道坐标位置
    Pipeline.updatePipeline()    #移动管道
    #显示小鸟
    if Bird.dead:         #撞管道的状态
        Bird.status = 2
    elif Bird.jump:         #飞行状态
        Bird.status = 1
    screen.blit(Bird.birdStatus[Bird.status],(Bird.birdx,Bird.birdy))      #设置小鸟坐标
    Bird.birdUpdate()
    pygame.display.update()   #更新显示
def checkDead():
    #上方管子的矩形位置
    upRect = pygame.Rect(Pipeline.wallx,-300,Pipeline.pineUp.get_width() - 10,Pipeline.pineUp.get_height())
    #下方管子的矩形位置
    downRect = pygame.Rect(Pipeline.wallx,500,Pipeline.pineDown.get_width() - 10,Pipeline.pineDown.get_height())
    #检测小鸟与上下方管子是否碰撞
    if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):
        Bird.dead = True

    #检测小鸟是否飞出边界
    if not 0 < Bird.birdRect[1] < height:
        Bird.dead = True

        return  True
    else:
        return False

def getResult():
    final_text1 = "Game Over"
    final_text2 = "Your final score is :  " + str(score)
    ft1_font = pygame.font.SysFont("Arial",70)       #设置第一行文字字体
    ft1_surf = font.render(final_text1,1,(242,3,36))    #设置第一行文字颜色
    ft2_font = pygame.font.SysFont("Arial", 50)  # 设置第二行文字字体
    ft2_surf = font.render(final_text2, 1, (253, 177, 6))  # 设置第二行文字颜色
    #设置两行文字显示位置
    screen.blit(ft1_surf,[screen.get_width()/2 - ft1_surf.get_width()/2,100])
    screen.blit(ft2_surf, [screen.get_width() / 2 - ft2_surf.get_width() / 2, 200])
    #更新整个待显示的Surface对象到屏幕上
    pygame.display.flip()
if __name__ == '__main__':
    """主程序"""
    pygame.init()   #初始化pygame
    pygame.font.init()     #初始化字体
    score = 0      #初始化分数
    pygame.display.set_caption("Flappy bird")    #设置窗口标题
    font = pygame.font.SysFont(None,50)    #设置默认字体和大小
    size = width,height = 400,660   #设置窗口
    screen = pygame.display.set_mode(size)    #显示窗口
    icon = pygame.image.load("png/1.png")   #修改窗口默认图标
    pygame.display.set_icon(icon)
    clock = pygame.time.Clock()   #设置时钟
    Bird = Bird()   #实例化鸟类
    Pipeline = Pipeline()  #实例化管道类
    while True:
        clock.tick(60)   #每秒执行60次
        #轮询事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead:
                Bird.jump = True   #跳跃
                Bird.gravity = 5   #重力
                Bird.jumpSpeed = 10   #跳跃速度
        background = pygame.image.load("png/background.png")    #加载背景图片
        if checkDead():     #检测小鸟生命状态
            getResult()      #如果小鸟死亡,显示游戏总分数
        else:
            createMap()  #创建地图
    pygame.QUIT()  #退出

Python写Flappy Bird