文章目录
前言
今天我将带领大家使用Python的Pygame库在Lightly在线编译器中实现一个经典的贪吃蛇游戏。Lightly是一个非常方便的在线开发环境,无需安装任何软件,直接在浏览器中就能编写和运行Python代码。
https://www.lightlycode.com/python

一、环境准备
1. 安装Pygame库
在Lightly中,我们首先需要安装Pygame库。虽然Lightly已经预装了许多常用库,但为了确保最新版本,我们可以在终端中运行:
bash
pip install pygame
Lightly的终端位于界面底部,点击"+"号可以打开新终端。

二、贪吃蛇游戏实现
下面我将完整展示贪吃蛇游戏的代码,并解释关键部分:
python
import pygame
import random
# 初始化
pygame.init()
width, height = 400, 300
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("贪吃蛇 - 极简中文版")
clock = pygame.time.Clock()
# 颜色定义
black = (0, 0, 0)
green = (0, 255, 0)
red = (255, 0, 0)
white = (255, 255, 255)
# 蛇和食物初始化
snake = [(width // 2, height // 2)]
food = (random.randint(0, (width - 10) // 10) * 10,
random.randint(0, (height - 10) // 10) * 10)
dx, dy = 10, 0 # 初始向右移动
# 字体设置(支持中文)
try:
font = pygame.font.Font(None, 30)
except:
pass
try:
font = pygame.font.SysFont("SimHei", 25) # 黑体
except:
font = pygame.font.SysFont("Microsoft YaHei", 25) # 微软雅黑
if not font:
font = pygame.font.SysFont("arial", 25) # 兜底方案
# 游戏主循环
running = True
game_over = False
score = 0
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 游戏进行中的键盘控制
if not game_over:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and dy == 0:
dx, dy = 0, -10
elif event.key == pygame.K_DOWN and dy == 0:
dx, dy = 0, 10
elif event.key == pygame.K_LEFT and dx == 0:
dx, dy = -10, 0
elif event.key == pygame.K_RIGHT and dx == 0:
dx, dy = 10, 0
else:
# 游戏结束后的键盘控制
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_r:
# 重新开始
snake = [(width // 2, height // 2)]
food = (random.randint(0, (width - 10) // 10) * 10,
random.randint(0, (height - 10) // 10) * 10)
dx, dy = 10, 0
score = 0
game_over = False
elif event.key == pygame.K_q:
running = False
# 游戏结束画面
if game_over:
screen.fill(black)
game_over_text = font.render("游戏结束!", True, red)
score_text = font.render(f"得分: {score}", True, white)
restart_text = font.render("按 R 重新开始, Q 退出", True, white)
screen.blit(game_over_text, (width // 2 - 60, height // 2 - 40))
screen.blit(score_text, (width // 2 - 50, height // 2))
screen.blit(restart_text, (width // 2 - 100, height // 2 + 40))
pygame.display.flip()
continue
# 蛇的移动逻辑
head = snake[0]
new_head = ((head[0] + dx) % width, (head[1] + dy) % height)
snake.insert(0, new_head)
# 食物检测
if new_head == food:
food = (random.randint(0, (width - 10) // 10) * 10,
random.randint(0, (height - 10) // 10) * 10)
score += 1
else:
snake.pop()
# 碰撞检测(撞到自己)
if snake[0] in snake[1:]:
game_over = True
# 绘制游戏画面
screen.fill(black)
# 绘制蛇身
for part in snake:
pygame.draw.rect(screen, green, (*part, 10, 10))
# 绘制食物
pygame.draw.rect(screen, red, (*food, 10, 10))
# 显示分数
score_surface = font.render(f"得分: {score}", True, white)
screen.blit(score_surface, (10, 10))
pygame.display.flip()
clock.tick(10) # 控制游戏速度
pygame.quit()

三、代码解析
1. 初始化设置
pygame.init()
初始化所有Pygame模块- 创建400x300像素的游戏窗口
- 设置游戏标题为"贪吃蛇 - 极简中文版"
- 定义了黑、绿、红、白四种颜色
2. 游戏对象初始化
- 蛇初始位置在屏幕中央,用一个坐标列表表示
- 食物位置随机生成,确保在网格对齐
- 初始移动方向向右(dx=10, dy=0)
3. 字体处理
特别处理了中文字体显示问题,尝试使用系统自带的中文字体:
- 首先尝试黑体(SimHei)
- 然后尝试微软雅黑(Microsoft YaHei)
- 最后回退到Arial(可能不支持中文)
4. 游戏主循环
事件处理
- 处理窗口关闭事件
- 游戏进行中:处理方向键控制(防止180度转弯)
- 游戏结束后:按R重新开始,按Q退出
游戏逻辑
- 蛇的移动:计算新头部位置,插入到蛇身列表开头
- 食物检测:如果吃到食物,增加分数并生成新食物;否则移除蛇尾
- 碰撞检测:检查蛇头是否撞到自身
画面渲染
- 清屏为黑色
- 绘制蛇身(绿色矩形)
- 绘制食物(红色矩形)
- 显示当前分数
5. 游戏速度控制
clock.tick(10)
控制游戏帧率为10FPS,使蛇的移动速度适中。
四、在Lightly中运行游戏
- 打开Lightly Python在线编译器(https://www.lightlycode.com/python)
- 创建新Python文件,粘贴上述代码
- 点击运行按钮
- 游戏窗口将在右侧显示区域弹出
五、游戏操作说明
- 方向键:控制蛇的移动方向
- R键:游戏结束后重新开始
- Q键:游戏结束后退出
六、可能的改进方向
- 增加游戏难度选择
- 添加背景音乐和音效
- 实现关卡系统
- 添加障碍物
- 实现高分记录功能
演示效果

七、总结
通过这个项目,我们学习了:
- 如何在Lightly在线环境中使用Pygame库
- 贪吃蛇游戏的基本实现原理
- 游戏循环、事件处理和渲染的基本流程
- 中文字体处理的技巧
Lightly的在线环境非常适合快速原型开发和小游戏制作,无需安装任何软件就能立即开始编码和测试。希望这个教程能帮助你理解Pygame的基本用法,并激发你创作更多有趣的游戏!
如果你对游戏开发感兴趣,不妨尝试修改这个基础版本,添加更多功能,创造属于自己的贪吃蛇游戏!