一个用 Python 纯标准库 重写的多人联机 2D 沙盒游戏:服务器、WebSocket 协议、世界生成、物理引擎全部由 Python 实现,零第三方依赖。浏览器负责渲染画面,局域网内任何设备打开网页即可一起玩。
旧版 Node.js 实现保留在
legacy/node/供参考。
🧊 另有 Java 3D 版(Minecraft 1.0 风格,纯 JDK 软件渲染)位于
java3d/,见 java3d/README.md。
- 程序化生成 240×140 世界:草地、泥土、石头、沙子、树木、洞穴、矿物、基岩
- 平台跳跃物理:重力、碰撞、水中减速与上浮
- 挖掘/放置:不同方块硬度不同(石头 3 下、砖块 4 下、钻石矿 7 下)
- 多人实时联机:服务器权威物理 + 状态广播 + 客户端插值
- 聊天系统、12 种颜色、在线玩家列表(Tab)
- 昼夜循环、晴/雨/雪天气系统(天空、云、雨雪粒子)
- 背包与掉落:挖方块掉落物品,走进自动拾取,快捷栏显示数量,放置消耗物品
- 矿物:煤矿石、铁矿石、金矿石、钻石矿石(越深越稀有)
- 装饰方块:火把、花(非实心,可放置)
- 生命值:摔落伤害(摔得越高伤越重)、溺水(水下有氧气条,耗尽扣血)
- 死亡与复活:死亡后 2.5 秒在出生点复活
- 创造模式:
/creative切换,无限放置、挖掘不掉落 - 存档:世界、天气、时间、玩家背包自动保存(
save.json)
玩家在聊天框输入(/ 开头):
| 指令 | 作用 |
|---|---|
/help |
查看指令列表 |
/list |
查看在线玩家 |
/spawn |
传送回出生点 |
/tp <玩家名> |
传送到指定玩家 |
/day / /night |
切换白天/夜晚 |
/weather <clear|rain|snow> |
切换天气 |
/creative |
切换创造/生存模式 |
/suicide |
立即死亡 |
/save |
立即保存世界 |
服务器控制台(运行服务器的黑色窗口):
| 命令 | 作用 |
|---|---|
save |
保存世界 |
list |
列出在线玩家 |
kick <名字> |
踢出玩家 |
broadcast <消息> |
发送公告 |
weather <clear|rain|snow> |
切换天气 |
time <day|night> |
调整时间 |
stop |
保存并关闭服务器 |
需要 Python 3.8+(start.bat 会自动使用 Codex 自带 Python;也可以自行安装 Python)。
双击 start.bat,看到服务器窗口后,浏览器打开 **http://localhost:3000**。
python server.py服务器启动后会显示局域网地址(如 http://192.168.1.10:3000),同一网络内的设备用浏览器打开即可。如无法访问,请检查 Windows 防火墙是否放行 Python 的 3000 端口。
set PORT=8080 && python server.py # Windows CMD
$env:PORT=8080; python server.py # PowerShell| 操作 | 按键 |
|---|---|
| 移动 | WASD / 方向键 |
| 跳跃 / 游泳上浮 | 空格 / W / ↑ |
| 挖掘(长按) | 鼠标左键 |
| 放置(长按) | 鼠标右键 |
| 切换快捷栏 | 1-8 或鼠标滚轮 |
| 聊天 / 指令 | Enter / T |
| 在线玩家列表 | 按住 Tab |
game/
├── server.py # Python 服务器入口:消息处理、背包、指令、主循环
├── game/
│ ├── blocks.py # 方块/物品定义、硬度、掉落表
│ ├── world.py # 世界生成(地形/洞穴/矿物/树/花)、存档
│ ├── physics.py # 玩家与掉落物物理
│ └── websocket.py # 纯标准库 HTTP + WebSocket 服务器
├── public/ # 浏览器客户端(Canvas 渲染)
│ ├── index.html
│ ├── style.css
│ └── game.js
├── scripts/
│ ├── smoke_test.py # Python 协议冒烟测试
│ ├── run_tests.py # 一键启动服务器并跑冒烟测试
│ └── visual_test.js # 浏览器可视化测试(需要 Chrome)
├── start.bat # Windows 一键启动
└── legacy/node/ # 旧版 Node.js 实现
python scripts/run_tests.py # 协议冒烟测试(自动启停服务器)
node scripts/visual_test.js # 浏览器可视化测试(需本机 Chrome)测试使用独立的临时存档,不会影响正式游戏存档。
客户端 → 服务器:hello(昵称/颜色)、input(移动/跳跃)、mine(挖掘)、place(放置+槽位)、chat(聊天或指令)。
服务器 → 客户端:welcome(世界+背包+玩家)、state(玩家/物品/时间/天气)、edit(方块变更)、inv(背包)、creative(模式切换)、player(加入/离开)、chat、sys(系统消息)。