
还记得前几年很火那款飞飞飞之小鸟吃太胖你不点它就飞不动的游戏吗?

没错,《flappy bird》是一款由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏于2013年5月24日上线,并在2014年2月突然暴红。
游戏玩法非常简单,通过点击屏幕,使小鸟一直飞并穿过水管的空隙。虽然玩法简单,但是却具有一定的难度,因为要一直控制小鸟飞在适合的高度,以避开障碍。
这篇文章呢,就来分析这个游戏的原理,以及用python做一个简易版的FlappyBird。当然,简易版的只是用来帮助初学者理解游戏原理,想要完整版带游戏资源的源码,文末放上Github链接。
下边开始分析游戏原理:
游戏画布
二维的游戏画布就是一个二维的坐标系,pygame游戏画布中,原点坐标(0,0)在左上角, 后边用(x, y)表示,水平方向往右x增大,垂直往下y增大,每一个坐标代表一个像素宽度。

游戏组成
游戏元素有小鸟、管道、背景。背景我们先不谈,先谈小鸟和管道。
小鸟和管道,可以是拥有不同宽高的矩形,然后根据宽高,把它们画在画布中合适的位置。设置定时器,定时更新小鸟和管道的坐标,然后重新绘制小鸟和管道,以用更新画布来模拟动画效果。
小鸟飞的原理
小鸟的x值不改变,只在垂直方向上更改y值,小鸟往上飞,y值减小,往下降落,y值增大。
不做任何操作的情况下小鸟下落,下落速度越来越快,也就是小鸟坐标y值越来越大。点击屏幕,小鸟上升,上升速度越来越慢,直到上升速度为0,小鸟开始下落。
通过更改管道的x坐标。初始管道坐标在屏幕右侧生成,减少管道的x坐标值,管道模拟往左移动,来模拟小鸟往前飞的效果。
管道空隙该如何做?
管道分为一上一下为一组,在画布中就是上下两个矩形,往左移动时,同时改变两个矩形的x值,使其x值保持一致。定义好中间的空隙的高度H,更改上下两个矩形的高度,来造成管道错落放置的效果。
下边开始写代码
- 导入pygame和定义全局变量
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import random
import pygame
# FPS
FPS = 30
# 屏幕宽高
SCREEN_WIDTH = 288
SCREEN_HEIGHT = 512
# 管道宽高
PIPE_WIDTH = 50
PIPE_HEIGHT = 300
# 管道之间空隙
PIPE_GAP_SIZE = 100
# 小鸟
BIRD_WIDTH = 20
BIRD_HEIGHT = 20
# 地面高度
FLOOR_HEIGHT = 80
# 游戏有效高度
BASE_HEIGHT = SCREEN_HEIGHT - FLOOR_HEIGHT