猫史档案馆


【Python作品分享】Python 作品 打砖块【作品秀】

用户:HenryTheSmartHenryTheSmart查看:0 回复:3 评论:0 创建时间:2024-08-07T15:06:50


【作品展示】

center_image

 

【作品介绍】

这个游戏很简单,用左右键来控制弹版。

注意:此游戏引用了 Pygame 库,只有电脑能玩

 

【作品源代码】

import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 常量
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PADDLE_WIDTH = 100
PADDLE_HEIGHT = 20
BALL_SIZE = 20
BRICK_WIDTH = 60
BRICK_HEIGHT = 30
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)

# 创建窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("打砖块")

# 时钟对象
clock = pygame.time.Clock()

# 游戏对象


class Paddle:
    def __init__(self):
        self.rect = pygame.Rect(SCREEN_WIDTH // 2 - PADDLE_WIDTH // 2,
                                SCREEN_HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT)

    def move(self, dx):
        self.rect.x += dx
        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.right > SCREEN_WIDTH:
            self.rect.right = SCREEN_WIDTH

    def draw(self):
        pygame.draw.rect(screen, GREEN, self.rect)


class Ball:
    def __init__(self):
        self.rect = pygame.Rect(SCREEN_WIDTH // 2 - BALL_SIZE // 2,
                                SCREEN_HEIGHT // 2 - BALL_SIZE // 2, BALL_SIZE, BALL_SIZE)
        self.dx = random.choice([-4, 4])
        self.dy = -4

    def move(self):
        self.rect.x += self.dx
        self.rect.y += self.dy

        # 碰撞检测
        if self.rect.left <= 0 or self.rect.right >= SCREEN_WIDTH:
            self.dx = -self.dx
        if self.rect.top <= 0:
            self.dy = -self.dy

    def draw(self):
        pygame.draw.ellipse(screen, BLUE, self.rect)


class Brick:
    def __init__(self, x, y):
        self.rect = pygame.Rect(x, y, BRICK_WIDTH, BRICK_HEIGHT)

    def draw(self):
        pygame.draw.rect(screen, RED, self.rect)


def main():
    paddle = Paddle()
    ball = Ball()

    # 创建砖块
    bricks = []
    for row in range(5):
        for col in range(10):
            bricks.append(Brick(col * (BRICK_WIDTH + 5) +
                          10, row * (BRICK_HEIGHT + 5) + 10))

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        # 控制挡板
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            paddle.move(-6)
        if keys[pygame.K_RIGHT]:
            paddle.move(6)

        # 移动球
        ball.move()

        # 检测球与挡板碰撞
        if ball.rect.colliderect(paddle.rect):
            ball.dy = -ball.dy

        # 检测球与砖块碰撞
        for brick in bricks[:]:
            if ball.rect.colliderect(brick.rect):
                ball.dy = -ball.dy
                bricks.remove(brick)

        # 检测球是否掉出屏幕
        if ball.rect.bottom >= SCREEN_HEIGHT:
            pygame.quit()
            sys.exit()

        # 清屏
        screen.fill(WHITE)

        # 绘制游戏对象
        paddle.draw()
        ball.draw()
        for brick in bricks:
            brick.draw()

        # 更新屏幕
        pygame.display.flip()

        # 控制帧率
        clock.tick(60)


if __name__ == "__main__":
    main()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
活泼的小电鼠S0fF活泼的小电鼠S0fF

挺有意思

点赞0


评论


活泼的小电鼠S0fF活泼的小电鼠S0fF

你代码里的main函数让我想起了c++里的面(main)函数

点赞0


评论


code猫的code猫的

import pygame
import random
import sys

# 初始化pygame
pygame.init()

# 常量
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PADDLE_WIDTH = 100
PADDLE_HEIGHT = 20
BALL_SIZE = 20
BRICK_WIDTH = 60
BRICK_HEIGHT = 30
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)

# 创建窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("打砖块")

# 时钟对象
clock = pygame.time.Clock()

# 游戏对象


class Pa喵le:
    def __init__(self):
        self.rect = pygame.Rect(SCREEN_WIDTH // 2 - PADDLE_WIDTH // 2,
                                SCREEN_HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT)

    def move(self, dx):
        self.rect.x += dx
        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.right > SCREEN_WIDTH:
            self.rect.right = SCREEN_WIDTH

    def draw(self):
        pygame.draw.rect(screen, GREEN, self.rect)


class Ball:
    def __init__(self):
        self.rect = pygame.Rect(SCREEN_WIDTH // 2 - BALL_SIZE // 2,
                                SCREEN_HEIGHT // 2 - BALL_SIZE // 2, BALL_SIZE, BALL_SIZE)
        self.dx = random.choice([-4, 4])
        self.dy = -4

    def move(self):
        self.rect.x += self.dx
        self.rect.y += self.dy

        # 碰撞检测
        if self.rect.left <= 0 or self.rect.right >= SCREEN_WIDTH:
            self.dx = -self.dx
        if self.rect.top <= 0:
            self.dy = -self.dy

    def draw(self):
        pygame.draw.ellipse(screen, BLUE, self.rect)


class Brick:
    def __init__(self, x, y):
        self.rect = pygame.Rect(x, y, BRICK_WIDTH, BRICK_HEIGHT)

    def draw(self):
        pygame.draw.rect(screen, RED, self.rect)


def main():
    pa喵le = Pa喵le()
    ball = Ball()

    # 创建砖块
    bricks = []
    for row in range(5):
        for col in range(10):
            bricks.append(Brick(col * (BRICK_WIDTH + 5) + 10, row * (BRICK_HEIGHT + 5) + 10))

    # 游戏状态
    score = 0
    lives = 3

    font = pygame.font.Font(None, 36)

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        # 控制挡板
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            pa喵le.move(-6)
        if keys[pygame.K_RIGHT]:
            pa喵le.move(6)

        # 移动球
        ball.move()

        # 检测球与挡板碰撞
        if ball.rect.colliderect(pa喵le.rect):
            ball.dy = -ball.dy

        # 检测球与砖块碰撞
        for brick in bricks[:]:
            if ball.rect.colliderect(brick.rect):
                ball.dy = -ball.dy
                bricks.remove(brick)
                score += 1  # 增加得分

        # 检测球是否掉出屏幕
        if ball.rect.bottom >= SCREEN_HEIGHT:
            lives -= 1  # 失去一条命
            ball = Ball()  # 重置球的位置
            if lives == 0:
                running = False  # 游戏结束

        # 清屏
        screen.fill(WHITE)

        # 绘制游戏对象
        pa喵le.draw()
        ball.draw()
        for brick in bricks:
            brick.draw()

        # 绘制得分和生命值
        score_text = font.render(f"Score: {score}", True, BLACK)
        lives_text = font.render(f"Lives: {lives}", True, BLACK)
        screen.blit(score_text, (10, 10))
        screen.blit(lives_text, (SCREEN_WIDTH - 100, 10))

        # 更新屏幕
        pygame.display.flip()

        # 控制帧率
        clock.tick(60)

    # 游戏结束提示
    screen.fill(WHITE)
    end_text = font.render("游戏结束!得分: " + str(score), True, BLACK)
    screen.blit(end_text, (SCREEN_WIDTH // 2 - end_text.get_width() // 2, SCREEN_HEIGHT // 2))
    pygame.display.flip()
    pygame.time.wait(3000)  # 显示3秒后退出
    pygame.quit()
    sys.exit()


if __name__ == "__main__":
    main()

点赞0


评论