注:这是本人基于pygame模块写的一个贪吃蛇,主要针对于新手练习。
项目地址:suyihang15/Tetris_game: 基于python的俄罗斯方块
下载地址:https://github.com/suyihang15/Tetris_game/releases/download/1.0.0/tetris_game.exe
俄罗斯方块(Tetris_game)
基于 Python 和 Pygame 实现的经典俄罗斯方块游戏,遵循现代俄罗斯方块标准规则。
功能特性
标准规则
7 种标准方块**:I、O、T、S、Z、J、L,每种方块有独立的颜色
SRS 旋转系统**(Super Rotation System):每种方块拥有 4 个旋转状态
SRS 踢墙系统**(Wall Kick):旋转时若位置被阻挡,自动尝试偏移位置,支持 I 方块和 JLSTZ 方块的两套踢墙表
高级机制
Ghost Piece(投影预览)**:显示方块落到底部时的预估位置
Lock Delay(锁定延迟)**:方块着地后有短暂时间可继续操作,避免误放
锁定移动上限**:着地后最多可移动/旋转 15 次,超过则强制锁定
DAS / ARR 按键重复**:按住左右键时,延迟 170ms 后以 50ms 间隔连续移动,手感流畅
Hard Drop(硬降)**:空格键一键落到底部,并获得双倍距离分数
Soft Drop(软降)**:按住下键加速下落,每下落一格 +1 分
游戏功能
分数与等级系统(每消除 10 行升一级,最高下落间隔 50ms)
等级加成消除分数(1 行~4 行:100/300/500/800 × 等级)
下一方块预览面板
暂停 / 重新开始功能
游戏结束画面
操作方式
| ← → | 左右移动方块 |
| ↑ | 旋转方块 |
| ↓ | 加速下落 |
| 空格 | 直接落到底部 |
| P | 暂停 / 继续 |
| R | 重新开始(游戏结束后) |
运行环境
Python 3.6+
Pygame
安装依赖后运行:
pip install pygame
python tetris.py
整体架构
项目为单文件实现,包含一个 `Tetris` 类,通过 Pygame 管理游戏循环、渲染和输入。
核心数据结构
棋盘 `board`**:20 行 × 10 列的二维数组,存储每个格子的占用状态
方块形状 `SHAPES`**:字典结构,每个方块名对应 4 个旋转状态(每个状态为 4 个坐标的列表)
踢墙表 `KICK_JLSTZ` / `KICK_I`**:SRS 标准定义的旋转偏移量,按旋转方向索引
方块颜色
| 方块 | 颜色 | 色值 |
|——|——|——|
| I | 青色 | (0, 240, 240) |
| O | 黄色 | (240, 240, 0) |
| T | 紫色 | (160, 0, 240) |
| S | 绿色 | (0, 240, 0) |
| Z | 红色 | (240, 0, 0) |
| J | 蓝色 | (0, 0, 240) |
| L | 橙色 | (240, 160, 0) |
渲染系统
棋盘格子 30px × 30px,右侧 200px 信息面板
窗口分辨率:500 × 600
方块高光效果:内层填充亮色、外层边框,模拟立体感
Ghost Piece 以半透明线条边框呈现
半透明遮罩覆盖暂停和游戏结束画面
游戏循环
每帧执行:
1. `handle_events()` — 处理键盘事件
2. `update(dt)` — 更新按键重复、方块下落计时、锁定延迟
3. `draw()` — 渲染棋盘、方块、Ghost Piece、UI 面板
运行帧率固定为 60 FPS。
文件说明
/
├── tetris.py # 游戏主程序
└── README.md # 本说明文档
总结:希望能帮助入门的人学习。