Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
282 changes: 150 additions & 132 deletions flappy.py
Original file line number Diff line number Diff line change
@@ -1,53 +1,49 @@
import pygame, random, time
import pygame
import random
import time
import math
from pygame.locals import *

#VARIABLES
SCREEN_WIDHT = 400
# VARIABLES
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 600
SPEED = 20
GRAVITY = 2.5
GAME_SPEED = 15

GROUND_WIDHT = 2 * SCREEN_WIDHT
GROUND_HEIGHT= 100
GROUND_WIDTH = 2 * SCREEN_WIDTH
GROUND_HEIGHT = 100

PIPE_WIDHT = 80
PIPE_WIDTH = 80
PIPE_HEIGHT = 500

PIPE_GAP = 150

wing = 'assets/audio/wing.wav'
hit = 'assets/audio/hit.wav'

pygame.mixer.init()

pygame.init()

class Bird(pygame.sprite.Sprite):

def __init__(self):
pygame.sprite.Sprite.__init__(self)

self.images = [pygame.image.load('assets/sprites/bluebird-upflap.png').convert_alpha(),
pygame.image.load('assets/sprites/bluebird-midflap.png').convert_alpha(),
pygame.image.load('assets/sprites/bluebird-downflap.png').convert_alpha()]

self.images = [
pygame.image.load('assets/sprites/bluebird-upflap.png').convert_alpha(),
pygame.image.load('assets/sprites/bluebird-midflap.png').convert_alpha(),
pygame.image.load('assets/sprites/bluebird-downflap.png').convert_alpha()
]
self.speed = SPEED

self.current_image = 0
self.image = pygame.image.load('assets/sprites/bluebird-upflap.png').convert_alpha()
self.image = self.images[self.current_image]
self.mask = pygame.mask.from_surface(self.image)

self.rect = self.image.get_rect()
self.rect[0] = SCREEN_WIDHT / 6
self.rect[0] = SCREEN_WIDTH / 6
self.rect[1] = SCREEN_HEIGHT / 2


def update(self):
self.current_image = (self.current_image + 1) % 3
self.image = self.images[self.current_image]
self.speed += GRAVITY

#UPDATE HEIGHT
self.rect[1] += self.speed


def bump(self):
self.speed = -SPEED
Expand All @@ -56,18 +52,11 @@ def begin(self):
self.current_image = (self.current_image + 1) % 3
self.image = self.images[self.current_image]




class Pipe(pygame.sprite.Sprite):

def __init__(self, inverted, xpos, ysize):
pygame.sprite.Sprite.__init__(self)

self. image = pygame.image.load('assets/sprites/pipe-green.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (PIPE_WIDHT, PIPE_HEIGHT))


self.image = pygame.image.load('assets/sprites/pipe-green.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (PIPE_WIDTH, PIPE_HEIGHT))
self.rect = self.image.get_rect()
self.rect[0] = xpos

Expand All @@ -77,27 +66,21 @@ def __init__(self, inverted, xpos, ysize):
else:
self.rect[1] = SCREEN_HEIGHT - ysize


self.mask = pygame.mask.from_surface(self.image)


def update(self):
self.rect[0] -= GAME_SPEED



class Ground(pygame.sprite.Sprite):

def __init__(self, xpos):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('assets/sprites/base.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (GROUND_WIDHT, GROUND_HEIGHT))

self.image = pygame.transform.scale(self.image, (GROUND_WIDTH, GROUND_HEIGHT))
self.mask = pygame.mask.from_surface(self.image)

self.rect = self.image.get_rect()
self.rect[0] = xpos
self.rect[1] = SCREEN_HEIGHT - GROUND_HEIGHT

def update(self):
self.rect[0] -= GAME_SPEED

Expand All @@ -110,113 +93,148 @@ def get_random_pipes(xpos):
pipe_inverted = Pipe(True, xpos, SCREEN_HEIGHT - size - PIPE_GAP)
return pipe, pipe_inverted

def display_score(screen, score):
font = pygame.font.Font(None, 36)
text = font.render(f"Score: {score}", True, (255, 255, 255))
screen.blit(text, (10, 10))

pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDHT, SCREEN_HEIGHT))
pygame.display.set_caption('Flappy Bird')

BACKGROUND = pygame.image.load('assets/sprites/background-day.png')
BACKGROUND = pygame.transform.scale(BACKGROUND, (SCREEN_WIDHT, SCREEN_HEIGHT))
BEGIN_IMAGE = pygame.image.load('assets/sprites/message.png').convert_alpha()

bird_group = pygame.sprite.Group()
bird = Bird()
bird_group.add(bird)

ground_group = pygame.sprite.Group()

for i in range (2):
ground = Ground(GROUND_WIDHT * i)
ground_group.add(ground)

pipe_group = pygame.sprite.Group()
for i in range (2):
pipes = get_random_pipes(SCREEN_WIDHT * i + 800)
pipe_group.add(pipes[0])
pipe_group.add(pipes[1])



clock = pygame.time.Clock()

begin = True

while begin:

clock.tick(15)

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == KEYDOWN:
if event.key == K_SPACE or event.key == K_UP:
bird.bump()
pygame.mixer.music.load(wing)
pygame.mixer.music.play()
begin = False

screen.blit(BACKGROUND, (0, 0))
screen.blit(BEGIN_IMAGE, (120, 150))

if is_off_screen(ground_group.sprites()[0]):
ground_group.remove(ground_group.sprites()[0])

new_ground = Ground(GROUND_WIDHT - 20)
ground_group.add(new_ground)

bird.begin()
ground_group.update()

bird_group.draw(screen)
ground_group.draw(screen)
def game_over_screen(screen, score):
font = pygame.font.Font(None, 40)
text = font.render(f"Game Over! Score: {score}", True, (255, 0, 0))
restart_text = font.render("Press SPACE to Restart", True, (255, 255, 255))


text_rect = text.get_rect(center=(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 3))
restart_text_rect = restart_text.get_rect(center=(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2))

screen.blit(text, text_rect)
screen.blit(restart_text, restart_text_rect)

pygame.display.update()

waiting = True
while waiting:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
exit()
if event.type == KEYDOWN:
if event.key == K_SPACE:
waiting = False



def main_game_loop(SPEED, GAME_SPEED):
bird_group = pygame.sprite.Group()
bird = Bird()
bird_group.add(bird)

ground_group = pygame.sprite.Group()
for i in range(2):
ground = Ground(GROUND_WIDTH * i)
ground_group.add(ground)

pipe_group = pygame.sprite.Group()
for i in range(2):
pipes = get_random_pipes(SCREEN_WIDTH * i + 800)
pipe_group.add(pipes[0])
pipe_group.add(pipes[1])

while True:
clock = pygame.time.Clock()
score = 0
begin = True

clock.tick(15)
while begin:
clock.tick(15)

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == KEYDOWN:
if event.key == K_SPACE or event.key == K_UP:
bird.bump()
pygame.mixer.music.load(wing)
pygame.mixer.music.play()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
exit()
if event.type == KEYDOWN:
if event.key == K_SPACE or event.key == K_UP:
bird.bump()
begin = False


screen.blit(BACKGROUND, (0, 0))
screen.blit(BACKGROUND, (0, 0))
screen.blit(BEGIN_IMAGE, (120, 150))

if is_off_screen(ground_group.sprites()[0]):
ground_group.remove(ground_group.sprites()[0])
if is_off_screen(ground_group.sprites()[0]):
ground_group.remove(ground_group.sprites()[0])
new_ground = Ground(GROUND_WIDTH - 20)
ground_group.add(new_ground)

new_ground = Ground(GROUND_WIDHT - 20)
ground_group.add(new_ground)
bird.begin()
ground_group.update()

if is_off_screen(pipe_group.sprites()[0]):
pipe_group.remove(pipe_group.sprites()[0])
pipe_group.remove(pipe_group.sprites()[0])
bird_group.draw(screen)
ground_group.draw(screen)

pipes = get_random_pipes(SCREEN_WIDHT * 2)
pygame.display.update()

pipe_group.add(pipes[0])
pipe_group.add(pipes[1])
while True:
clock.tick(15)

for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
exit()
if event.type == KEYDOWN:
if event.key == K_SPACE or event.key == K_UP:
bird.bump()
elif event.key == K_f:
bird.rect[0] += 150
elif event.key == K_d:
bird.rect[0] -= 150


screen.blit(BACKGROUND, (0, 0))

if is_off_screen(ground_group.sprites()[0]):
ground_group.remove(ground_group.sprites()[0])
new_ground = Ground(GROUND_WIDTH - 20)
ground_group.add(new_ground)

if is_off_screen(pipe_group.sprites()[0]):
pipe_group.remove(pipe_group.sprites()[0])
pipe_group.remove(pipe_group.sprites()[0])
pipes = get_random_pipes(SCREEN_WIDTH * 2)
pipe_group.add(pipes[0])
pipe_group.add(pipes[1])
score += 1

bird_group.update()
ground_group.update()
pipe_group.update()

bird_group.draw(screen)
pipe_group.draw(screen)
ground_group.draw(screen)

display_score(screen, score)

if(score == 2):
SPEED += 20
GAME_SPEED += 20

bird_group.update()
ground_group.update()
pipe_group.update()
pygame.display.update()

bird_group.draw(screen)
pipe_group.draw(screen)
ground_group.draw(screen)
#if (pygame.sprite.groupcollide(bird_group, ground_group, False, False, pygame.sprite.collide_mask) or
# pygame.sprite.groupcollide(bird_group, pipe_group, False, False, pygame.sprite.collide_mask)):
# time.sleep(1)
# game_over_screen(screen, score)
#return

pygame.display.update()
# Initialize screen
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Flappy Bird')

if (pygame.sprite.groupcollide(bird_group, ground_group, False, False, pygame.sprite.collide_mask) or
pygame.sprite.groupcollide(bird_group, pipe_group, False, False, pygame.sprite.collide_mask)):
pygame.mixer.music.load(hit)
pygame.mixer.music.play()
time.sleep(1)
break
# Load images
BACKGROUND = pygame.image.load('assets/sprites/background-day.png')
BACKGROUND = pygame.transform.scale(BACKGROUND, (SCREEN_WIDTH, SCREEN_HEIGHT))
BEGIN_IMAGE = pygame.image.load('assets/sprites/message.png').convert_alpha()

# Main entry point
while True:
main_game_loop(SPEED, GAME_SPEED)