使用pygame编写Flappy bird小游戏

0. 最终效果:

1. 搭建一个最小框架

1.1 需要的函数

初始化所有导入的pygame模块。

pygame.init()

生成一个窗口。返回的是一个surface对象。通过resolution设置窗口大小,flags代表扩展选项,depth代表设置颜色,但不建议设置。

pygame.display.set_mode((resolution =(0,0),flags = 0,depth = 0))

设置窗口标题。

pygame.display.set_caption("Flappy bird_Lin")

检测事件。

pygame.event.get()

更新显示。

pygame.display.update()

结束程序。

pygame.quit()
sys.exit()

1.2 搭建框架

首先,导入需要的库。

import sys
import pygame
from pygame.locals import *

其次,进行模块初始化并设置。

pygame.init()
screen = pygame.display.set_mode((288,512))
pygame.display.set_caption("Flappy bird_Lin")

最后,获取事件并响应。

#在本例中,唯一需要检测的事件就是是否退出
while True:
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
  pygame.quit()
 sys.exit()
 pygame.display.update() #刷新屏幕

1.3 完整框架

import sys
import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((288,512))
pygame.display.set_caption("Flappy bird_Lin")

#在本例中,唯一需要检测的事件就是是否退出
while True:
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
  pygame.quit()
 sys.exit()
 pygame.display.update() #更新屏幕

2. 添加图片元素

2.2 实现效果

2.1 需要的函数
从文件中加载新文件。返回一个Surface

pygame.image.load('图片路径')

在窗口上添加图片。source:第一步返回的Surface;dest:指定绘制位置。

screen.blit(source,dest)

更新屏幕

pygame.display.update() #更新屏幕

2.2 添加到框架

因为我要实现的是Flappy_bird,所以我将Flappy_bird开始界面的图像元素添加到框架。

background_image = 'K:/bird/background-night.png'
green = 'K:/bird/base.png'
mid_b = 'K:/bird/bluebird-midflap.png'
welcome = 'K:/bird/message.png'

import pygame
from pygame.locals import *
import sys

pygame.init()
screen = pygame.display.set_mode((288,512))
pygame.display.set_caption("Flappy bird_Lin")

background = pygame.image.load(background_image)
green_base = pygame.image.load(green)
mid_bird = pygame.image.load(mid_b)
welcome1 = pygame.image.load(welcome)

while True:
 for event in pygame.event.get():
 if event.type == QUIT:
  pygame.quit()
  sys.exit()
 screen.blit(background,(0,0))
 screen.blit(green_base,(0,400))
 screen.blit(mid_bird,(52,225))
 screen.blit(welcome1,(52,52))
 pygame.display.update()

3. 实现小鸟飞行效果

让图片动起来其实很容易,只需要有规律的改变图片的位置坐标。但这种方式会导致在不同情况下,图片的移动速度不一样(程序的运行速度变化了)。因此,我们使用另一种方法解决这个问题。

为了保证在相同时间里小鸟运动的距离相同,我们引入了Clock对象,用来计算每一帧经过的时间,速度*时间=距离,所以我们只需要设定一个不变的速度值,就可以保证图片在任何情况下运动速度均相同。

3.0 实现效果

3.1 需要的函数

初始化Clock对象。

pygame.time.Clock()

更新时钟,计算自上次调用以来经过了多少毫秒。

clock.tick()

3.2 思路实现
首先需要在进入循环之前,初始化Clock对象并设定一个速度值。然后在循环中每一帧都记录一次运行时间。最后将运行时间乘以速度值,就得到了本次应该运行的距离。

#进入循环之前
clock = pygame.time.Clock()
speed = 100

#进入循环
 time_passed = clock.tick()
 time_passed_ms = time_passed/1000 #毫秒转换为秒
 distance = speed*time_passed_ms
 x += distance #图片的坐标位置

 if x >lim:
 x -= lim #清0,为了减少运行时间不直接归零

3.3 添加到框架

background_image = 'K:/bird/background-night.png'
green = 'K:/bird/base.png'
mid_b = 'K:/bird/bluebird-midflap.png'
welcome = 'K:/bird/message.png'

import pygame
from pygame.locals import *
import sys

pygame.init()
screen = pygame.display.set_mode((288,512))
pygame.display.set_caption("Flappy bird_Lin")

background = pygame.image.load(background_image)#.convert()
green_base = pygame.image.load(green)
mid_bird = pygame.image.load(mid_b)
welcome1 = pygame.image.load(welcome)

base_x = 0
bird_y = 225
speed = 100
clock = pygame.time.Clock()

while True:
 for event in pygame.event.get():
 if event.type == QUIT:
  pygame.quit()
  sys.exit()
 screen.blit(background,(0,0))
 screen.blit(green_base,(base_x,400))
 screen.blit(mid_bird,(52,bird_y))
 screen.blit(welcome1,(52,52))

 time_passed = clock.tick()
 time_passed_seconds = time_passed / 1000.0

 distance_moved = time_passed_seconds * speed
 base_x -= distance_moved
 if base_x<-40:
 base_x += 40

 pygame.display.update()

4. 实现小鸟煽动翅膀效果

实现小鸟飞行效果一共需要两步,首先是需要让小鸟上下移动,其次是切换图片以实现扇动翅膀的效果。

4.1 小鸟上下移动
这一步实现很简单,方法和上面的一致。不再赘述,直接上代码了。

#进入循环前
base_y = 225
bird_speed = 50
#进入循环
 time_passed_seconds = time_passed / 1000.0
 bird_distance = time_passed_seconds * bird_speed
 base_y = base_y + dir*bird_distance
 if base_y >240:
 dir = -1
 if base_y <210:
 dir = 1

添加到框架的步骤也不再赘述了,与前面一致。

4.2 小鸟扇动翅膀
实现小鸟扇动翅膀的效果只需要每隔几帧切换一次图像。但同样容易随着机器性能等原因,出现时快时慢的现象,为了解决这个问题,可以采用与绿砖运动相似的方法,基于时间的图像切换。

#在进入循环前的部分需要添加切换速度和计数值
change_speed = 500
count = 0
#进入循环后
 #需要根据运行时间,决定计数增大的幅度(变化的快慢)
 count +=change_speed*time_passed_seconds
 if 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 -= 140 

到此这篇关于使用pygame编写Flappy bird小游戏的文章就介绍到这了,更多相关pygame Flappy bird小游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pygame游戏之旅 按钮上添加文字的方法

    本文为大家分享了pygame游戏之旅的第11篇,供大家参考,具体内容如下 定义一个button函数,将文字,颜色等作为参数. def button (msg, x, y, w, h, ic, ac): mouse =pygame.mouse.get_pos() if x + w > mouse[0] > x and y + h > mouse[1] > y: pygame.draw.rect(gameDisplay, ac, (x,y,w,h)) else: pygame.draw

  • 用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动

    目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有这项技能的同学只能和我一样从网上下载相应的素材了. 网上可以找到相应的这样的图片,注意,所有的元件图片要是png类型的图片,那样可以有透明的背景,否则会有白色的边框露出来. 找到素材以后我们就要开始搭建我们的飞机大战了. 微信上的飞机大战是由手指控制的,在电脑上,我们就先用鼠标代替了. 按照之前我们在天空上移动云的那个程序,我们可以知道该怎么做

  • python基于pygame实现响应游戏中事件的方法(附源码)

    本文实例讲述了python基于pygame实现响应游戏中事件的方法.分享给大家供大家参考,具体如下: 先看一下我做的demo效果: 当玩家按下键盘上的:上,下,左,右键的时候,后台会打印出玩家所按键的数字值,而图形会随之移动 这是客观上面存在的现象. 那么啥是事件呢? 你叫我做出定义,我不知道,我只能举个例子说明,例如接下来的代码中,列出来一些关于游戏中的事件 ''' 事件 产生途径 参数 QUIT 用户按下关闭按钮 none ATIVEEVENT Pygame被激活或者隐藏 gain, sta

  • python使用pygame模块实现坦克大战游戏

    本文实例为大家分享了pygame模块实现坦克大战游戏的具体代码,供大家参考,具体内容如下 首先,第一步,游戏简单素材的准备. 炮弹,炮弹,坦克移动.音乐-开火素材. 其次,思路整理. 我们需要几个类,分别是玩家类,敌人类,炮弹类及地图类,开始游戏界面以及结束界面,血条等等. 开始coding. 主函数,new一个对象(java乱入emmm),声明一个对象. # encoding : utf-8 # anthor : comi from gameloop import * from pygame

  • pygame游戏之旅 调用按钮实现游戏开始功能

    本文为大家分享了pygame游戏之旅的第12篇,供大家参考,具体内容如下 实现点击功能: click = pygame.mouse.get_pressed() print(click) if x + w > mouse[0] > x and y + h > mouse[1] > y: pygame.draw.rect(gameDisplay, ac, (x,y,w,h)) if click[0] == 1 and action != None: action() 修改显示文字: p

  • python使用pygame框架实现推箱子游戏

    本代码来源于 <Python和Pygame游戏开发指南>中的 Star Pusher 游戏,供大家参考,具体内容如下 # Star Pusher (a Sokoban clone) # By Al Sweigart al@inventwithpython.com # http://inventwithpython.com/pygame # Released under a "Simplified BSD" license import random, sys, copy,

  • pygame游戏之旅 添加游戏暂停功能

    本文为大家分享了pygame游戏之旅的第13篇,供大家参考,具体内容如下 定义暂停函数: def paused(): largeText = pygame.font.SysFont('comicsansms',115) TextSurf, TextRect = text_objects('Paused', largeText) TextRect.center = ((display_width/2),(display_height/2)) gameDisplay.blit(TextSurf, T

  • pygame游戏之旅 添加icon和bgm音效的方法

    本文为大家分享了pygame游戏之旅的第14篇,供大家参考,具体内容如下 添加icon需要用的函数是: gameIcon = pygame.image.load("carIcon.png") pygame.display.set_icon(gameIcon) 添加bgm和音效的函数是: crash_sound = pygame.mixer.Sound("crashed.wav") pygame.mixer.music.load("bgm.wav"

  • 使用pygame编写Flappy bird小游戏

    0. 最终效果: 1. 搭建一个最小框架 1.1 需要的函数 初始化所有导入的pygame模块. pygame.init() 生成一个窗口.返回的是一个surface对象.通过resolution设置窗口大小,flags代表扩展选项,depth代表设置颜色,但不建议设置. pygame.display.set_mode((resolution =(0,0),flags = 0,depth = 0)) 设置窗口标题. pygame.display.set_caption("Flappy bird_

  • python flappy bird小游戏分步实现流程

    目录 导语: 开发工具: 环境搭建 运行视频: 正文: 计分表 结尾: 导语: 哈喽,哈喽~今天小编又来分享小游戏了——flappy bird(飞扬的小鸟),这个游戏非常的经典,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍.这个游戏能对于小编来说还是有点难度的. 开发工具: Python版本:3.6.4 相关模块: pygame模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 运行视频: 播放链接:https:

  • 纯JavaScript 实现flappy bird小游戏实例代码

    前言: <flappy bird>是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏于2013年5月24日上线,并在2014年2月突然暴红.2014年2月,<Flappy Bird>被开发者本人从苹果及谷歌应用商店撤下.2014年8月份正式回归APP STORE,正式加入Flappy迷们期待已久的多人对战模式.游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍. 正文: 接下来就是一步一步来实现它 步骤1:页面布局,这儿就不多说了,页面内容如下:

  • C语言实现Flappy Bird小游戏

    本文实例为大家分享了C语言实现Flappy Bird小游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> #include<Windows.h> /********函数变量声明********/ #define PR_Box printf("■") #define PR_Gold printf(

  • python实现flappy bird小游戏

    本文实例为大家分享了python实现flappy bird游戏的具体代码,供大家参考,具体内容如下 flappygamemain.py # -*- coding: utf-8 -*- from __future__ import unicode_literals """ Created on Dec 25 2016 @author: LINJUNJI @mail: ljj6@mail2.sysu.edu.cn """ import pygame

  • C语言简易版flappy bird小游戏

    假期在家无聊,想随便码点东西,故有此简陋的小游戏诞生.觉着可能对初学C语言的小伙伴练习有点帮助,故写此博客.游戏界面如下: 首先,先画出整个小游戏实现的流程图,如下: 思路很简单,整个游戏界面是由一个大的char类型数组构成,更新数组的值然后不停的打印出来就形成了动态效果. 由上图看,大循环是保证游戏一直不断的进行下去,小循环是让小鸟的速度大于游戏界面里背景(由#构成的柱子)的速度(小鸟动四下柱子才动一下). 下面是具体代码(水平有限大家多多见谅,但是效果还是有的!) Bird.c文件 #inc

  • java实现flappy Bird小游戏

    本文实例为大家分享了java实现flappy Bird游戏的具体代码,供大家参考,具体内容如下 整个游戏由3个类构成.Bird类,Pipe类,stage类 第一步:首先写一个Bird类 //鸟类 public class Bird { private int flyHeight;//飞行高度 private int xpos;//距离y轴(窗口左边缘)的位置, public static int Up=1;//向上飞 public static int Down=-1;//向下飞 public

  • 原生js实现Flappy Bird小游戏

    这是一个特别简单的用原生js实现的一个小鸟游戏,比较简单,适合新手练习. html结构 <div id="game"> <div id="bird"></div> </div> css样式 #game { width: 800px; height: 600px; border: 1px solid #000; background: url(images/sky.png); overflow: hidden; posi

  • JavaScript实现Fly Bird小游戏

    本教程为大家分享了Fly Bird小游戏的制作流程,供大家参考,具体内容如下 1.分析页面结构,理清需求和功能 游戏有三个界面,分别是开始界面,游戏界面和游戏结束界面. 1.1 开始界面 start.gif 游戏的大背景 上下移动的游戏标题和翅膀摆动的小鸟 start 按钮,点击进入游戏界面 一直移动的地面 1.2 游戏界面 play.gif 显示越过障碍数量的计分器 移动的障碍物,分别是上管道和下管道 点击游戏界面,小鸟向上飞起,然后在重力作用下下坠, 当小鸟和管道碰撞后,结束界面弹出,同时小

  • 使用vue.js编写蓝色拼图小游戏

    之前在网上看到<蓝色拼图>这款小游戏,作者是用jquery写的.于是便考虑能不能用vue.js优雅简单的编写出来呢? Later equals never!说干就干.首先理解游戏的规则:第一关为1*1的方块,第二关为2*2以此类推 该图为第三关3*3的方块.点击一个小方块,该方块和它相邻的方块的的颜色会从黄色变为蓝色,全部变为蓝色就过关了. 现在规则清楚了,开动吧! /*style*/ .game_bg{ background: #333; width: 600px; height: 600p

随机推荐