首页 > 编程 > Python > 正文

python实现简单flappy bird

2020-01-04 13:43:08
字体:
来源:转载
供稿:网友

本文实例为大家分享了python实现flappy bird的简单代码,供大家参考,具体内容如下

import pygamefrom pygame.locals import *from sys import exitimport random # 屏幕宽度SCREENWIDTH = 288# 屏幕高度SCREENHEIGHT = 512IMAGES = {}# 背景图片地址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,不透明用convertIMAGES['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 = 30FPSCLOCK = 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//2y = SCREENHEIGHT//2move_x = 0move_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)

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


注:相关教程知识阅读请移步到python教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表