旋刃竞技场 V2 是多人在线 2D 动作竞技游戏 sdcb/blade 的全新版本。
玩家通过移动、走位和旋转的刀刃与其他玩家对战,在竞技场中收集奖励、强化属性并争夺排行榜。V2 在保留原有玩法的基础上重构了整体架构,重点改善客户端流畅度、网络同步效率和服务端扩展能力。
- 使用 C 实现与平台无关的模拟核心,集中处理移动、碰撞、战斗和状态同步。
- 服务端通过原生动态库运行权威模拟,浏览器通过 WebAssembly 运行同一套核心。
- 客户端支持本地预测和平滑校正,服务端保留最终裁决权。
- .NET 10 服务端负责用户、房间、WebSocket、调度和 SQLite 持久化。
- Next.js 前端负责界面、输入和 Canvas 游戏画面。
| 模块 | 技术 |
|---|---|
| 模拟核心 | C、CMake、Emscripten |
| 服务端 | ASP.NET Core、.NET 10、Native AOT、SQLite |
| 原生桥接 | C#、P/Invoke |
| 前端 | Next.js、React、TypeScript、Tailwind CSS、WebAssembly |
| 测试 | xUnit v3 |
src/
├── blade_core/ C 模拟核心及 native/Wasm 构建脚本
├── Blade.Core.Native/ .NET 原生核心桥接
├── Blade.Server/ 游戏服务端
└── Blade.FE/ Web 客户端
tests/
└── Blade.Core.Tests/ 核心与桥接测试
scripts/ 前端和服务端构建脚本
镜像默认监听 8080 端口,SQLite 数据保存在容器的 /app/data 目录。以下命令将该目录映射到当前目录下的
blade-v2-data,重新创建或升级容器时数据不会丢失。
mkdir -p ./blade-v2-data
docker pull sdcb/blade-v2:latest
docker run --detach \
--name blade-v2 \
--restart unless-stopped \
--publish 8080:8080 \
--mount type=bind,source="$(pwd)/blade-v2-data",target=/app/data \
sdcb/blade-v2:latest$dataPath = (New-Item -ItemType Directory -Force .\blade-v2-data).FullName
docker pull sdcb/blade-v2:latest
docker run --detach `
--name blade-v2 `
--restart unless-stopped `
--publish 8080:8080 `
--mount "type=bind,source=$dataPath,target=/app/data" `
sdcb/blade-v2:latest启动后访问 http://localhost:8080。
当前构建脚本面向 Windows,需要提前安装:
- .NET 10 SDK
- Node.js 和 npm
- CMake
- 带有 C++ 工具链的 Visual Studio 2022
- Emscripten SDK(构建 WebAssembly 时需要)
在仓库根目录执行:
# 构建 win-x64 原生核心
.\src\blade_core\scripts\build-win-x64.ps1
# 构建 Wasm 核心和前端,并将静态资源同步到服务端
.\scripts\build-fe.ps1
# 启动开发服务器
dotnet run --project .\src\Blade.Server\Blade.Server.csproj默认开发地址为 http://localhost:55399。
如需生成 win-x64 Native AOT 发布包:
.\scripts\build-server-aot-win-x64.ps1发布结果位于
src\Blade.Server\bin\Release\net10.0\win-x64\publish\。
先构建 win-x64 原生核心,再执行:
dotnet test .\tests\Blade.Core.Tests\Blade.Core.Tests.csproj本项目基于 MIT License 开源。