# brick-game
**Repository Path**: TechFunWay/brick-game
## Basic Information
- **Project Name**: brick-game
- **Description**: 🕹️ 方块游戏机 Brick Game — 经典 9999-in-1 掌机 HTML5 复刻,49 款游戏(俄罗斯方块/贪吃蛇/赛车/坦克/打砖块/2048/扫雷…),霓虹像素 + 8bit 芯片音乐,零依赖零构建,桌面/手机/Docker/飞牛 fnOS 即开即玩
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-19
- **Last Updated**: 2026-09-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# BRICK GAME 方块游戏机 · 超越经典版
**English** | [中文](#应用功能介绍)
> 🕹️ **Brick Game Console — 49 games in 1**. A faithful HTML5 revival of the classic
> 9999-in-1 brick handheld, rebuilt with pure HTML5 / Canvas / WebAudio — neon pixel
> art, chiptune music, zero dependencies, zero build step. Runs on desktop & mobile.
纯原生 HTML5 / Canvas / WebAudio 复刻经典掌上方块游戏机(Brick Game 9999 in 1)的全部玩法,
并在画面、音效、特效上全面超越原机。**零依赖、零构建**——所有代码手写,双击即玩。
[](LICENSE)
[](https://github.com/TechFunWay/brick-game/releases/latest)

 
| 手机横屏(屏幕在左、方向键在右) | 手机竖屏 |
| :---: | :---: |
|  |  |
## 应用功能介绍
**一台装进 NAS 的复古掌机,49 款游戏,手机/电脑打开即玩。**
- **玩法全收录(33 款经典)**:方块家族 6 款(经典 / 挑战B / 豪华五格骨牌 / 暴雨 / 冲刺 / 盲盒)、贪吃蛇 3 款、赛车 3 款、打飞机 2 款、坦克 2 款、打砖块 2 款、数字拼图 3 款、记忆翻牌 2 款、飞碟射击 2 款、接宝 2 款、推箱子 2 款、导弹拦截 2 款、青蛙过河 2 款——对应原机全系 A/B 变体。
- **16 款全新小品**:2048、扫雷、贪吃豆、点灯、汉诺塔、月面着陆、黑白棋、迷宫寻宝、拉霸机、速算、颠球、笨鸟先飞、记忆旋律、消星星、高山滑雪、井字棋。
- **画面超越原机**:霓虹像素 + CRT 扫描线暗角、行消除粒子爆裂、屏幕震动、闪光与浮动连击文字、动态星空背景。
- **8bit 芯片音乐**:WebAudio 实时合成 30 余种音效 + 双声部(方波主旋律/三角波贝斯)芯片音乐,含俄罗斯方块 Korobeiniki 主题曲等 5 首。
- **现代手感**:0–9 速度选择(同原机)、DAS 连发移动、踢墙旋转、软降/硬降计分、每游戏独立最高分存档、暂停/结算/新纪录提示、后台自动暂停。
- **手机完美适配**:虚拟方向键 + A/B 按键 + 屏幕滑动手势,横屏自动切换左右布局,刘海屏安全区适配,全屏模式与「添加到主屏幕」PWA 独立运行,按键震动触感(可开关)。
## 运行方式
本项目是 [smallgo](https://github.com/techfunway) 基座下的第 8 个应用,纯静态前端 + Go 静态服务(端口 **8908**)。
```bash
make dev # 本地启动 http://localhost:8908
make start # 同上(go run)
```
浏览器打开 http://localhost:8908 即可;手机连同一局域网直接访问 NAS IP:8908。
## 编译打包
```bash
make build # 编译当前平台二进制
make build-linux # 交叉编译 linux amd64 + arm64
make build-all # 全平台编译打包(darwin/linux/windows 压缩包 + 部署 compose 到 release/<版本>/)
make build-docker # 构建多架构 Docker 镜像并推送(linux amd64 + arm64 合并为单 tag,pull 自动识别架构)
make fnpack # 构建飞牛 fnOS 双架构安装包到 release/<版本>/(文件名含版本号)
make clean # 清理
```
发行产物目录 `release/<版本>/`:五平台压缩包(`techfunway-brick-game-<版本>-<系统>-<架构>.tar.gz` / Windows `.zip`)、双架构 `.fpk`、`docker-compose.yml` 与 `docker-compose.latest.yml`、游戏截图(`screenshots/` 与打包好的 `screenshots-<版本>.zip`,源自 `docs/screenshots/`)以及 `CHANGELOG.md` 更新日志。
## 发行包运行(免安装二进制)
从 `release/<版本>/` 下载对应平台压缩包,解压即用——目录内自带 `web/` 静态资源,二进制为纯静态链接,无需安装任何运行时依赖:
```bash
tar xzf techfunway-brick-game-v0.1.0-linux-amd64.tar.gz
cd techfunway-brick-game-v0.1.0-linux-amd64
```
Windows 包解压后双击 `brick-game.exe` 直接运行。
### 直接启动(前台)
```bash
./brick-game # 默认端口 8908,静态资源取 ./web
```
启动后浏览器打开 `http://localhost:8908` 即可游玩。**停止:终端按 `Ctrl + C`。**
常用参数(均有默认值,一般无需指定):
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `-port` | 8908 | HTTP 监听端口 |
| `-web-dir` | `./web` | 静态资源目录(解压目录内已自带) |
| `-logmode` | release | 日志模式:`release` / `debug` |
| `-disable-stats` | 关闭 | 关闭匿名使用统计与支持计数上报(也可用环境变量 `DISABLE_STATS=1`) |
| `-version` | — | 打印版本信息后退出 |
### 支持作者
应用免费、无广告。如果你觉得它好玩,欢迎请作者喝杯咖啡——微信扫码赞赏,金额随意。
赞赏完全自愿,不支付不影响任何功能。点「已支持」后发送的只是一次匿名支持计数(设备哈希/系统/版本 + 金额),
与你的微信账号和支付记录无任何关联;`-disable-stats` 可彻底关闭上报。
### 后台守护启动
#### 方式一:nohup(Linux / macOS 通用,最简单)
```bash
# 启动:日志写入 brick-game.log,进程号写入 brick-game.pid
nohup ./brick-game -port 8908 > brick-game.log 2>&1 &
echo $! > brick-game.pid
# 查看运行日志
tail -f brick-game.log
# 停止
kill $(cat brick-game.pid)
# 重启:先停旧进程,等端口释放后再拉起
kill $(cat brick-game.pid) 2>/dev/null; sleep 1
nohup ./brick-game -port 8908 > brick-game.log 2>&1 &
echo $! > brick-game.pid
```
> PID 文件丢失时,也可以用 `pkill -f brick-game` 按进程名停止。
#### 方式二:systemd(Linux 服务器 / NAS 推荐,支持开机自启 + 崩溃自动拉起)
把发行包解压到固定目录(示例 `/opt/brick-game`),创建 `/etc/systemd/system/brick-game.service`:
```ini
[Unit]
Description=Brick Game 方块游戏机
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/brick-game
ExecStart=/opt/brick-game/brick-game -port 8908 -web-dir ./web
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
```
```bash
sudo systemctl daemon-reload # 让 systemd 读取新服务配置(首次创建/修改后执行一次)
sudo systemctl enable --now brick-game # 设置开机自启并立即启动
sudo systemctl restart brick-game # 重启
sudo systemctl stop brick-game # 停止
sudo systemctl status brick-game # 查看运行状态
journalctl -u brick-game -f # 实时查看日志
```
#### Windows
命令行窗口内直接运行 `brick-game.exe`,关闭窗口即停止;需要强制结束时用 `taskkill /f /im brick-game.exe`。
## Docker 部署
```bash
docker compose up -d # 构建并启动,映射 8908:8908
```
或直接使用镜像:
```bash
docker run -d --name techfunway-brick-game -p 8908:8908 techfunways/brick-game:latest
```
## 飞牛 fnOS 应用
按飞牛应用开放平台规范以「服务型应用」打包(`service_port=8908`,统一网关入口,`fnpack/` 为包模板):
```bash
make fnpack # 产出 release//techfunway-brick-game_{amd64,arm64}.fpk
```
安装:应用中心 → 手动安装 → 选择 .fpk;桌面图标「方块游戏机」点开即玩(端口可在安装向导/运行设置中自定义,默认 8908;从旧 CGI 静态包升级建议先卸载旧版)。
提示:游戏中按 **F** 或点 **FULL** 按钮进入全屏(铺满整屏、隐藏窗口按钮,ESC 退出);手机浏览器打开后选择「添加到主屏幕」,即可全屏独立运行,体验接近原生应用。
## 内置 49 款游戏(对应原机全系列)**方块家族(8)**:方块经典 · 方块挑战B · 方块豪华PENTIX(五格骨牌) · 方块暴雨(垃圾行雨) · 方块冲刺(120秒限时) · 方块盲盒(无预览)
**贪吃蛇(3)**:经典 · 迷宫墙II · 穿墙III **赛车(3)**:疯狂赛车 · 午夜狂飙 · 极限方程式
**打飞机(2)**:星际打飞机 · 蜂群II **坦克(2)**:坦克大战 · 钢甲洪流
**打砖块(2)**:霓虹打砖块 · 狂热II **拼图(3)**:3×3入门 · 4×4经典 · 5×5进阶
**记忆翻牌(2)**:8对 · 10对进阶 **飞碟射击(2)**:经典 · 狂热II **接宝(2)**:达人 · 风暴II
**推箱子(2)**:经典6关 · 进阶6关 **导弹拦截(2)**:经典 · 全面战争II **青蛙过河(2)**:经典 · 激流II
**全新玩法(16)**:
| 游戏 | 玩法 |
|------|------|
| 笨鸟先飞 | 一键穿缝飞行 |
| 2048 | 滑动合并冲击 2048 |
| 消星星 | 同色连消 + 重力塌缩,清屏大奖 |
| 点灯 | 5×5 十字联动熄灯谜题 |
| 扫雷 | 9×9 首点安全、B 键插旗 |
| 月面着陆 | 物理着陆:油料/速度/落点三重挑战 |
| 迷宫寻宝 | DFS 生成迷宫 + 钥匙开出门 + 限时逃脱 |
| 汉诺塔 | 5 环递归谜题,A 取放 B 放回 |
| 记忆旋律 | Simon 式序列记忆,键盘/点触双操作 |
| 速算 | 10 秒心算 + 连对倍率 |
| 颠球 | 无砖块纯颠球连击耐力赛 |
| 贪吃豆 | 迷宫豆子 + 大力丸反杀幽灵 |
| 黑白棋 | 6×6 人机对战(AI 角值贪心) |
| 高山滑雪 | 旗门得分 + 树木避障 |
| 拉霸机 | 3 轮拉霸,三连大奖 |
| 井字棋 | 与 AI 对战五局三胜 |
## 关于"完全复刻"的版权说明
- 落方块、贪吃蛇这类**玩法规则本身不受著作权保护**,任何人都可以实现;
- 受保护的是:**"TETRIS / 俄罗斯方块"商标**、官方的具体美术(Z 型块配色、原版开机画面等)、
音乐录音和足以造成混淆的整体观感(有判例:Tetris Holding v. Xio Interactive 认定"外观与感觉"属商业外观保护);
- 本项目的做法是安全的:**自起名称(方块经典/Brick Game,不含 TETRIS 字样)、
自绘霓虹像素美术、自写芯片音乐音效**,只是玩法相同;
- 如果要公开发布/上架,继续遵守这三条即可:不要在名称和宣传里使用 TETRIS 商标、
不要搬运官方版本的素材和音乐、不要刻意模仿官方版 UI 造型。
## 超越原机的部分
- **画面**:霓虹像素风、预烘焙发光方块精灵(手机也满帧)、扫描线 + CRT 暗角、
行消除爆裂粒子、屏幕震动、闪光、浮动连击文字、动态背景。
- **音效**:WebAudio 实时合成的 8bit 芯片音效(移动/旋转/锁定/消行/爆炸/升级…30 余种),
以及完整双声部(方波主旋律 + 三角波贝斯)芯片音乐:俄罗斯方块 Korobeiniki 主题曲等 5 首。
- **系统**:0–9 速度选择(和原机一样)、每游戏独立最高分存档(localStorage)、
暂停/结算/新纪录提示、后台自动暂停。
- **手感**:DAS 连发移动、踢墙旋转、软降计分、硬降等现代俄罗斯方块手感。
## 操作
| 平台 | 操作 |
|------|------|
| 桌面 | `←→↓` 移动/软降 · `↑`/`Z` 旋转 · `X` 反转 · `空格` 速降/开火 · `Enter` 暂停/确认 · `Esc` 返回菜单 |
| 手机 | 方向键 + A(旋转/确认)+ B(取消);屏幕上左右滑动移动、快速下滑速降、轻点旋转;打砖块可直接拖动挡板 |
| 面板 | SOUND 声音开关 · PAUSE 暂停 · RESET 回菜单 |
手机横屏自动切换为左右布局;适配刘海屏安全区,禁止双击缩放误触。
## 目录结构
```
index.html 入口(掌机外壳 + 虚拟按键)
web/ 前端根目录
├── css/style.css 掌机造型与手机自适应布局
├── js/font.js 3×5 自研像素字体
├── js/audio.js WebAudio 音效合成器 + 芯片音乐序列器
├── js/screen.js 渲染引擎(精灵缓存/粒子/震屏/浮字/HUD)
├── js/input.js 键盘 + 虚拟按键 + 触屏手势
├── js/games/*.js 49 款游戏(统一 registerGame 接口)
└── js/main.js 主控:菜单/速度选择/对局/暂停/结算/最高分
server/ Go 静态服务(端口 8908,含匿名统计/赞赏入口)
fnpack/ 飞牛 fnOS 安装包模板(manifest + 图标 + 向导)
scripts/ 构建/测试脚本
release/<版本>/ 发行产物(压缩包 / .fpk / compose / 截图 / 更新日志)
```
新增游戏只需在 `web/js/games/` 下按相同接口(`id/name/icon/start/update/draw`)写一个文件并
在 `web/index.html` 引入即可自动出现在菜单。
## 开发与发版流程
- 版本号以 `VERSION` 文件为唯一来源(`v` 前缀),打包脚本自动同步到产物文件名与飞牛包 manifest;
- 发版步骤:改 `VERSION` + `CHANGELOG.md` → `make build-all && make fnpack` → 提交收录产物 → 打 `v<版本>` tag;
- 同步到 GitHub 开源仓库:在 Gitea 仓库执行 `bash scripts/publish-github.sh --release "发版:v0.1.0"`——GitHub 是对外纯净镜像(与内部仓库无 git 关联),每次发版只落一条以备注开头的快照提交并打 tag,正文写应用更新内容。
## 许可证
[MIT](LICENSE)