python编写的一个打砖块小游戏

游戏介绍

打砖块是一款经典的街机游戏,玩家控制底部的挡板,使球反弹以击碎上方的砖块。当球击中砖块时,砖块消失,球反弹;若球碰到挡板,则改变方向继续运动;若球掉出屏幕底部,玩家失去一次机会。

游戏代码

以下是使用Python和Pygame库实现的打砖块游戏代码:

python 复制代码
import pygame
import sys
import random

# 初始化pygame
pygame.init()

# 屏幕尺寸
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("打砖块游戏")

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
YELLOW = (255, 255, 0)

# 挡板属性
paddle_width = 100
paddle_height = 20
paddle_x = (WIDTH - paddle_width) // 2
paddle_y = HEIGHT - 30
paddle_speed = 10

# 球属性
ball_radius = 10
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_speed_x = 5 * random.choice([-1, 1])
ball_speed_y = -5

# 砖块属性
brick_rows = 5
brick_cols = 10
brick_width = WIDTH // brick_cols
brick_height = 30
brick_padding = 2
bricks = []

# 创建砖块
for row in range(brick_rows):
    brick_row = []
    for col in range(brick_cols):
        brick_x = col * (brick_width + brick_padding)
        brick_y = row * (brick_height + brick_padding) + 50
        brick_row.append(pygame.Rect(brick_x, brick_y, brick_width, brick_height))
    bricks.append(brick_row)

# 分数
score = 0
font = pygame.font.Font(None, 36)

# 游戏主循环
clock = pygame.time.Clock()
running = True

while running:
    # 事件处理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 获取按键
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and paddle_x > 0:
        paddle_x -= paddle_speed
    if keys[pygame.K_RIGHT] and paddle_x < WIDTH - paddle_width:
        paddle_x += paddle_speed

    # 更新球的位置
    ball_x += ball_speed_x
    ball_y += ball_speed_y

    # 碰撞检测 - 墙壁
    if ball_x <= ball_radius or ball_x >= WIDTH - ball_radius:
        ball_speed_x = -ball_speed_x
    if ball_y <= ball_radius:
        ball_speed_y = -ball_speed_y

    # 碰撞检测 - 挡板
    paddle_rect = pygame.Rect(paddle_x, paddle_y, paddle_width, paddle_height)
    if paddle_rect.collidepoint(ball_x, ball_y + ball_radius) and ball_speed_y > 0:
        ball_speed_y = -ball_speed_y

    # 碰撞检测 - 砖块
    for row in bricks:
        for brick in row:
            if brick.collidepoint(ball_x, ball_y - ball_radius) and ball_speed_y < 0:
                ball_speed_y = -ball_speed_y
                brick.width = 0
                brick.height = 0
                score += 10

    # 绘制
    screen.fill(BLACK)
    pygame.draw.rect(screen, BLUE, (paddle_x, paddle_y, paddle_width, paddle_height))
    pygame.draw.circle(screen, RED, (ball_x, ball_y), ball_radius)

    # 绘制砖块
    for row in bricks:
        for brick in row:
            if brick.width > 0 and brick.height > 0:
                pygame.draw.rect(screen, GREEN, brick)

    # 绘制分数
    score_text = font.render(f"Score: {score}", True, WHITE)
    screen.blit(score_text, (10, 10))

    # 更新显示
    pygame.display.flip()

    # 控制帧率
    clock.tick(60)

    # 检测游戏结束条件
    if ball_y >= HEIGHT:
        game_over_text = font.render("Game Over", True, WHITE)
        screen.blit(game_over_text, (WIDTH // 2 - 80, HEIGHT // 2 - 18))
        pygame.display.flip()
        pygame.time.wait(2000)
        running = False

# 退出游戏
pygame.quit()
sys.exit()

游戏实现细节

初始化与屏幕设置

游戏使用Pygame库进行图形渲染和事件处理。首先初始化Pygame,设置屏幕尺寸为800x600像素,并定义了一些颜色常量以便后续使用。

挡板、球和砖块的属性设置

挡板 :宽度为100像素,高度为20像素,初始位置在屏幕底部中央,可左右移动。
:半径为10像素,初始位置在屏幕中央,具有随机的水平速度和向下的垂直速度。
砖块:共5行10列,每块砖的宽度为屏幕宽度除以列数,高度为30像素,初始时排列在屏幕上方。

游戏主循环

在游戏主循环中,首先处理事件,如关闭窗口和按键输入。根据按键调整挡板的位置,使其在屏幕内左右移动。

然后更新球的位置,根据当前速度改变其坐标。接着进行碰撞检测,包括与墙壁、挡板和砖块的碰撞。

墙壁碰撞 :当球碰到左右墙壁或顶部时,改变其水平或垂直速度方向。
挡板碰撞 :检测球是否碰到挡板,若碰到则改变垂直速度方向,使球向上弹起。
砖块碰撞:遍历所有砖块,检测球是否碰到砖块,若碰到则改变垂直速度方向,并将该砖块的尺寸设为0以表示消除,同时增加分数。

最后进行绘制操作,包括绘制挡板、球、砖块和分数显示。更新屏幕显示,并控制帧率为60 FPS。

游戏结束条件

当球的y坐标超过屏幕高度时,表示球掉出屏幕底部,游戏结束。显示"Game Over"文本,等待2秒后退出游戏。

游戏扩展与改进建议

目前的打砖块游戏是一个基础版本,可以在此基础上进行扩展和改进:

  1. 增加难度级别 :随着游戏进行,可以逐渐增加球的速度或减少挡板的宽度,提高游戏难度。

  2. 添加特殊砖块 :设计具有特殊效果的砖块,如增加球的数量、改变球的大小或速度等。

  3. 完善计分系统 :根据不同类型的砖块或击打方式给予不同的分数奖励。

  4. 添加音效和动画 :在碰撞、得分和游戏结束时添加音效,增强游戏体验。

  5. 实现关卡系统:设计多个关卡,每个关卡具有不同的砖块布局和难度设置。

通过以上扩展和改进,可以使打砖块游戏更加丰富和有趣,吸引更多的玩家参与。

相关推荐
数据智能老司机4 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机5 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i5 小时前
drf初步梳理
python·django
每日AI新事件5 小时前
python的异步函数
python
这里有鱼汤6 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook15 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室16 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三17 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试