建这个仓库是为了熟悉整个 git 操作流程,内容是一个霓虹视觉风格的贪吃蛇游戏。
打开页面先选模式,也可以直接按 1 或 2。
- 长方形棋盘:活动区按窗口比例铺满整个屏幕,短边固定 20 格、长边随窗口延伸(宽屏下横向格子明显更多),格子大小与光效同步等比缩放;棋盘越大食物越多,避免在空旷地图里找不到吃的
- 开局等待:进入对局后蛇不会立刻移动,画面上会提示「按方向键开始」;单人按一次即可,双人对战需要两位玩家各按一次方向键才一起出发,避免还没反应过来就被蛇带着走
- 单人模式:方向键或 WASD 控制,吃到食物加 10 分,每累计 50 分升一级并自动提速,撞墙或咬到自己结束
- 双人对战:两人共用一把键盘,玩家 1 用
WASD(青色),玩家 2 用方向键(橙色),棋盘上同时有 3 个食物- 谁先撞墙、咬到自己或撞到对手的身体就算输,两个蛇头正面相撞判平局
- 对战速度固定,升级机制只在单人模式生效,保证公平
- 游戏中按
Esc可随时回到模式选择,退出对局不会写入成绩
| 文件 | 说明 |
|---|---|
index.html |
游戏本体,含单人与双人对战两种模式,结束后可跳转到成绩页 |
scores.html |
成绩记录页,含全部场次时间线、单人排行榜与对战战绩统计 |
Dockerfile |
用 nginx 托管静态页面的镜像定义 |
.github/workflows/publish-image.yml |
自动构建镜像并推送到 ghcr.io 的工作流 |
LICENSE |
开源许可(Apache-2.0) |
直接双击 index.html 即可,无需构建、没有依赖。
最高分保存在浏览器的 localStorage.snakeHighScore,游戏页与成绩页共用这一份数据。
每局结束都会写入一条记录,存在浏览器的 localStorage.snakeRecords 里,最多保留最近 100 场。成绩页提供三个视角:
- 概览:总场次、单人最高分、对战战绩(玩家 1 胜 / 玩家 2 胜 / 平局)
- 记录明细:按时间倒序列出每一场,显示时间、模式与成绩,可按「全部 / 单人 / 对战」筛选
- 单人排行榜:所有单人成绩按分数从高到低排序,前三名带金、银、铜配色
单人记录的字段是分数、等级、蛇长与用时;对战记录保存胜者、双方分数与蛇长、落败方死因。旧版本只记录过最高分(localStorage.snakeHighScore),成绩页在没有新记录时会把它作为兜底显示。
镜像公开托管在 GitHub Packages,可以直接拉取运行:
docker run -p 8080:80 ghcr.io/ucas-yangxb/snake:latest
# 浏览器打开 http://localhost:8080镜像标签的生成规则:
| 触发方式 | 产生的标签 |
|---|---|
推送 v* 版本标签 |
1.2.0、1.2、latest |
推送到 main |
main、sha-<短SHA> |
| 手动触发工作流 | 按分支名与提交打标签,可额外指定一个标签 |
镜像基于 nginx:1.27-alpine,内部只包含 index.html 与 scores.html 两个页面,并配置了 HEALTHCHECK。
main:可发布的稳定版本,每次提交都会自动构建镜像- 功能开发走独立分支(例如
feat/xxx、docs/xxx),完成后通过 Pull Request 合并回main