本文实例为大家分享了python实现flappy bird的简单代码,供大家参考,具体内容如下
import pygame
from pygame.locals import *
from sys import exit
import random
# 屏幕宽度
SCREENWIDTH = 288
# 屏幕高度
SCREENHEIGHT = 512
IMAGES = {}
# 背景图片地址
BACKGROUND_PATH = \'back_ground.png\'
PIPE_PATH = \'pipe.png\'
BASE_PATH = \'base.png\'
PLAYER_PATH = (
\'bird2_0.png\',
\'bird2_1.png\',
\'bird2_2.png\',
)
# 初始化
pygame.init()
# 创建窗口
SCREEN = pygame.display.set_mode((SCREENHEIGHT, SCREENHEIGHT))
# 设置窗口标题
pygame.display.set_caption(\"Flappy Bird\")
# 加载图片,透明用convert_alpha,不透明用convert
IMAGES[\'background\'] = pygame.image.load(BACKGROUND_PATH).convert()
IMAGES[\'base\'] = pygame.image.load(BASE_PATH).convert_alpha()
IMAGES[\'bird\'] = (
pygame.image.load(PLAYER_PATH[0]).convert_alpha(),
pygame.image.load(PLAYER_PATH[1]).convert_alpha(),
pygame.image.load(PLAYER_PATH[2]).convert_alpha(),
)
IMAGES[\'pipe\'] = (
pygame.transform.rotate(pygame.image.load(PIPE_PATH).convert_alpha(), 180),
pygame.image.load(PIPE_PATH).convert_alpha()
)
BASEY = SCREENHEIGHT * 0.82
# 设置帧率
FPS = 30
FPSCLOCK = pygame.time.Clock()
PIPE_WIDTH = IMAGES[\'pipe\'][0].get_width()
PIPE_HEIGHT = IMAGES[\'pipe\'][0].get_height()
PLAYER_WIDTH = IMAGES[\'bird\'][0].get_width()
PLAYER_HEIGHT = IMAGES[\'bird\'][0].get_height()
PIPEGAPSIZE = 100 # 两个水管之间的距离
x = SCREENWIDTH//2
y = SCREENHEIGHT//2
move_x = 0
move_y = 0
flap = 0 # 小鸟初始状态
pipeVelX = -4 # 管道x方向的速度
playerVelY = 0 # 小鸟y方向的初速度
playerMaxVelY = 10 # 小鸟y方向的最大速度
playerMinVelY = -8 # 小鸟y方向的最小速度
playerAccY = 2 # 小鸟y方向的下降加速度
playerFlapAcc = -3 # 小鸟y方向的上升加速度
playerFLapped = False # 当小鸟飞的时候为真
playery = int((SCREENHEIGHT - PLAYER_HEIGHT)/2)
# 随机移动柱子
def getRandomPipe():
# 两个水管之间的距离有如下变量
gapYs = [20, 30, 40, 50, 60, 70, 80, 90]
index = random.randint(0, len(gapYs) - 1)
gapY = gapYs[index]
gapY += int(BASEY * 0.2)
# 水管x坐标
pipeX = SCREENWIDTH + 10
return [
{\'x\': pipeX, \'y\': gapY - PIPE_HEIGHT}, # 上面水管的左上角位置
{\'x\': pipeX, \'y\': gapY + PIPEGAPSIZE}, # 下面水管的左上角位置
]
newPipel = getRandomPipe()
upperPipes = [
{\'x\': SCREENWIDTH, \'y\':newPipel[0][\'y\']}
]
lowerPipes = [
{\'x\': SCREENWIDTH, \'y\':newPipel[1][\'y\']}
]
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
elif event.type == KEYDOWN:
if event.key == K_LEFT:
move_x = -3
elif event.key == K_RIGHT:
move_x = 3
elif event.key == K_UP:
move_y = -3
elif event.key == K_DOWN:
move_y = 3
elif event.type == KEYUP:
move_x = 0
move_y = 0
x = x + move_x
y = y + move_y
# 防止冲出边界
if x > SCREENWIDTH:
x = 0
elif x < 0:
x = SCREENWIDTH
if y > SCREENHEIGHT:
y = 0
elif y < 0:
y = SCREENHEIGHT
# 贴图在左上角
SCREEN.blit(IMAGES[\'background\'], (0, 0)) # 背景
# 显示水管
for uPipe, lPipe in zip(upperPipes, lowerPipes):
SCREEN.blit(IMAGES[\'pipe\'][0], (uPipe[\'x\'], uPipe[\'y\']))
SCREEN.blit(IMAGES[\'pipe\'][1], (lPipe[\'x\'], lPipe[\'y\']))
# 放小鸟
SCREEN.blit(IMAGES[\'bird\'][flap], (x, y))
flap = flap + 1
if flap % 3 == 0:
flap = 0
for uPipe, lPipe in zip(upperPipes, lowerPipes):
uPipe[\'x\'] += pipeVelX
lPipe[\'x\'] += pipeVelX
# 当水管移动到某一位置的时候,生成新的水管
if 0 < upperPipes[0][\'x\'] < 5:
newPipe = getRandomPipe()
upperPipes.append(newPipe[0])
lowerPipes.append(newPipe[1])
# 如果水管从右往左移动到边缘,则摧毁水管
if upperPipes[0][\'x\'] < -PIPE_WIDTH:
# 队列头出队
upperPipes.pop(0)
lowerPipes.pop(0)
# 刷新画面
pygame.display.update()
FPSCLOCK.tick(FPS)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。




