侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现简单flappy bird

Python  /  管理员 发布于 7年前   160

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

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


  • 上一条:
    使用Python 正则匹配两个特定字符之间的字符方法
    下一条:
    Python 输出时去掉列表元组外面的方括号与圆括号的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客