You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.3 KiB

import pygame
import sys
import random
# 初始化 Pygame
pygame.init()
# 设置窗口尺寸
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("弹球小游戏")
# 设置颜色
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
# 设置小球初始位置和速度
ball_radius = 10
ball_x = random.randint(ball_radius, window_width - ball_radius)
ball_y = ball_radius
ball_speed_x = random.choice([-5, 5])
ball_speed_y = 5
# 设置挡板初始位置和大小
paddle_width = 100
paddle_height = 20
paddle_x = (window_width - paddle_width) // 2
paddle_y = window_height - paddle_height - 10
paddle_speed = 10
# 设置时钟
clock = pygame.time.Clock()
# 游戏状态
game_over = False
# 重置游戏
def reset_game():
global ball_x, ball_y, ball_speed_x, ball_speed_y, paddle_x, game_over
ball_x = random.randint(ball_radius, window_width - ball_radius)
ball_y = ball_radius
ball_speed_x = random.choice([-5, 5])
ball_speed_y = 5
paddle_x = (window_width - paddle_width) // 2
game_over = False
# 主循环
running = True
while running:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT: # 检测窗口关闭事件
running = False
elif event.type == pygame.KEYDOWN: # 检测键盘按下事件
if event.key == pygame.K_RETURN and game_over: # 按下回车键重新开始
reset_game()
# 检测键盘持续按下状态
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]: # 按下左箭头键
paddle_x -= paddle_speed
if keys[pygame.K_RIGHT]: # 按下右箭头键
paddle_x += paddle_speed
# 限制挡板在窗口内移动
paddle_x = max(0, min(paddle_x, window_width - paddle_width))
# 更新小球位置
if not game_over:
ball_x += ball_speed_x
ball_y += ball_speed_y
# 小球碰到左右边界时反弹
if ball_x <= ball_radius or ball_x >= window_width - ball_radius:
ball_speed_x = -ball_speed_x
# 小球碰到上边界时反弹
if ball_y <= ball_radius:
ball_speed_y = -ball_speed_y
# 小球碰到挡板时反弹
if (paddle_x <= ball_x <= paddle_x + paddle_width and
paddle_y <= ball_y + ball_radius <= paddle_y + paddle_height):
ball_speed_y = -ball_speed_y
# 小球碰到下边界时游戏结束
if ball_y >= window_height - ball_radius:
game_over = True
# 清空屏幕
window.fill(WHITE)
# 绘制小球
pygame.draw.circle(window, RED, (ball_x, ball_y), ball_radius)
# 绘制挡板
pygame.draw.rect(window, BLUE, (paddle_x, paddle_y, paddle_width, paddle_height))
# 显示游戏结束信息
if game_over:
font_path = "c:/Windows/Fonts/simhei.ttf"
font = pygame.font.Font(font_path, 74)
text = font.render("游戏结束", True, (0, 0, 0))
text_rect = text.get_rect(center=(window_width // 2, window_height // 2))
window.blit(text, text_rect)
# 更新屏幕
pygame.display.flip()
# 控制帧率
clock.tick(60)
# 退出 Pygame
pygame.quit()
sys.exit()