# snake **Repository Path**: webcool-ai/snake ## Basic Information - **Project Name**: snake - **Description**: 使用 webcool 开发的多人在线贪吃蛇小游戏,后端使用 Go 语言开发,前端使用浏览器访问。 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-09-16 - **Last Updated**: 2026-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 贪吃蛇 · 多人联机 Go 后端提供 HTTP 服务,浏览器打开页面后与其他玩家在同一张地图上实时对战。 ## 运行界面 ![贪吃蛇运行界面](img/snake.png) ## 运行 ```sh ./build.sh ./run.sh ``` Windows 使用 `build.bat` 与 `run.bat`。服务默认监听 `127.0.0.1:18080`,启动后浏览器访问 。 脚本会把参数原样传给程序: ```sh ./run.sh -addr 127.0.0.1:19090 # 指定监听地址 ./run.sh -h # 显示帮助(-help 同义) ``` - `-addr <地址>`:服务监听地址,默认 `127.0.0.1:18080` - `-h` / `-help`:显示帮助信息并退出 ## 玩法 - 输入昵称并点击“开始游戏”加入对局;多个浏览器标签或设备可同时加入。 - 方向键或 WASD 控制方向,吃到橙色食物会加长并加分。 - 场上始终保留 5 个食物,吃掉一个会随机补上新的一个。 - 按空格键暂停或继续对局,侧边栏“超慢 / 慢 / 中 / 快”四档按钮可随时切换推进速度。 - 撞墙、撞到自己或其他蛇都会出局;出局后点击“重新加入”即可再来一局。 ## HTTP 接口 - `POST /api/join`:请求 `{"name":"昵称"}`,返回 `{"playerId":"p1","name":"昵称","color":"#22d3ee","tickIntervalMs":120}` - `POST /api/input`:请求 `{"playerId":"p1","direction":"up|down|left|right"}`(暂停期间返回 409) - `POST /api/pause`:请求 `{"paused":true|false}`,暂停或继续对局 - `POST /api/speed`:请求 `{"level":"very-slow|slow|medium|fast"}`,切换推进速度 - `GET /api/state`:当前对局快照(含 `paused` 与 `speed` 字段,轮询兜底) - `GET /api/stream`:SSE 实时快照流 - `GET /api/health`:健康检查 ## 测试 ```sh go test ./... ``` ## 结构 - `src/core`:游戏规则与状态(纯领域逻辑,无网络依赖) - `src/application`:对局编排、定时推进与广播 - `src/adapters`:HTTP 接口与静态资源托管 - `src/web`:浏览器前端(Canvas 渲染) - `tests`:核心规则、应用层与 HTTP 端到端测试