Muy famoso este juego simple y adictivo que ademas esta rodeado de una historia controversial por la abrupta retirada de los Store por decision del creador, luego de alcanzar ganancias espectaculares. Segun Wikipedia el autor tomo la decisión por lo adictivo que resulto el juego para muchos usuarios, los cuales inlcuso compararon con el Crack.

Si te gusta programar en Python puedes descargar el codigo fuente disponible en Github y revisar cada una de sus interesantes lineas los cuales permiten conocer como con pocas lineas se puede desarrollar un exitoso juego.

#!/usr/bin/env python

import pygame
from pygame.locals import *  # noqa
import sys
import random

class FlappyBird:
    def __init__(self):
        self.screen = pygame.display.set_mode((400, 708))
        self.bird = pygame.Rect(65, 50, 50, 50)
        self.background = pygame.image.load(“assets/background.png”).convert()
        self.birdSprites = [pygame.image.load(“assets/1.png”).convert_alpha(),
                            pygame.image.load(“assets/2.png”).convert_alpha(),
                            pygame.image.load(“assets/dead.png”)]
        self.wallUp = pygame.image.load(“assets/bottom.png”).convert_alpha()
        self.wallDown = pygame.image.load(“assets/top.png”).convert_alpha()
        self.gap = 130
        self.wallx = 400
        self.birdY = 350
        self.jump = 0
        self.jumpSpeed = 10
        self.gravity = 5
        self.dead = False
        self.sprite = 0
        self.counter = 0
        self.offset = random.randint(-110, 110)

    def updateWalls(self):
        self.wallx -= 2
        if self.wallx < -80:
            self.wallx = 400
            self.counter += 1
            self.offset = random.randint(-110, 110)

    def birdUpdate(self):
        if self.jump:
            self.jumpSpeed -= 1
            self.birdY -= self.jumpSpeed
            self.jump -= 1
        else:
            self.birdY += self.gravity
            self.gravity += 0.2
        self.bird[1] = self.birdY
        upRect = pygame.Rect(self.wallx,
                             360 + self.gap – self.offset + 10,
                             self.wallUp.get_width() – 10,
                             self.wallUp.get_height())
        downRect = pygame.Rect(self.wallx,
                               0 – self.gap – self.offset – 10,
                               self.wallDown.get_width() – 10,
                               self.wallDown.get_height())
        if upRect.colliderect(self.bird):
            self.dead = True
        if downRect.colliderect(self.bird):
            self.dead = True
        if not 0 < self.bird[1] < 720:
            self.bird[1] = 50
            self.birdY = 50
            self.dead = False
            self.counter = 0
            self.wallx = 400
            self.offset = random.randint(-110, 110)
            self.gravity = 5

    def run(self):
        clock = pygame.time.Clock()
        pygame.font.init()
        font = pygame.font.SysFont(“Arial”, 50)
        while True:
            clock.tick(60)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()
                if event.type == pygame.KEYDOWN and not self.dead:
                    self.jump = 17
                    self.gravity = 5
                    self.jumpSpeed = 10

            self.screen.fill((255, 255, 255))
            self.screen.blit(self.background, (0, 0))
            self.screen.blit(self.wallUp,
                             (self.wallx, 360 + self.gap – self.offset))
            self.screen.blit(self.wallDown,
                             (self.wallx, 0 – self.gap – self.offset))
            self.screen.blit(font.render(str(self.counter),
                                         -1,
                                         (255, 255, 255)),
                             (200, 50))
            if self.dead:
                self.sprite = 2
            elif self.jump:
                self.sprite = 1
            self.screen.blit(self.birdSprites[self.sprite], (70, self.birdY))
            if not self.dead:
                self.sprite = 0
            self.updateWalls()
            self.birdUpdate()
            pygame.display.update()

if __name__ == “__main__”:
    FlappyBird().run()

Puedes Descargarlo en:  https://github.com/Max00355/FlappyBird/blob/master/flappybird.py

Fuente: Cyberhades