Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

方块世界 · 联机 2D 沙盒(Python 版)

一个用 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)

测试使用独立的临时存档,不会影响正式游戏存档。

网络协议(JSON over WebSocket)

客户端 → 服务器:hello(昵称/颜色)、input(移动/跳跃)、mine(挖掘)、place(放置+槽位)、chat(聊天或指令)。

服务器 → 客户端:welcome(世界+背包+玩家)、state(玩家/物品/时间/天气)、edit(方块变更)、inv(背包)、creative(模式切换)、player(加入/离开)、chat、sys(系统消息)。

About

Multiplayer 2D voxel sandbox in pure Python stdlib - server, WebSocket, worldgen and physics; plus Java 3D and legacy Node builds

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages