Python + Pygame 制作经典贪吃蛇小游戏(2026 最新完整版)
这是 Python 入门者最推荐的第一个小游戏项目!
下面给你一个完整、可直接运行、结构清晰的贪吃蛇代码(基于 GeeksforGeeks 2025 年更新版本 + 优化注释)。
1. 首先安装 Pygame
pip install pygame
2. 完整代码(复制粘贴即可运行)
import pygame
import time
import random
# ==================== 游戏配置 ====================
snake_speed = 15 # 速度(越大越快)
window_x = 720 # 窗口宽度
window_y = 480 # 窗口高度
# 颜色定义(RGB)
black = pygame.Color(0, 0, 0)
white = pygame.Color(255, 255, 255)
red = pygame.Color(255, 0, 0)
green = pygame.Color(0, 255, 0)
blue = pygame.Color(0, 0, 255)
# 初始化 Pygame
pygame.init()
# 创建游戏窗口
pygame.display.set_caption('贪吃蛇 - Python Pygame')
game_window = pygame.display.set_mode((window_x, window_y))
# FPS 控制器
fps = pygame.time.Clock()
# ==================== 游戏初始状态 ====================
snake_position = [100, 50] # 蛇头初始位置
# 蛇初始身体(4 节)
snake_body = [[100, 50],
[90, 50],
[80, 50],
[70, 50]]
# 食物初始位置(10的倍数,网格对齐)
fruit_position = [random.randrange(1, (window_x//10)) * 10,
random.randrange(1, (window_y//10)) * 10]
fruit_spawn = True
# 蛇默认方向
direction = 'RIGHT'
change_to = direction
score = 0
# ==================== 辅助函数 ====================
def show_score(choice, color, font, size):
score_font = pygame.font.SysFont(font, size)
score_surface = score_font.render('得分: ' + str(score), True, color)
score_rect = score_surface.get_rect()
game_window.blit(score_surface, score_rect)
def game_over():
my_font = pygame.font.SysFont('simhei', 50) # 支持中文
game_over_surface = my_font.render('游戏结束!最终得分: ' + str(score), True, red)
game_over_rect = game_over_surface.get_rect()
game_over_rect.midtop = (window_x / 2, window_y / 4)
game_window.blit(game_over_surface, game_over_rect)
pygame.display.flip()
time.sleep(2)
pygame.quit()
quit()
# ==================== 主游戏循环 ====================
while True:
# 处理键盘事件
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
change_to = 'UP'
if event.key == pygame.K_DOWN:
change_to = 'DOWN'
if event.key == pygame.K_LEFT:
change_to = 'LEFT'
if event.key == pygame.K_RIGHT:
change_to = 'RIGHT'
# 防止同时按相反方向(蛇不能直接掉头)
if change_to == 'UP' and direction != 'DOWN':
direction = 'UP'
if change_to == 'DOWN' and direction != 'UP':
direction = 'DOWN'
if change_to == 'LEFT' and direction != 'RIGHT':
direction = 'LEFT'
if change_to == 'RIGHT' and direction != 'LEFT':
direction = 'RIGHT'
# 根据方向移动蛇头
if direction == 'UP':
snake_position[1] -= 10
if direction == 'DOWN':
snake_position[1] += 10
if direction == 'LEFT':
snake_position[0] -= 10
if direction == 'RIGHT':
snake_position[0] += 10
# 蛇身体增长机制
snake_body.insert(0, list(snake_position))
if snake_position[0] == fruit_position[0] and snake_position[1] == fruit_position[1]:
score += 10
fruit_spawn = False
else:
snake_body.pop() # 没吃到食物就去掉尾巴
# 生成新食物
if not fruit_spawn:
fruit_position = [random.randrange(1, (window_x//10)) * 10,
random.randrange(1, (window_y//10)) * 10]
fruit_spawn = True
# 填充背景
game_window.fill(black)
# 画蛇
for pos in snake_body:
pygame.draw.rect(game_window, green, pygame.Rect(pos[0], pos[1], 10, 10))
# 画食物
pygame.draw.rect(game_window, white, pygame.Rect(fruit_position[0], fruit_position[1], 10, 10))
# 游戏结束条件
# 撞墙
if snake_position[0] < 0 or snake_position[0] > window_x-10:
game_over()
if snake_position[1] < 0 or snake_position[1] > window_y-10:
game_over()
# 撞自己
for block in snake_body[1:]:
if snake_position[0] == block[0] and snake_position[1] == block[1]:
game_over()
# 显示分数
show_score(1, white, 'simhei', 20)
# 更新屏幕
pygame.display.update()
# 控制帧率
fps.tick(snake_speed)
3. 如何运行?
- 把上面代码保存为
snake_game.py - 在终端运行:
python snake_game.py - 用 ↑ ↓ ← → 方向键控制蛇
4. 游戏特性一览
- 经典贪吃蛇逻辑(吃食物长身体 + 得分)
- 防止直接掉头
- 撞墙 / 撞自己 = 游戏结束
- 中文游戏结束界面 + 实时分数显示
- 网格化移动(更丝滑)
- 代码结构清晰,适合修改(想加音效、关卡、暂停都很容易)
想继续升级这个游戏吗?回复以下任意关键词,我立刻给你下一版:
- 加音效(吃到食物、游戏结束音效)
- 加暂停功能(按 P 键暂停)
- 增加难度(随分数加快速度)
- 添加开始菜单 + 最高分记录
- 美化版(彩色食物、不同皮肤、粒子特效)
这个贪吃蛇项目做完,你的 Pygame 基础就非常扎实了!
快去运行试试吧~ 玩得开心!🐍✨
有什么问题或想修改的地方,随时告诉我!