Untitled

 avatar
unknown
plain_text
5 months ago
3.3 kB
3
Indexable
import pygame
import random
import sys

# Initialize Pygame
pygame.init()

# Set up the display
WIDTH = 400
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Flappy Bird")

# Set up colors
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)

# Set up the game clock
clock = pygame.time.Clock()

# Bird class
class Bird:
    def __init__(self):
        self.x = 50
        self.y = HEIGHT // 2
        self.width = 40
        self.height = 40
        self.velocity = 0
        self.gravity = 0.5
        self.lift = -10

    def update(self):
        self.velocity += self.gravity
        self.y += self.velocity

        if self.y > HEIGHT - self.height:
            self.y = HEIGHT - self.height
        if self.y < 0:
            self.y = 0

    def jump(self):
        self.velocity = self.lift

    def draw(self, screen):
        pygame.draw.rect(screen, BLUE, (self.x, self.y, self.width, self.height))

# Pipe class
class Pipe:
    def __init__(self):
        self.width = 60
        self.gap = 150
        self.x = WIDTH
        self.height = random.randint(100, 400)
        self.passed = False

    def update(self):
        self.x -= 3

    def draw(self, screen):
        pygame.draw.rect(screen, GREEN, (self.x, 0, self.width, self.height))
        pygame.draw.rect(screen, GREEN, (self.x, self.height + self.gap, self.width, HEIGHT - (self.height + self.gap)))

    def off_screen(self):
        return self.x < -self.width

    def collide(self, bird):
        if bird.x + bird.width > self.x and bird.x < self.x + self.width:
            if bird.y < self.height or bird.y + bird.height > self.height + self.gap:
                return True
        return False

# Main game loop
def main():
    bird = Bird()
    pipes = [Pipe()]
    score = 0
    running = True

    while running:
        screen.fill(WHITE)

        # Handle events
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    bird.jump()

        # Update bird
        bird.update()

        # Update pipes
        for pipe in pipes:
            pipe.update()

        # Remove pipes that are off screen
        if pipes[0].off_screen():
            pipes.pop(0)

        # Add a new pipe
        if pipes[-1].x < WIDTH - 200:
            pipes.append(Pipe())

        # Check for collisions
        for pipe in pipes:
            if pipe.collide(bird):
                running = False

        # Increase score
        for pipe in pipes:
            if not pipe.passed and pipe.x + pipe.width < bird.x:
                pipe.passed = True
                score += 1

        # Draw everything
        bird.draw(screen)
        for pipe in pipes:
            pipe.draw(screen)

        # Draw score
        font = pygame.font.SysFont("Arial", 30)
        score_text = font.render(f"Score: {score}", True, BLACK)
        screen.blit(score_text, (10, 10))

        # Update the display
        pygame.display.update()

        # Set the frame rate
        clock.tick(60)

    # End game
    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()
Editor is loading...
Leave a Comment