欢迎踏上游戏开发的精彩旅程!本文将向您展示如何通过Python的Pygame库,迅速构建出您的第一个专属小游戏。无论你是编程新手还是有经验的开发者,这里都有适合你的知识与技巧。
首先确保你已经安装了Python(推荐3.8及以上版本),可以从Python官网下载,安装时记得勾选“Add Python to PATH”。
打开终端/命令提示符,执行以下命令安装Pygame:
pip install pygame验证安装是否成功:运行python -m pygame.examples.aliens,如果能弹出外星人小游戏窗口,说明安装完成。
我们先做一个小球反弹游戏(鼠标控制挡板接球,小球碰到边界反弹,接不到球游戏结束),这个游戏能覆盖Pygame的核心知识点:显示窗口、事件处理、图形绘制、碰撞检测、游戏循环。
import pygame
import sys
import random
# 初始化Pygame
pygame.init()
# 游戏常量定义
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
FPS = 60 # 帧率
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
# 初始化游戏窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("我的第一个Pygame小游戏 - 小球反弹")
# 时钟(控制帧率)
clock = pygame.time.Clock()
# 游戏元素初始化
# 挡板
paddle_width = 100
paddle_height = 15
paddle_x = (SCREEN_WIDTH - paddle_width) // 2
paddle_y = SCREEN_HEIGHT - paddle_height - 10
paddle_speed = 8
# 小球
ball_radius = 10
ball_x = random.randint(ball_radius, SCREEN_WIDTH - ball_radius)
ball_y = random.randint(ball_radius, SCREEN_HEIGHT // 2)
ball_speed_x = random.choice([-4, 4]) # 水平速度(随机左右)
ball_speed_y = 4 # 垂直速度
# 游戏状态
game_over = False
score = 0
# 字体(显示分数和游戏结束提示)
font = pygame.font.Font(None, 40)
# 游戏主循环
while True:
# 1. 事件处理(关闭窗口、鼠标控制)
for event in pygame.event.get():
# 关闭窗口事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 游戏结束后点击鼠标重新开始
if event.type == pygame.MOUSEBUTTONDOWN and game_over:
# 重置游戏元素
ball_x = random.randint(ball_radius, SCREEN_WIDTH - ball_radius)
ball_y = random.randint(ball_radius, SCREEN_HEIGHT // 2)
ball_speed_x = random.choice([-4, 4])
ball_speed_y = 4
paddle_x = (SCREEN_WIDTH - paddle_width) // 2
score = 0
game_over = False
# 2. 游戏逻辑更新(非游戏结束状态)
if not game_over:
# 鼠标控制挡板移动(挡板跟随鼠标x坐标)
mouse_x, _ = pygame.mouse.get_pos()
paddle_x = mouse_x - paddle_width // 2
# 限制挡板不超出窗口
paddle_x = max(0, min(paddle_x, SCREEN_WIDTH - paddle_width))
# 小球移动
ball_x += ball_speed_x
ball_y += ball_speed_y
# 小球碰撞边界处理
# 左右边界反弹
if ball_x - ball_radius <= 0 or ball_x + ball_radius >= SCREEN_WIDTH:
ball_speed_x = -ball_speed_x
# 上边界反弹
if ball_y - ball_radius <= 0:
ball_speed_y = -ball_speed_y
# 下边界(没接到球,游戏结束)
if ball_y + ball_radius >= SCREEN_HEIGHT:
game_over = True
# 小球碰撞挡板处理
if (paddle_y <= ball_y + ball_radius <= paddle_y + paddle_height and
paddle_x <= ball_x <= paddle_x + paddle_width):
ball_speed_y = -ball_speed_y
score += 1 # 接球得分
# 3. 绘制游戏画面
# 填充背景色
screen.fill(BLACK)
if not game_over:
# 绘制挡板
pygame.draw.rect(screen, WHITE, (paddle_x, paddle_y, paddle_width, paddle_height))
# 绘制小球
pygame.draw.circle(screen, RED, (ball_x, ball_y), ball_radius)
# 绘制分数
score_text = font.render(f"分数: {score}", True, BLUE)
screen.blit(score_text, (10, 10))
else:
# 游戏结束提示
game_over_text = font.render(f"游戏结束!分数: {score} 点击鼠标重新开始", True, RED)
text_rect = game_over_text.get_rect(center=(SCREEN_WIDTH//2, SCREEN_HEIGHT//2))
screen.blit(game_over_text, text_rect)
# 4. 更新显示
pygame.display.flip()
# 控制帧率
clock.tick(FPS)pygame.init():初始化Pygame所有模块,是使用Pygame的第一步。pygame.display.flip()更新整个窗口。clock.tick(FPS)确保游戏每秒刷新60次,避免不同设备运行速度不一致。增加难度:随着分数增加,小球速度逐渐变快,提升游戏挑战性:
# 在小球碰撞挡板后添加
ball_speed_y = -ball_speed_y
# 每次接球后速度小幅增加(不超过上限)
if abs(ball_speed_y) < 8:
ball_speed_y *= 1.05
if abs(ball_speed_x) < 8:
ball_speed_x *= 1.05
score += 1添加音效:让碰撞、游戏结束有声音反馈,增强沉浸感:
# 初始化后加载音效(需提前准备音效文件,如bounce.wav、game_over.wav)
bounce_sound = pygame.mixer.Sound("bounce.wav")
game_over_sound = pygame.mixer.Sound("game_over.wav")
# 小球碰撞挡板时播放音效
if (paddle_y <= ball_y + ball_radius <= paddle_y + paddle_height and
paddle_x <= ball_x <= paddle_x + paddle_width):
ball_speed_y = -ball_speed_y
bounce_sound.play() # 播放反弹音效
score += 1
# 游戏结束时播放音效
if ball_y + ball_radius >= SCREEN_HEIGHT:
game_over_sound.play() # 播放游戏结束音效
game_over = True添加背景图:替换纯色背景为自定义图片(需准备背景图,如background.png):
# 初始化后加载背景图
background = pygame.image.load("background.png").convert()
# 缩放背景图适配窗口
background = pygame.transform.scale(background, (SCREEN_WIDTH, SCREEN_HEIGHT))
# 绘制画面时替换背景填充
# screen.fill(BLACK) # 注释掉这行
screen.blit(background, (0, 0)) # 绘制背景图优化视觉效果:给挡板和小球添加边框,让画面更精致:
# 绘制挡板(加白色填充+黑色边框)
pygame.draw.rect(screen, WHITE, (paddle_x, paddle_y, paddle_width, paddle_height))
pygame.draw.rect(screen, BLACK, (paddle_x, paddle_y, paddle_width, paddle_height), 2)
# 绘制小球(加红色填充+黑色边框)
pygame.draw.circle(screen, RED, (ball_x, ball_y), ball_radius)
pygame.draw.circle(screen, BLACK, (ball_x, ball_y), ball_radius, 2)运行这段代码,你就能得到一个可交互的小游戏,尝试修改代码中的参数(如小球速度、挡板尺寸、颜色等),感受游戏开发的乐趣吧!