Python制作小游戏——贪吃蛇(PyGame)

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. 如何运行?

  1. 把上面代码保存为 snake_game.py
  2. 在终端运行:python snake_game.py
  3. ↑ ↓ ← → 方向键控制蛇

4. 游戏特性一览

  • 经典贪吃蛇逻辑(吃食物长身体 + 得分)
  • 防止直接掉头
  • 撞墙 / 撞自己 = 游戏结束
  • 中文游戏结束界面 + 实时分数显示
  • 网格化移动(更丝滑)
  • 代码结构清晰,适合修改(想加音效、关卡、暂停都很容易)

想继续升级这个游戏吗?回复以下任意关键词,我立刻给你下一版:

  • 加音效(吃到食物、游戏结束音效)
  • 加暂停功能(按 P 键暂停)
  • 增加难度(随分数加快速度)
  • 添加开始菜单 + 最高分记录
  • 美化版(彩色食物、不同皮肤、粒子特效)

这个贪吃蛇项目做完,你的 Pygame 基础就非常扎实了!
快去运行试试吧~ 玩得开心!🐍✨

有什么问题或想修改的地方,随时告诉我!

文章已创建 5041

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部