目录
一、背景介绍
贪吃蛇(Snake Game)是电子游戏史上的经典之作,玩家通过操控蛇的移动方向,使其不断“吃”食物来增长身体,同时避免碰撞边界或自身。
为什么用Python实现?
- 简洁高效:Python语法简单,适合快速开发小游戏。
- Pygame库支持:提供图形渲染、事件处理等核心功能,无需复杂底层代码。
- 学习价值:涵盖游戏循环、碰撞检测、用户输入处理等核心开发概念。
二、环境准备
# 安装必要库(推荐使用虚拟环境)
pip install pygame==2.1.3
pip install random2==1.0.1
三、完整游戏代码实现
"""
Python贪吃蛇完整实现
作者:一个天蝎座 白勺 程序猿
版本:v1.2(碰撞优化版)
"""
import pygame
import random
import sys
from pygame.locals import *
# 初始化配置
pygame.init()
FPS = pygame.time.Clock()
# 游戏窗口参数
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 480
CELL_SIZE = 15
# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 方向常量
UP = 'up'
DOWN = 'down'
LEFT = 'left'
RIGHT = 'right'
class SnakeGame:
def __init__(self):
self.window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption('Python贪吃蛇-专业版')
self.reset_game()
def reset_game(self):
"""初始化游戏状态"""
self.direction = RIGHT
self.head = [WINDOW_WIDTH//2, WINDOW_HEIGHT//2]
self.body = [list(self.head)]
self.food = self.generate_food()
self.score = 0
self.game_over = False
def generate_food(self):
"""生成新食物(避开蛇身)"""
while True:
x = random.randint(0, (WINDOW_WIDTH-CELL_SIZE)//CELL_SIZE )*CELL_SIZE
y = random.randint(0, (WINDOW_HEIGHT-CELL_SIZE)//CELL_SIZE )*CELL_SIZE
if [x, y] not in self.body:
return [x, y]
def check_collision(self):
"""碰撞检测系统"""
# 边界检测
if (self.head < 0 or self.head >= WINDOW_WIDTH or
self.head < 0 or self.head >= WINDOW_HEIGHT):
return True
# 自碰检测
for block in self.body[1:]:
if self.head == block:
return True
return False
def move_snake(self):
"""蛇的移动逻辑"""
if self.direction == UP:
self.head -= CELL_SIZE
elif self.direction == DOWN:
self.head += CELL_SIZE
elif self.direction == LEFT:
self.head -= CELL_SIZE
elif self.direction == RIGHT:
self.head += CELL_SIZE
# 插入新头部
self.body.insert(0, list(self.head))
# 吃到食物检测
if self.head == self.food:
self.score += 10
self.food = self.generate_food()
else:
# 未吃到则移除尾部
self.body.pop()
def draw_elements(self):
"""图形渲染系统"""
self.window.fill(BLACK)
# 绘制蛇身
for index, block in enumerate(self.body):
color = GREEN if index == 0 else WHITE
pygame.draw.rect(self.window, color,
(block, block, CELL_SIZE, CELL_SIZE))
# 绘制食物
pygame.draw.rect(self.window, RED,
(self.food, self.food, CELL_SIZE, CELL_SIZE))
# 显示分数
font = pygame.font.SysFont('simhei', 24)
text = font.render(f'得分: {self.score}', True, WHITE)
self.window.blit(text, (10, 10))
pygame.display.update()
def run(self):
"""主游戏循环"""
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if (event.key == K_UP and self.direction != DOWN):
self.direction = UP
elif (event.key == K_DOWN and self.direction != UP):
self.direction = DOWN
elif (event.key == K_LEFT and self.direction != RIGHT):
self.direction = LEFT
elif (event.key == K_RIGHT and self.direction != LEFT):
self.direction = RIGHT
elif event.key == K_r and self.game_over:
self.reset_game()
if not self.game_over:
self.move_snake()
self.game_over = self.check_collision()
self.draw_elements()
FPS.tick(12) # 控制游戏速度
if __name__ == '__main__':
game = SnakeGame()
game.run()
四、代码核心解析
1. 游戏引擎架构
- 双缓冲渲染:通过
pygame.display.update()
实现流畅动画 - FPS控制器:
Clock.tick(12)
控制游戏速度 - 事件循环:实时响应键盘输入
2. 关键技术实现
- 防逆向机制:禁止180°转向(例如当向右移动时不能立即左转)
- 碰撞检测系统:包含边界检测和自碰检测双重验证
- 智能食物生成:确保食物不会出现在蛇身位置
3. 运行效果说明
- 使用方向键控制移动
- R键可重启游戏
- 吃到红色食物得分+10
- 碰撞后显示最终得分
五、注意事项与原创声明
- 代码原创性:所有逻辑均为独立编写,未参考第三方代码。
- 素材合规:未使用受版权保护的图片或音效,仅通过颜色块渲染图形。
六、总结
-
技术亮点:
- 模块化设计:蛇、食物、游戏逻辑分离,代码结构清晰。
- 碰撞检测:通过坐标比对实现高效的自身碰撞判断。
- 方向控制:禁止180度转向,符合经典玩法逻辑。
-
学习价值:
- 掌握Pygame基础用法(事件循环、图形绘制)。
- 理解游戏开发中的状态管理与实时更新机制。
-
扩展方向:
- 添加“墙壁”模式(边界碰撞触发结束)。
- 支持多人对战或AI自动控制。
Python相关文章(推荐)
1. Python全方位指南:
Python(1)Python全方位指南:定义、应用与零基础入门实战
2. Python基础数据类型详解:Python(2)Python基础数据类型详解:从底层原理到实战应用
3. Python循环:Python(3)掌握Python循环:从基础到实战的完整指南
4. Python列表推导式:Python(3.1)Python列表推导式深度解析:从基础到工程级的最佳实践
5. Python生成器:Python(3.2)Python生成器深度全景解读:从yield底层原理到万亿级数据处理工程实践
6. Python函数编程性能优化:Python(4)Python函数编程性能优化全指南:从基础语法到并发调优
7. Python数据清洗:Python(5)Python数据清洗指南:无效数据处理与实战案例解析(附完整代码)
8. Python邮件自动化:Python(6)Python邮件自动化终极指南:从零搭建企业级邮件系统(附完整源码)
9. Python通配符基础:Python(7)Python通配符完全指南:从基础到高阶模式匹配实战(附场景化代码)
10. Python通配符高阶:Python(7 升级)Python通配符高阶实战:从模式匹配到百万级文件处理优化(附完整解决方案)