使用 Pygame 在 Python 中开发 Flappy Bird 游戏



在 Flappy Bird 游戏中,玩家通过点击屏幕控制一只鸟,使其在管道之间飞行,而不碰到它们。在这里,我们将使用 pygame 库设计一个 Flappy Bird 游戏。

使用 pygame 设计 Flappy Bird 游戏的步骤

1. 安装 pygame 库

要安装 pygame 库,请使用 PIP 命令。以下是安装它的命令:

pip install pygame

2. 导入库

您需要使用 import 语句导入 pygamerandom 库。以下是导入这些库的代码语句:

import pygame
import random

3. 初始化 Pygame

要初始化 pygame,只需在导入库后调用 pygame.init() 方法。

pygame.init()

4. 设置屏幕

描述屏幕分辨率并通过 pygame.display.set_mode() 方法建立游戏窗口。

5. 定义颜色和属性

您必须设置颜色并为鸟和管道定义属性。

6. 创建绘图函数

创建将在屏幕上为鸟和管道布局的函数。

7. 实现碰撞检测

现在,加入一个函数来确定鸟是否与管道或屏幕边界发生碰撞。

8. 管理管道

开发一个函数,允许进行更改并添加可能需要的新的管道。

9. 运行游戏循环

接收用户的输入,管理游戏状态,识别碰撞并重新绘制界面。

10. 结束游戏

在检测到与 `pygame.quit()` 的帮助下检测到碰撞时退出游戏窗口。

使用 Pygame 开发 Flappy Bird 游戏的 Python 代码

import pygame
import random

# Initialize Pygame
pygame.init()

# Screen dimensions
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Flappy Bird")

# Colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)

# Bird properties
BIRD_WIDTH = 40
BIRD_HEIGHT = 30
bird_x = 50
bird_y = SCREEN_HEIGHT // 2
bird_velocity = 0
gravity = 0.5  # Gravity
flap_strength = -7  # Moderate flap strength

# Pipe properties
PIPE_WIDTH = 70
PIPE_HEIGHT = 500
PIPE_GAP = 200  # Pipe gap
pipe_velocity = -2  # Pipe velocity
pipes = []

# Game variables
score = 0
clock = pygame.time.Clock()
flap_cooldown = 0  # Time before the bird can flap again

def draw_bird():
   pygame.draw.rect(screen, BLACK, (bird_x, bird_y, BIRD_WIDTH, BIRD_HEIGHT))

def draw_pipes():
   for pipe in pipes:
      pygame.draw.rect(screen, GREEN, pipe['top'])
      pygame.draw.rect(screen, GREEN, pipe['bottom'])

def check_collision():
   global score
   bird_rect = pygame.Rect(bird_x, bird_y, BIRD_WIDTH, BIRD_HEIGHT)
   for pipe in pipes:
      if bird_rect.colliderect(pipe['top']) or bird_rect.colliderect(pipe['bottom']):
         return True
   if bird_y > SCREEN_HEIGHT or bird_y < 0:
      return True
   return False

def update_pipes():
   global score
   for pipe in pipes:
      pipe['top'].x += pipe_velocity
      pipe['bottom'].x += pipe_velocity
      if pipe['top'].x + PIPE_WIDTH < 0:
         pipes.remove(pipe)
         score += 1
   if len(pipes) == 0 or pipes[-1]['top'].x < SCREEN_WIDTH - 300:
      pipe_height = random.randint(100, SCREEN_HEIGHT - PIPE_GAP - 100)
      pipes.append({
         'top': pygame.Rect(SCREEN_WIDTH, 0, PIPE_WIDTH, pipe_height),
         'bottom': pygame.Rect(SCREEN_WIDTH, pipe_height + PIPE_GAP, PIPE_WIDTH, SCREEN_HEIGHT - pipe_height - PIPE_GAP)
      })

# Game loop
running = True
while running:
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         running = False
      if event.type == pygame.KEYDOWN:
         if event.key == pygame.K_SPACE and flap_cooldown <= 0:
            bird_velocity = flap_strength
            flap_cooldown = 10  # Set cooldown to prevent rapid flapping
      if event.type == pygame.MOUSEBUTTONDOWN and flap_cooldown <= 0:
         bird_velocity = flap_strength
         flap_cooldown = 10  # Set cooldown to prevent rapid flapping
    
   # Update bird position
   bird_velocity += gravity
   bird_y += bird_velocity

   # Update pipes
   update_pipes()

   # Check for collision
   if check_collision():
      running = False

   # Manage flap cooldown
   if flap_cooldown > 0:
      flap_cooldown -= 1

   # Draw everything
   screen.fill(WHITE)
   draw_bird()
   draw_pipes()

   # Display the score
   font = pygame.font.SysFont(None, 36)
   score_text = font.render(f'Score: {score}', True, BLACK)
   screen.blit(score_text, (10, 10))

   pygame.display.flip()
   clock.tick(30)

pygame.quit()

输出

Flappy Bird Flappy Bird

点击鼠标右键,您将获得分数并正确地玩游戏。

Flappy Bird 游戏总结

游戏运行时,会弹出一个标题栏为“Flappy Bird”的窗口,并显示小鸟和管道。小鸟会受到重力的影响,玩家需要使用空格键或鼠标来使小鸟拍打翅膀。管道从屏幕右侧出现并向左移动,玩家需要控制小鸟避免与管道接触。分数位于像素游戏的左上角,随着小鸟穿过管道而增加。

结论

这个使用pygame实现的Flappy Bird游戏是一个简单但非常实用的例子,展示了游戏开发中的一些概念。如果开发者分析并将其应用到自己的游戏中,可以学习到的技能包括精灵移动、碰撞检测和游戏状态管理。还可以加入诸如音效、不同难度级别和改进的图形等功能,使游戏更有趣。

python_projects_from_basic_to_advanced.htm
广告