Flappy tutorial part 3

In this 3rd part of the tutorial about how to make a flappy bird game in python… we will see how to make pipes and how to detect collisions with them.

Part 1

Part 2

The code

Go to the github repository for the assets

import pygame
from glob import glob
import random


size = w, h = 400, 600
screen = pygame.display.set_mode((size), 32, 1)
pygame.display.set_caption("Flappy Py")



class Sprite(pygame.sprite.Sprite):
    def __init__(self, file, x, y):
        super(Sprite, self).__init__()
        self.x = x
        self.y = y
        self.frames = [load(f[:-4]) for f in glob(file + "*.png")]
        self.image = self.frames[0]
        self.rect = pygame.Rect(self.x, self.y, 32, 24)
        self.cnt = 0
        g.add(self)

    def update(self):
        self.cnt += .1
        if self.cnt > len(self.frames) - 1:
            self.cnt = 0
        self.image = self.frames[int(self.cnt)]
        self.collision()

    def collision(self):
        global moveup

        for pipe in pipes:
            if self.rect.colliderect(pipe):
                moveup = 1
                # self.gameover()

    def gameover(self):
        print("Game over")


class Bg(pygame.sprite.Sprite):
    def __init__(self, file, x, y):
        super(Bg, self).__init__()
        self.x = x
        self.y = y
        self.image = load(file)
        self.rect = pygame.Rect(self.x, self.y, 400, 600)
        g.add(self)


class Pipe(pygame.sprite.Sprite):
    def __init__(self, file, x, y):
        super(Pipe, self).__init__()
        self.x = x + 300
        self.y = random.randrange(200, 600, 24)
        self.image = load(file)
        self.rect = pygame.Rect(self.x, self.y, 52, 320)
        g.add(self)
        pipes.add(self)

    def update(self):
        self.rect.left -= 1
        if self.rect.left < -52:
            self.rect.left = 548


class Base(pygame.sprite.Sprite):
    def __init__(self, file, x, y):
        super(Base, self).__init__()
        self.x = x
        self.y = y
        self.image = load(file)
        self.rect = pygame.Rect(self.x, self.y, 400, 41)
        g.add(self)
        pipes.add(self)

    def update(self):
        self.rect.left -= 1
        if self.rect.left < -400:
            self.rect.left = 399


def load(file):
    return pygame.image.load(file + ".png")


def gravity():
    flappy.rect.top += 1


g = pygame.sprite.Group()
pipes = pygame.sprite.Group()
Bg("bg", 0, 0)
Pipe("pipe", 100, 400)
Pipe("pipe", 300, 400)
Pipe("pipe", 500, 400)



Base("base", 400, 560)
Base("base", 0, 560)
# ============= FLAPPY BIRD SPRITE
flappy = Sprite("blue", 50, 300)


def main():
    global moveup

    # jump controlo variables:
    # - after you press
    moveup = 0
    # how high can go
    startcounter = 0
    # How hight flappy jumps
    topjump = 40
    # how speed it jumps
    jumpspeed = 2

    pygame.init()
    pygame.font.init()
    clock = pygame.time.Clock()
    loop = 1
    while loop:

        if moveup:
            flappy.rect.top -= jumpspeed
            startcounter += 1
            print(startcounter)
        if startcounter == topjump:
            startcounter = 0
            moveup = 0

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                loop = 0
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    loop = 0
                if event.key == pygame.K_UP:
                    moveup = 1
                    startcounter = 1

        g.draw(screen)
        g.update()
        if not moveup:
            gravity()
        pygame.display.update()
        clock.tick(120)

    pygame.quit()


main()



Building up footage of the game

Create a new game from another one

In this post you will see how flappy bird can become a space shooter.

Click here.

From Flappy bird to Starflag… with pygame


Subscribe to the newsletter for updates
Tkinter templates
My youtube channel

Twitter: @pythonprogrammi - python_pygame

Videos

Speech recognition game

Pygame's Platform Game

Other Pygame's posts