一个供 2~4 名真人联机游玩的四国军棋网页。游戏通过房间码连接,不包含 AI 玩家。
服务端统一保存棋局并判断移动、战斗和胜负;未公开的敌方棋子不会发送真实棋子类型给其他玩家。
- 支持 2 人、3 人和 4 人房间。
- 2 人使用南、北两个相对阵营。
- 3 人使用北、东、南三个阵营。
- 4 人支持自由混战,以及南北对东西的联盟模式。
- 支持随机布阵、手动交换棋子、准备、开局和断线重连。
- 提供隐蔽模式:界面使用灰色、棕色、深绿色和深蓝色,暗棋背面不显示文字。
- 房间和棋局保存在内存中,服务器重启后会清空。
- Node.js 18 或更高版本
- npm
Windows 用户建议在 WSL 中运行。项目放在 WSL 自己的目录中通常比 /mnt/c、/mnt/d、/mnt/e 等 Windows 挂载盘安装依赖更快,例如:
mkdir -p ~/projects
cp -r /mnt/e/siguo-junqi ~/projects/
cd ~/projects/siguo-junqi首次下载,或 package-lock.json 发生变化后安装依赖:
npm ci启动服务器:
npm start然后打开 http://localhost:3000。停止服务器按 Ctrl+C。
依赖只需在项目中安装一次,不需要每次启动都重新下载。不要把 Express、Socket.IO 等项目依赖全局安装;保留 node_modules 后,之后直接执行 npm start 即可。
如果没有 package-lock.json,才使用:
npm install可以使用 VS Code 的端口转发功能:
- 在 WSL 中打开项目并执行
npm start。 - 打开 VS Code 的“端口(Ports)”面板。
- 转发端口
3000。 - 将端口可见性设置为
Public。 - 把生成的 HTTPS 地址发给其他玩家。
- 房主创建房间,把房间码发给其他玩家。
联机期间,WSL 中的服务器进程和 VS Code 都需要保持运行。
- 每方第一行、第五行是横向铁路。
- 每方第一列、第五列从第一行到第五行是纵向铁路。
- 第六行不接铁路,只通过普通道路连接第五行。
- 每方第三行第三列是中央行营,只接公路,不接铁路。
- 棋盘正中央保留
3×3共九个铁路点,九点内部的三行、三列分别直接相连。 - 每方只有第一行的第
1、3、5列接入中央九点,第2、4列不接中央。 - 相对玩家的三条中央铁路贯通,普通棋子可以沿同一条直线通过中央攻击对面,但不能在中央转弯。
- 工兵可以沿连通铁路行进,并在中央九点转弯。
- 每方左侧纵向铁路通过一个角部弯道,连接左侧相邻玩家的下侧铁路。该弯道在规则上视作一条连续直道,普通棋子也可沿线通过。
- 铁路途中有棋子阻挡时,任何棋子都不能越过。
- 地雷和军旗不能移动。
- 军旗必须放在大本营;地雷只能放在最后两行;炸弹不能放在第一行。
- 大本营中的棋子不能移动。
- 行营中的棋子不能被攻击。
- 工兵可以排雷;炸弹与对方棋子同归于尽;相同等级的棋子同归于尽。
- 司令阵亡后,该阵营的军旗会公开。
npm test可打开 http://localhost:3000/health 检查服务器;正常时会返回包含 "ok": true 的 JSON。
public/ 浏览器界面、样式和交互
server/server.js 房间、联机和对局流程
server/game.js 棋盘、移动和战斗规则
test/ 规则与多人联机测试
package.json 启动命令和依赖
首次安装可能需要几分钟。若项目位于 /mnt/e 等 Windows 磁盘,先移动到 ~/projects 再执行 npm ci。不要在安装过程中重复运行多个 npm 命令。
通常表示 node_modules 下载不完整或文件损坏。删除项目内的 node_modules 后重新执行 npm ci。这只会重新安装依赖,不会删除游戏代码。
确认服务器仍在运行、转发的是 3000 端口,并且端口可见性为 Public。