用户:
HenryTheSmart查看:0 回复:3 评论:0 创建时间:2024-08-07T15:06:50
【作品展示】

【作品介绍】
这个游戏很简单,用左右键来控制弹版。注意:此游戏引用了 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.cnimport 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
评论