python实现简单flappy bird

本文实例为大家分享了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)

以上是 python实现简单flappy bird 的全部内容, 来源链接: utcz.com/z/355904.html

回到顶部