对于想要踏入游戏开发领域的新手来说,Pygame绝对是友好的入门选择。它基于Python语言,轻量且功能全面,能快速实现2D游戏的核心玩法。今天我们就通过一个完整的源码示例,一步步搭建一款简单的”方块避障”小游戏,带你熟悉Pygame的基础应用。
📦 准备工作:安装Pygame
在开始编码前,确保你的Python环境已经安装了Pygame库。打开终端输入以下命令即可完成安装:
pip install pygame🧩 核心源码解析:”方块避障”游戏实现
这款小游戏的规则很简单:玩家控制一个蓝色方块左右移动,躲避从上方落下的红色障碍物,坚持的时间越久得分越高。下面是完整的源码,我们会逐部分拆解讲解。
import pygame
import random
import sys
# 初始化Pygame
pygame.init()
# 游戏窗口设置
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("方块避障小游戏")
# 颜色定义
BLUE = (0, 0, 255)
RED = (255, 0, 0)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# 玩家方块属性
player_size = 50
player_x = SCREEN_WIDTH // 2 - player_size // 2
player_y = SCREEN_HEIGHT - player_size - 20
player_speed = 7
# 障碍物属性
obstacle_size = 50
obstacle_x = random.randint(0, SCREEN_WIDTH - obstacle_size)
obstacle_y = -obstacle_size
obstacle_speed = 5
obstacle_list = []
# 游戏参数
score = 0
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)
def draw_player(x, y):
"""绘制玩家方块"""
pygame.draw.rect(screen, BLUE, (x, y, player_size, player_size))
def draw_obstacle(obstacles):
"""绘制障碍物"""
for obstacle in obstacles:
pygame.draw.rect(screen, RED, (obstacle[0], obstacle[1], obstacle_size, obstacle_size))
def update_obstacles(obstacles):
"""更新障碍物位置"""
global score
for i, obstacle in enumerate(obstacles):
obstacles[i][1] += obstacle_speed
# 障碍物超出屏幕则移除并加分
if obstacle[1] > SCREEN_HEIGHT:
obstacles.pop(i)
score += 1
def check_collision(player_x, player_y, obstacles):
"""碰撞检测"""
player_rect = pygame.Rect(player_x, player_y, player_size, player_size)
for obstacle in obstacles:
obstacle_rect = pygame.Rect(obstacle[0], obstacle[1], obstacle_size, obstacle_size)
if player_rect.colliderect(obstacle_rect):
return True
return False
# 游戏主循环
running = True
while running:
# 控制游戏帧率
clock.tick(60)
screen.fill(WHITE)
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 玩家移动控制
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= player_speed
if keys[pygame.K_RIGHT] and player_x < SCREEN_WIDTH - player_size:
player_x += player_speed
# 生成障碍物
if random.randint(1, 30) == 1:
obstacle_x = random.randint(0, SCREEN_WIDTH - obstacle_size)
obstacle_list.append([obstacle_x, -obstacle_size])
# 更新游戏元素
update_obstacles(obstacle_list)
collision = check_collision(player_x, player_y, obstacle_list)
# 碰撞处理
if collision:
game_over_text = font.render("游戏结束!得分: " + str(score), True, BLACK)
screen.blit(game_over_text, (SCREEN_WIDTH//2 - 150, SCREEN_HEIGHT//2))
pygame.display.update()
pygame.time.wait(2000)
running = False
# 绘制游戏元素
draw_player(player_x, player_y)
draw_obstacle(obstacle_list)
# 显示得分
score_text = font.render("得分: " + str(score), True, BLACK)
screen.blit(score_text, (10, 10))
# 更新屏幕显示
pygame.display.update()
# 退出游戏
pygame.quit()
sys.exit()
🛠️ 关键模块拆解
✨ 初始化与基础设置
代码开头通过pygame.init()初始化库,接着定义游戏窗口的尺寸、标题,以及游戏中需要用到的颜色常量。这是所有Pygame项目的基础流程。
🎭 玩家与障碍物系统
- 玩家控制:通过监听键盘左右键事件,改变玩家方块的X轴坐标,实现移动功能,同时限制移动范围防止超出屏幕。
- 障碍物生成:使用随机数控制障碍物的生成频率和初始位置,通过列表存储多个障碍物,实现多障碍物同时下落的效果。
🎯 碰撞检测与游戏逻辑
- 碰撞判断:利用Pygame内置的
Rect对象和colliderect()方法,快速检测玩家方块与障碍物是否发生碰撞。 - 得分机制:当障碍物成功落到屏幕外时,玩家得分增加,简单直接地激励玩家持续游戏。
🔄 游戏主循环
这是游戏的核心运行逻辑,负责处理事件、更新元素位置、碰撞检测、画面绘制等工作,通过clock.tick(60)将游戏帧率控制在60帧,保证游戏运行流畅。
🚀 扩展与优化方向
学会这个基础示例后,你可以尝试以下方向优化游戏:
- 增加难度梯度:随着得分提高,加快障碍物下落速度或提升生成频率
- 添加音效系统:为移动、碰撞、得分等事件搭配音效,增强沉浸感
- 丰富视觉效果:给方块添加纹理、特效,或者更换背景图片
- 设置不同模式:比如限时模式、道具模式,增加游戏可玩性