226 lines
5.5 KiB
Markdown
226 lines
5.5 KiB
Markdown
# 🐍 Python 经典贪吃蛇游戏
|
||||
|
|
|
|||
|
|
一个使用 Python 和 Pygame 开发的经典贪吃蛇游戏,画面精美,操作简单有趣!
|
|||
|
|
|
|||
|
|
## ✨ 游戏特性
|
|||
|
|
|
|||
|
|
### 🎮 核心玩法
|
|||
|
|
- **经典规则** - 控制蛇移动,吃到食物变长
|
|||
|
|
- **渐进难度** - 每吃 5 个食物速度加快
|
|||
|
|
- **精美画面** - 现代化 UI 设计,蛇有眼睛动画
|
|||
|
|
- **流畅操作** - 支持方向键和 WASD 双控制方案
|
|||
|
|
|
|||
|
|
### 🎨 视觉效果
|
|||
|
|
- 深蓝色背景 + 网格线
|
|||
|
|
- 绿色蛇身,带眼睛动画
|
|||
|
|
- 红色圆形食物,带高光和阴影
|
|||
|
|
- 半透明游戏结束/暂停界面
|
|||
|
|
- 实时分数和速度显示
|
|||
|
|
|
|||
|
|
### 🎯 游戏功能
|
|||
|
|
- 暂停/继续功能(P 键)
|
|||
|
|
- 游戏结束后快速重开(空格键)
|
|||
|
|
- 优雅退出(ESC 键)
|
|||
|
|
- 碰撞检测(墙壁和自己)
|
|||
|
|
- 速度系统(10-25 FPS)
|
|||
|
|
|
|||
|
|
## 📦 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pip install -r game_requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或者单独安装:
|
|||
|
|
```bash
|
|||
|
|
pip install pygame>=2.5.0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 快速开始
|
|||
|
|
|
|||
|
|
### 方法 1:运行启动文件
|
|||
|
|
```bash
|
|||
|
|
python play_game.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法 2:直接运行游戏
|
|||
|
|
```bash
|
|||
|
|
python snake_game.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎮 游戏操作
|
|||
|
|
|
|||
|
|
| 按键 | 功能 |
|
|||
|
|
|------|------|
|
|||
|
|
| ↑ / W | 向上移动 |
|
|||
|
|
| ↓ / S | 向下移动 |
|
|||
|
|
| ← / A | 向左移动 |
|
|||
|
|
| → / D | 向右移动 |
|
|||
|
|
| P | 暂停/继续游戏 |
|
|||
|
|
| 空格 | 游戏结束后重新开始 |
|
|||
|
|
| ESC | 退出游戏 |
|
|||
|
|
|
|||
|
|
## 📖 游戏规则
|
|||
|
|
|
|||
|
|
1. **目标** - 控制蛇吃到尽可能多的食物
|
|||
|
|
2. **得分** - 每个食物 = 10 分
|
|||
|
|
3. **加速** - 每吃 5 个食物(50 分),速度提升 2 档
|
|||
|
|
4. **失败条件**:
|
|||
|
|
- 蛇头撞到墙壁
|
|||
|
|
- 蛇头撞到自己的身体
|
|||
|
|
5. **最大速度** - 25 FPS(初始速度 10 FPS)
|
|||
|
|
|
|||
|
|
## 🏆 技巧提示
|
|||
|
|
|
|||
|
|
### 新手技巧
|
|||
|
|
- 开始时速度较慢,熟悉操作
|
|||
|
|
- 提前规划路线,不要急转弯
|
|||
|
|
- 尽量保持在屏幕中央活动
|
|||
|
|
|
|||
|
|
### 进阶技巧
|
|||
|
|
- 利用墙壁反弹改变方向
|
|||
|
|
- 预留足够的转弯空间
|
|||
|
|
- 高速时小幅调整方向
|
|||
|
|
- 观察蛇头眼睛判断方向
|
|||
|
|
|
|||
|
|
### 高分策略
|
|||
|
|
- 采用"之"字形路线清理食物
|
|||
|
|
- 避免把自己逼入死角
|
|||
|
|
- 保持蛇身紧凑,留出空间
|
|||
|
|
- 后期以生存为主,不要贪心
|
|||
|
|
|
|||
|
|
## 🎨 游戏画面
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌────────────────────────────────────────┐
|
|||
|
|
│ Score: 120 Speed: 14 │
|
|||
|
|
├────────────────────────────────────────┤
|
|||
|
|
│ │
|
|||
|
|
│ ●●●●● (蛇) │
|
|||
|
|
│ ● │
|
|||
|
|
│ ● │
|
|||
|
|
│ ●●●● │
|
|||
|
|
│ ● │
|
|||
|
|
│ ● 🍎 (食物) │
|
|||
|
|
│ │
|
|||
|
|
│ │
|
|||
|
|
└────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 自定义配置
|
|||
|
|
|
|||
|
|
### 修改窗口大小
|
|||
|
|
编辑 `snake_game.py` 中的初始化参数:
|
|||
|
|
```python
|
|||
|
|
game = SnakeGame(width=1000, height=800, cell_size=25)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 修改颜色
|
|||
|
|
编辑 `snake_game.py` 中的颜色字典:
|
|||
|
|
```python
|
|||
|
|
self.colors = {
|
|||
|
|
'background': (15, 23, 42), # 背景色
|
|||
|
|
'snake_head': (34, 197, 94), # 蛇头颜色
|
|||
|
|
'snake_body': (22, 163, 74), # 蛇身颜色
|
|||
|
|
'food': (239, 68, 68), # 食物颜色
|
|||
|
|
# ... 更多颜色
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 修改初始速度
|
|||
|
|
```python
|
|||
|
|
self.speed = 15 # 改为 15 FPS
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🐛 常见问题
|
|||
|
|
|
|||
|
|
### Q: 游戏窗口打不开?
|
|||
|
|
A: 确保已安装 Pygame:`pip install pygame`
|
|||
|
|
|
|||
|
|
### Q: 按键没反应?
|
|||
|
|
A: 确保游戏窗口处于焦点状态,点击窗口后再操作
|
|||
|
|
|
|||
|
|
### Q: 游戏太慢/太快?
|
|||
|
|
A: 修改 `self.speed = 10` 调整初始速度
|
|||
|
|
|
|||
|
|
### Q: 想要更大/更小的蛇?
|
|||
|
|
A: 修改 `cell_size = 20` 调整格子大小
|
|||
|
|
|
|||
|
|
## 🎯 扩展计划
|
|||
|
|
|
|||
|
|
- [ ] 添加音效和背景音乐
|
|||
|
|
- [ ] 多种难度选择
|
|||
|
|
- [ ] 排行榜系统
|
|||
|
|
- [ ] 多种蛇皮肤
|
|||
|
|
- [ ] 双人模式
|
|||
|
|
- [ ] 特殊道具(加速、减速、穿墙)
|
|||
|
|
- [ ] 地图编辑器
|
|||
|
|
- [ ] 录像回放功能
|
|||
|
|
|
|||
|
|
## 💻 技术实现
|
|||
|
|
|
|||
|
|
### 核心技术
|
|||
|
|
- **Pygame** - 游戏引擎和渲染
|
|||
|
|
- **网格系统** - 基于网格的移动和碰撞检测
|
|||
|
|
- **队列数据结构** - 蛇身管理
|
|||
|
|
- **事件驱动** - 键盘输入处理
|
|||
|
|
|
|||
|
|
### 性能优化
|
|||
|
|
- 只重绘变化的部分
|
|||
|
|
- 使用矩形碰撞检测
|
|||
|
|
- 帧率控制保证流畅性
|
|||
|
|
|
|||
|
|
### 代码结构
|
|||
|
|
```
|
|||
|
|
SnakeGame
|
|||
|
|
├── __init__() # 初始化
|
|||
|
|
├── reset_game() # 重置游戏
|
|||
|
|
├── _generate_food() # 生成食物
|
|||
|
|
├── _handle_events() # 处理事件
|
|||
|
|
├── _update() # 更新状态
|
|||
|
|
├── _check_collision() # 碰撞检测
|
|||
|
|
├── _draw_grid() # 绘制网格
|
|||
|
|
├── _draw_snake() # 绘制蛇
|
|||
|
|
├── _draw_food() # 绘制食物
|
|||
|
|
├── _draw_score() # 绘制分数
|
|||
|
|
├── _draw_game_over() # 游戏结束画面
|
|||
|
|
├── _draw_paused() # 暂停画面
|
|||
|
|
├── draw() # 总绘制
|
|||
|
|
└── run() # 主循环
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📝 版本历史
|
|||
|
|
|
|||
|
|
### v1.0.0
|
|||
|
|
- ✅ 基础游戏功能
|
|||
|
|
- ✅ 精美 UI 界面
|
|||
|
|
- ✅ 蛇眼睛动画
|
|||
|
|
- ✅ 暂停/继续功能
|
|||
|
|
- ✅ 速度系统
|
|||
|
|
- ✅ 碰撞检测
|
|||
|
|
|
|||
|
|
## 🎓 学习价值
|
|||
|
|
|
|||
|
|
通过这个游戏可以学习:
|
|||
|
|
- Pygame 基础使用
|
|||
|
|
- 游戏循环设计
|
|||
|
|
- 碰撞检测算法
|
|||
|
|
- 事件处理机制
|
|||
|
|
- 面向对象编程
|
|||
|
|
- 动画原理
|
|||
|
|
|
|||
|
|
## 📄 许可证
|
|||
|
|
|
|||
|
|
MIT License
|
|||
|
|
|
|||
|
|
## 🎉 开始游戏
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装依赖
|
|||
|
|
pip install -r game_requirements.txt
|
|||
|
|
|
|||
|
|
# 运行游戏
|
|||
|
|
python play_game.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
祝你玩得开心!🐍🎮
|