简直完美!!!Python3+pygame实现的flappy bird游戏,还有音乐(附源码资料)

本文介绍了一款使用Python3和pygame模块编写的Flappy Bird游戏,游戏运行流畅,包含音乐。作者分享了游戏的运行效果和完整代码,并鼓励读者提供反馈和建议。
摘要由CSDN通过智能技术生成

 

前文

相信大家肯定玩过或见过这个游戏,我之前也一直在手机上玩flappy bird游戏,闲暇时间就编写了一个

是采用python3+pygame模块制作而成的,运行效果非常流畅,会让你大吃一惊哦!^_^

 

一、运行效果展示

下载游戏之后,注意在自己的python环境中安装pygame模块,如果没有安装可以使用pip install pygame 进行安装

然后使用使用命令运行起这个.py文件,运行之后的第一个界面效果如下,是不是很酷炫

图片

当点击上图中的“Play”按钮之后的效果如下:

图片

运行之后是有音乐的,大家可以下载代码的时候一起将素材下载,这样就在运行时就能听到音乐

二、完整代码

下面代码用到了素材(背景图片,音乐等,下载地址:点击

 1 import math
  2 import os
  3 import time
  4 from  random import randint
  5 from random import uniform
  6 import pygame
  7 from pygame.locals import * #导入一些常用的变量
  8 from collections import deque#加入了队列
  9 
 10 FPS = 60
 11 BK_WIDTH = 900  #背景宽度
 12 BK_HEIGHT = 650  #背景高度
 13 PIPE_WIDTH = 80 #水管的宽度
 14 PIPE_HEIGHT = 10 #水管素材的高度
 15 PIPE_HEAD_HEIGHT = 32#管子头的高度
 16 
 17 #初始化全局变量
 18 BK_MOVE_SPEED = 0.22#主柱子每毫秒移动的速度
 19 ADD_TIME = 2500##每隔多少毫秒就增加一个柱子 这种方法不会有漏洞吗  就是当毫秒数和帧数不匹配啥的  #还需要仔细的思考
 20 TOTAL_PIPE_BODY  =  int(3/5 * BK_HEIGHT)  # 像素值必须为整数   占窗口的3/5
 21 PIPE_RATE =0.96
 22 a_i="bird-wingup"
 23 b_i="bird-wingmid"
 24 c_i="bird-wingdown"
 25 
 26 INITAL_SPEED = -0.37#鸟的Y轴初速度
 27 BIRD_WIDTH = 50
 28 BIRD_HEIGHT = 40
 29 BIRD_INIT_SCORE  = 7#鸟的初始通关分数
 30 
 31 STONE_ADD_TIME = 1000 #每隔多少毫秒就增加一个石头
 32 STONE_WIDTH = 40
 33 STONE_HEIGHT = 30
 34 STONE_LEVEL = 4#石头出现的等级
 35 
 36 BUTTON_WIDTH = 140
 37 BUTT0N_HEIGHT = 60
 38 
 39 BULLET_SPEED = 0.32#子弹的速度
 40 BULLET_WIETH = 50
 41 BULLET_HEIGHT = 30
 42 #设置全局变量 方便修改参数
 43 
 44 
 45 pygame.init()
 46 screen = pygame.display.set_mode((BK_WIDTH,BK_HEIGHT))
 47 pygame.mixer.init()
 48 
 49 music_lose = pygame.mixer.Sound("lose.wav")
 50 music1 = pygame.mixer.Sound("touch.wav")
 51 pygame.mixer.music.load("bkm.mp3")
 52 font = pygame.font.SysFont('comicsansms', 25)
 53 
 54 
 55 #用于设置鸟的种类
 56 def little_bird(list):
 57     global a_i
 58     global b_i
 59     global c_i
 60     a_i=list[0]
 61     b_i=list[1]
 62     c_i=list[2]
 63 
 64 
 65 #用于设置关卡难度
 66 def seteasy(list):
 67     global BK_MOVE_SPEED  # 背景每毫秒移动的速度   就是柱子移动的速度
 68     global ADD_TIME  # 每隔多少毫秒就增加一个柱子
 69     global TOTAL_PIPE_BODY  # 像素值必须为整数   占窗口的3/5
 70     global PIPE_RATE
 71     global STONE_LEVEL  # 鸟出现的等
 72     global BIRD_INIT_SCORE
 73 
 74     BK_MOVE_SPEED = list[0]  # 背景每毫秒移动的速度
 75     ADD_TIME = list[1]  # 每隔多少毫秒就增加一个柱子
 76     TOTAL_PIPE_BODY =list[2]  # 像素值必须为整数   占窗口的3/5
 77     PIPE_RATE = list[3]
 78     Pipe.add_time = list[1]
 79     BIRD_INIT_SCORE = list[4]
 80     STONE_LEVEL = list[5]
 81 
 82 
 83 #子弹类
 84 class Bullet(pygame.sprite.Sprite):
 85     speed = BULLET_SPEED
 86     width = BULLET_WIETH
 87     height = BULLET_HEIGHT
 88 
 89     def __init__(self,bird,images):
 90         super(Bullet,self).__init__() #d调用父类的初始函数 使用此方法 可以减少代码的更改量 并且解决了多重继承的问题
 91         self.x,self.y = bird.x,bird.y
 92         self.bullet = images #给鸟的图片进行赋值
 93         self.mask_bullet = pygame.mask.from_surface(self.bullet)
 94     def update(self):#计算鸟在下一点的新坐标并更新
 95         self.x=self.x+self.speed*frames_to_msec(1)
 96     @property
 97     def image(self):
 98         return self.bullet
 99     @property
100     def mask(self):
101         return self.mask_bullet
102     @property
103     def rect(self):
104         return Rect(self.x,self.y,Bullet.width,Bullet.height)
105     def visible(self):
106         return 0<self.x<BK_WIDTH+Bullet.width
107 
108 
109 #小鸟做竖直上抛运动  当小鸟加速到一定状态时 就不再加速了
110 class Bird(pygame.sprite.Sprite):
111 
112     width =BIRD_WIDTH #鸟宽
113     height = BIRD_HEIGHT #鸟长
11
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值