使用Pygame开发flappy bird 您所在的位置:网站首页 bird和birdy 使用Pygame开发flappy bird

使用Pygame开发flappy bird

2024-07-07 23:57| 来源: 网络整理| 查看: 265

使用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("bird2.png"), pygame.image.load("bird3.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 else: #小鸟坠落 self.gravity+=0.2 self.birdY+=self.gravity self.birdRect[1]=self.birdY class Pipeline(object): """定义一个管道类""" def __init__(self): """定义初始化方法""" pass def updatePipeline(self): """水平移动""" pass def createMap(): """定义地图创建方法""" screen.fill((255,255,255)) screen.blit(background,(0,0)) #显示小鸟 if Bird.dead: Bird.status=2 elif Bird.jump: Bird.status=0 screen.blit(Bird.birdStatus[Bird.status],(Bird.birdX,Bird.birdY))#设置小鸟坐标 Bird.birdUpdate() 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() 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("background.png") createMap() pygame.quit()

上述代码在Bird类中设置了birdStatus属性,该属性是一个鸟类图片的列表,列表中显示鸟类3中飞行状态,根据小鸟的不同状态加载相应的图片。在birdUpdate()方法中,为了达到较好的动画效果,使jumpSpeed和gravity两个属性逐渐变化。运行上述代码,在窗体内创建一只小鸟,默认情况小鸟会一直下降。当单击一下鼠标或按一下键盘,小鸟会跳跃一下,高度上升。 运行效果如下: 在这里插入图片描述

3.5创建管道类 创建完鸟类后,接下来创建管道类。同样,在__init__()方法中初始化各种参数,包括设置管道的坐标,加载上下管道图片等。然后在updatePipeine()方法中,定义管道向左移动的速度,并且当管道移出屏幕时重新绘制下一组管道。最后,在createMap()函数中显示管道。关键代码如下:

import pygame import sys import random class Bird(object): #省略部分代码 class Pipeline(object): """定义一个管道类""" def __init__(self): """定义初始化方法""" self.wallx=400; self.pineUp=pygame.image.load("top.png") self.pineDown=pygame.image.load("bottom.png") def updatePipeline(self): """水平移动""" self.wallx-=5 #当管道运行到一定位置,即小鸟飞越管道,分数加1,并且重置管道 if self.wallx


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有