需要图片素材,音乐素材的朋友可以到我公众号【拇指笔记】后台回复"FPB"自取

做一个Flappy bird游戏的第二步就是按键检测。Flappy bird只需要用一个按键控制小鸟的飞行就可以了。

1.0 实现效果

1.1 需要的函数

  1. 获取事件。
pygame.event.get()
  1. 事件类型判断,这个函数在之前就被用来检测是否退出程序。这里我们用它来检测是否有按键被按下。
event.type == KETDOWN
  1. 获取按下的键值,返回一个元组,这个元组的索引就是键值,用K_a,K_b…表示
pygame.key.get_pressed()

1.2 检测空格键

首先需要对获取的事件进行类型判断,如果类型是KEYDOWN,需要获取按下的键值并则进一步对键值进行判断。

for event in pygame.event.get(): #获取事件if event.typr == KEYDOWN:        #判断事件类型press_keys = pygame.key,get_pressed()   #获取键值if press_keys[K_SPACE]:        #对键值进行判断...                     #如果按下的是空格,则...

这样,我们就实现了对空格键的检测。

1.3 优化程序

在对小鸟程序进行改写前,我们需要对之前的程序进行改写一下,以方便之后的操作。

首先是绘制图像,欢迎界面的元素不一定全都是游戏界面中的,所以我们需要将它们分别写在不同函数中。

def welcome():screen.blit(background,(0,0))screen.blit(green_base,(base_x,400))screen.blit(welcome1,(52,52))

其次是实现小鸟翅膀扇动的功能,为了让程序进一步模块化,我也将他拿出来编写成了函数。

#换图
def drawbird(count):count +=change_speed*time_passed_secondsif 0<=(count)<=50:screen.blit(mid_bird,(52,base_y))    elif 50<(count)<=100:screen.blit(up_bird,(52,base_y))elif 100<(count)<=150:screen.blit(down_bird,(52,base_y))if count>140:count -= 140return count

最后是小鸟运动的功能,这一部分在游戏界面和开始界面是不同的,游戏界面可以在此基础上更改。

#开始界面的小鸟、绿砖运动
def updatexy(time_passed_seconds,base_x,base_y,dirx):distance_moved = time_passed_seconds * speedbird_distance = time_passed_seconds * bird_speedbase_y = base_y + dirx*bird_distancebase_x -= distance_movedif base_x<-40:base_x += 40if base_y >235:#base_y+10:dirx = -1if base_y <215:#base_y-10:dirx = 1         return base_x,base_y,dirx

这样,就完成了对之前程序的调整,下一步就开始实现游戏需要的功能。

1.4 控制小鸟

控制为了实现控制小鸟功能,我们首先需要进入游戏界面,其次是让小鸟对空格键做出反应,最后对小鸟的飞行范围做限制。

1.4.1 制作游戏界面

游戏界面与开始界面最大的不同就是游戏界面少了下面这个图像,所以我们需要在游戏界面的元素中去掉它。

def start():screen.blit(background,(0,0))screen.blit(green_base,(base_x,400))

1.4.2 游戏界面小鸟的运动

游戏界面小鸟的运动和开始界面的小鸟运动有所区别。主要是游戏界面小鸟在不按空格时会不断向下坠并且飞行范围为整个游戏界面。为了实现这一功能,我对原来的updatexy()函数做了一些更改。首先是让小鸟飞行方向一直向下(dirx>0),并且让向下飞的速度为原来的两倍(dirx=2)。其次对小鸟的飞行范围做出限制,让小鸟一直处于0~490之间飞行。

def start_updatexy(time_passed_seconds,base_x,base_y,dirx):distance_moved = time_passed_seconds * speedbird_distance = time_passed_seconds * bird_speedbase_y = base_y + dirx*bird_distancebase_x -= distance_movedif base_x<-40:base_x += 40if 490>base_y >20:dirx = 2elif base_y >490:base_y = 490         elif base_y <0:base_y = 0return base_x,base_y,dirx

1.4.3 控制小鸟

最后也是最重要的,小鸟需要被控制,控制的方式就是通过空格键。每按一下空格键,小鸟就需要向上飞一些。但这个飞的距离,同样容易收到机器性能和程序运行时间的影响。为了消除这个影响,我仍然使用上一节提到的基于时间的速度控制,以保证在每一段时间里,小鸟飞行的距离相同。

基于时间的速度控制:设定一个速度值,并记录每一次循环运行的时间(时间长的循环飞的距离大些,时时间短的循环飞的距离小一些),这样就可以保证在同一段时间里,飞行的距离相同。

def moved(base_y,bird_speed1):press_key1 = pygame.key.get_pressed()if press_key1[K_SPACE]:#base_y -= 2bird_distance = time_passed_seconds * bird_speed1base_y = base_y - bird_distancereturn base_y

1.5 进入游戏

上面都是进入游戏后,需要实现的功能。对于进入游戏功能的实现,我引入了一个标志位变量(start_flag)并将他初始化为0,这样不仅可以进入游戏,还可以返回开始界面,当检测到空格被按下时,该变量被置1。

    if press_keys[K_SPACE]:  #按空格进入游戏start_flag = 1if press_keys[K_a]:      #按a退出游戏start_flag = 0if start_flag == 1:     #实现游戏功能time_passed = clock.tick()time_passed_seconds = time_passed / 1000 start()base_y = moved(base_y,500)count = drawbird(count)   base_x,base_y,dirx = start_updatexy(time_passed_seconds,base_x,base_y,dirx)

【Python】使用Pygame做一个Flappy bird小游戏(二)相关推荐

  1. 使用canvas写一个flappy bird小游戏

    简介 canvas 是HTML5 提供的一种新标签,它可以支持 JavaScript 在上面绘画,控制每一个像素,它经常被用来制作小游戏,接下来我将用它来模仿制作一款叫flappy bird的小游戏. ...

  2. cmd小游戏_使用pygame制作Flappy bird小游戏

    原文链接: [Python]使用Pygame做一个Flappy bird小游戏(一)​mp.weixin.qq.com 最近看到很多大佬用强化学习玩Flappy bird.所以打算也上手玩一玩,但是苦 ...

  3. Python 用pygame 做一个游戏的开始界面(小白第一篇博客)

    Python 用pygame 做一个游戏的开始界面(小白第一篇博客) 主要功能实现 本篇文章主要是实现了一个游戏开始界面的两个功能: 1,将鼠标放到"开始游戏"或"结束游 ...

  4. Python flappy bird 小游戏

    Python flappy bird 小游戏: 源码: from random import * from turtle import *from freegames import vectorbir ...

  5. 用Python代码做一个简单数字小游戏

    #作者是一个十三岁的小男孩. 编辑工具 电脑Python 需要模块 random #今日用代码做一个猜数小游戏 #话不多说,上代码!!! import random number = random.r ...

  6. 利用pgzero做一个接球的小游戏

    利用pgzero做一个接球的小游戏 说明 pgzero为python的一个用于游戏制作的库,它基于pygame模块 可用如下命令去安装 pip install pygame pip install p ...

  7. python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏

    集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...

  8. 50行python游戏代码_使用50行Python代码从零开始实现一个AI平衡小游戏

    使用50行Python代码从零开始实现一个AI平衡小游戏 发布时间:2020-10-23 09:26:14 来源:脚本之家 阅读:74 集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何 ...

  9. pygame做一个简单的打字游戏

    pygame做一个简单的打字游戏 1.基本代码 下面的代码完成了每一秒在界面的顶部随机生成一个新的字母 # -*- coding=utf-8 -*- import pygame from pygame ...

最新文章

  1. 在有@Override方法上面会报错如下
  2. tcpdump 抓取icmp数据包
  3. java执行器是什么_java使用Executor(执行器)管理线程
  4. python xpath爬虫_Python爬虫(2):XPath语法
  5. 深入浅出理解神经网络召回模型的优势
  6. redis的lrange_thinkphp5操作redis系列教程】列表类型之lRange,lGetRange
  7. PHP 函数截图 哈哈哈
  8. 1001.双系统互联的坑
  9. 非printf形式的十六进制和二进制打印(雅虎面试题)
  10. Python Tricks —— 计算 1+1/2+1/4+...=2
  11. 程序猿用EdrawMax可以画啥图呢?
  12. 运动控制卡应用开发教程之C#
  13. 注册表修改系统分辨率
  14. [War3]Fdf文件详解,简单的UI教程演示 - 魔兽争霸3
  15. Python入门学习笔记(三)
  16. (转载)硬盘安装XP64位系统
  17. SharePoint可上传编辑但不能删除的权限设置
  18. 2018年全国国家级自然保护区功能区划空间分布
  19. mac pro 安装双系统与windows下解决右键问题
  20. 关于java的1234

热门文章

  1. 让绵羊变成狮子---创造学习型营销团队[转]
  2. SAP ABAP 业务对象 BUS6021 AcctngSalesOrder 会计销售订单 BAPI 清单和相关 TCODE
  3. mysql 远程登陆设置_mysql远程登陆设置
  4. 2022水利水电安全员考试多选题库预测分享(3)
  5. 中国版“苹果”,小米将走向国际市场!
  6. 某月份各部门按小分类销售业绩达成状况(月报)之python代码的实现
  7. 将excel文件转换为MemoryStream 流用于浏览器中下载
  8. 2019年微信市场饱和,公众号运营如何突出重围?黎想
  9. 机器学习强基计划7-5:图文详解密度聚类DBSCAN算法(附Python实现)
  10. catia CAA 获取catia版本