import pygame #导入模块
import sys
class bird(): #定义类方法
def init(self): #小鸟类初始化方法
self.birdrect = pygame.Rect(200,325,40,30)
self.birdstatus=[pygame.image.load("image/0.png"),
pygame.image.load("image/1.png"),
pygame.image.load("image/2.png"),
pygame.image.load("image/dead.png")] #定义小鸟四种状态
self.status=0 #小鸟默认状态
self.birdX,self.birdY=200,325 #小鸟默认位置
self.jump=False #小鸟是否跳跃
self.dead=False #小鸟是否死亡
self.jumpSpeed = 10 # 小鸟每次跳跃高度
self.gravity = 1 # 小鸟每次下降高度
def birdUpdate(self):
if self.jump:
# 小鸟跳跃
self.jumpSpeed -= 0.5 # 速度递减,上升越来越慢
self.birdY -= self.jumpSpeed # 鸟Y轴坐标减小,小鸟上升
else:
# 小鸟坠落
self.gravity += 0.2 # 重力递增,下降越来越快
self.birdY += self.gravity # 鸟Y轴坐标增加,小鸟下降
self.birdrect[1] = self.birdY # 更改Y轴位置
class pipline(): #创建管道类方法
def init(self): #管道类初始化方法
self.piplineX=300 #默认管道X轴为300
self.upline=pygame.image.load("image/top.png") #导入上管道图片
self.downline=pygame.image.load("image/bottom.png") #导入下管道图片
def piplineUpdate(self): #管道移动方法
global piplinespeed #全局变量
global score #全局变量
self.piplineX-=piplinespeed #管道移动
if self.piplineX<=-94: #判断管道是否从左边移出
self.piplineX=400 #设置管道位置从右边重新移入
score+=1 #得分加1
piplinespeed+=0.5 #管道移动速度加0.5
def createMap(): #创建地图方法
screen.blit(backGround,(0,0)) #平铺图片
screen.blit(bird.birdstatus[bird.status],(bird.birdX,bird.birdY)) #将小鸟图片载入窗口
screen.blit(pipline.upline,(pipline.piplineX,-300)) #将上管道图片载入窗口,并设置其位置
screen.blit(pipline.downline, (pipline.piplineX, 400)) #将下管道载入窗口,并设置其位置
bird.birdUpdate() #调用birdUpdate方法
pipline.piplineUpdate() #调用piplineUpdate方法
screen.blit(font.render("score:" + str(score), True, (0, 0, 255)), (140, 50)) #渲染得分字符串
pygame.display.update() # 窗口更新
def checkdead():
uplinerect = pygame.Rect(pipline.piplineX, -300, pipline.upline.get_width(), pipline.upline.get_height())
downlinerect = pygame.Rect(pipline.piplineX, 400, pipline.downline.get_width(), pipline.downline.get_height())
if uplinerect.colliderect(bird.birdrect) or downlinerect.colliderect(bird.birdrect):
bird.dead=True
print("碰到管道了")
return True
if 0<=bird.birdrect[1]<=700:
bird.dead=True
print("飞出边界了")
return True
else:
bird.dead=False
return False
pygame.font.init() #字体初始化
font=pygame.font.SysFont(None,50) #设置字体样式
if name == 'main': #创建程序入口
pygame.init() #窗口初始化
size = width,height =400,700 #设置窗口大小
screen = pygame.display.set_mode(size) #实例化窗口
clock = pygame.time.Clock() #获取时间
bird=bird() #实例化小鸟类
pipline=pipline() #实例化管道类
score = 0 #定义score变量
piplinespeed = 1 #定义piplinespeed变量
while True:
clock.tick(60) #设置帧数
for event in pygame.event.get(): #获取界面操作
if event.type == pygame.QUIT: #判断界面操作是否为退出
pygame.quit() #关闭应用
sys.exit() #关闭应用进程
if event.type == pygame.KEYDOWN: #判断是否有键盘输入
bird.jump=True #小鸟为跳跃状态
backGround = pygame.image.load("image/background.png") # 导入背景图
createMap() #调用createMap方法