python

超轻量级php框架startmvc

python实现简单flappy bird

更新时间:2020-06-17 16:06 作者:startmvc
本文实例为大家分享了python实现flappybird的简单代码,供大家参考,具体内容如下importpygamefr

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。