你有没有过这种时刻:工作做完了,但还不到下班时间,想偷偷玩会儿游戏,又怕老板突然出现在身后? 我用 WorkBuddy 做了一套伪装系摸鱼游戏工具箱——4个 HTML 文件,双击即玩,老板站在身后都看不出你在打游戏。
摸鱼工具箱包含 1 个启动器 + 3 个游戏,全部伪装成办公软件界面:
游戏 | 伪装身份 | 玩法 | 隐蔽等级 |
|---|---|---|---|
Excel 蛇 | Q2季度销售报表.xlsx | 贪吃蛇 | ★★★★★ |
Excel 2048 | 财务数据合并分析工具.xlsx | 数字合并 | ★★★★☆ |
邮件弹球 | 收件箱 - Outlook | 打砖块 | ★★★★☆ |
摸鱼钓鱼 | VS Code 代码编辑器 | 钓鱼计分 | ★★★☆☆ |
核心安全机制:每个游戏都按 ESC 键瞬间切换到真实的工作界面——Excel 切到带数据的报表,Outlook 切到真实的收件箱列表,钓鱼游戏切到 VS Code 代码编辑器。
浏览器标签页标题也会动态变化,比如在"Q2季度销售报表 - 最终版.xlsx - Excel"和"已保存"状态之间切换,从任务栏看完全就是在用 Excel。

打开 stealth-hub.html 就是这个启动器,选游戏即玩
传统摸鱼游戏的思路是把游戏窗口藏起来——缩小、置底、快速切屏。但这些方法有个致命问题:切换动作本身就很可疑。老板看到你手忙脚乱按快捷键,比看到你在打游戏还可疑。
我的思路完全不同:游戏本身就是工作软件的样子。
打开后你看到的是:

谁能看出来这是贪吃蛇?
┌─────────────────────────────────────────┐
│ [X] Q2季度销售报表 - 最终版.xlsx - Excel │ ← 标题栏(绿色)
├─────────────────────────────────────────┤
│ 文件 | 开始 | 插入 | 页面布局 | 数据... │ ← Ribbon 标签
├─────────────────────────────────────────┤
│ 📂打开 │ 📋 │ ✂️ │ 📄 │ B I U │ 📊📈📉│ ← 工具栏
├─────────────────────────────────────────┤
│ A1 │ fx │ =SUM(A1:A3) │ ← 公式栏
├──┬──────────────────────────────────────┤
│ 1 │序号│区域│客户名称│4月销售│5月销售... │ ← 表头行
│ 2 │ 1 │华北区│万达集团│¥12,580│¥15,600│ │
│ 3 │ 2 │华东区│龙湖地产│¥8,340 │¥9,200 │ │
│ 4 │ 3 │华南区│保利地产│¥6,720 │¥7,650 │ │ ← 这就是游戏区
│ │ │ │ │ │ │ │
│25 │ 24 │华中区│中南建设│¥3,200 │¥4,100 │ │
├──┴──────────────────────────────────────┤
│ 就绪 总和: 0 Sheet1 Sheet2 Sheet3 │ ← 状态栏
└─────────────────────────────────────────┘蛇头是 Excel 光标箭头(▶),蛇身是绿色单元格,食物是黄色单元格显示金额数据。你用方向键控制"光标"在表格里移动,吃掉"数据点"——从旁边看就是在做数据分析。

蛇在"报表数据"里穿行,吃掉"销售额"
按 ESC 一键切换到工作界面:

老板看到的:一个正经的销售数据报表,完全看不出游戏的痕迹
按数字键 1-5 可以随时切换伪装场景,不用退出游戏:
按键 | 场景 | 文件名 | 数据内容 |
|---|---|---|---|
1 | 销售报表 | Q2季度销售报表 - 最终版 | 区域/客户/销售额/达成率 |
2 | 人事信息 | 2026年度员工信息汇总表 | 姓名/部门/工资/工龄 |
3 | 项目进度 | 2026年项目进度跟踪表 | 项目/负责人/进度/风险 |
4 | 库存管理 | 仓库库存盘点明细表 | SKU/商品/库存量/状态 |
5 | 预算分析 | 2026年度部门预算执行分析 | 部门/预算/实际/执行率 |
每个场景都有对应的表头、数据类型、列格式和老板键界面——切换后整个表格内容全部刷新,天衣无缝。
这是最狠的功能——你可以上传自己的 CSV/XLSX 文件,游戏网格直接用你的真实数据渲染。
javascript
function handleFileUpload(file) {
if (ext === 'xlsx' || ext === 'xls') {
const reader = new FileReader();
reader.onload = (e) => {
const data = new Uint8Array(e.target.result);
const workbook = XLSX.read(data, { type: 'array' });
const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
const parsed = XLSX.utils.sheet_to_json(firstSheet, { header: 1, defval: '' });
processUploadedData(parsed, name);
};
reader.readAsArrayBuffer(file);
}
}用了 SheetJS 库解析 Excel 文件。上传后,游戏画面显示的是你公司的真实数据,老板键切换后也是你的真实表格——比任何伪装都可信,因为它根本就是真的。
打砖块的砖块是一封封邮件,球是选择光标,挡板是底部的筛选工具栏。

打开就是 Outlook 收件箱,谁能想到这是打砖块?

球在邮件列表里弹射,"清理"邮件 = 打砖块
┌──────────────────────────────────────────┐
│ 📨 收件箱 - Outlook 🔍 搜索邮件... │
├──────────────────────────────────────────┤
│ 文件 | 收件箱 | 已发送 | 草稿 | 垃圾邮件 │
├──┬────────┬───────────────────────────────┤
│📨│📥收件箱 │ 张明 Q2报表审批 │
│📅│ (24) │ 李华 会议安排通知 │
│👤│📤已发送 │ 王强 CRM升级汇报 ← 砖块 │
│⚙️│📝草稿 │ 赵磊 预算变更通知 │
│ │⭐重要 │ HR 年度体检通知 │
│ │🗑垃圾 │ IT部 VPN维护通知 │
│ │ │ │
│ │ │ ⬆ 光标(球) │
│ │ │ ▬▬▬▬▬▬▬▬ ← 筛选栏(挡板) │
│ │ │ 筛选:全部|未读|重要 已清理:0封 │
└──┴────────┴───────────────────────────────┘鼠标控制挡板移动,光标自动弹射清理邮件。清理完所有邮件 = 通关。
每个游戏的核心安全功能。按 ESC 触发:
javascript
function toggleBossMode() {
bossMode = !bossMode;
document.getElementById('bossOverlay').classList.toggle('show', bossMode);
if (bossMode && gameRunning && !gamePaused) gamePaused = true;
if (!bossMode && gameRunning && gamePaused) gamePaused = false;
}bossOverlay 是一个 position: fixed; z-index: 9999 的全屏覆盖层,里面渲染了对应工作软件的完整界面。切换时游戏自动暂停,切回来继续玩。
让浏览器标签栏看起来像真实工作软件:
javascript
setInterval(() => {
if (!bossMode) {
const t = getActiveTheme();
document.title = t.fileName + (Math.random() > 0.5
? '.xlsx - Excel'
: '.xlsx - Excel - 已保存');
} else {
document.title = getActiveTheme().fileName + '.xlsx - Excel - 已保存';
}
}, 8000);每 8 秒在"Excel"和"已保存"状态间随机切换,模拟用户在编辑表格时的自动保存行为。任务栏看完全是 Excel。
用纯 CSS 复刻 Excel 界面,包括:
关键 CSS:
css
.title-bar {
background: #217346; /* Excel 绿 */
color: white; height: 32px;
display: flex; align-items: center; padding: 0 12px;
}
.cell { /* 每个单元格 */
width: 60px; height: 22px;
border-right: 1px solid #e8e8e8;
border-bottom: 1px solid #e8e8e8;
font-size: 10px; text-align: right; padding-right: 4px;
}
.cell.snake-head { /* 蛇头 = 光标 */
background: #0078d4 !important; /* 选中蓝 */
}
.cell.snake-body { /* 蛇身 = 选中区域 */
background: #e8f5e9 !important;
color: #2e7d32 !important;
}经典的网格碰撞游戏,关键在于把游戏元素伪装成 Excel 操作:
javascript
function renderGrid() {
// 先恢复所有单元格为原始数据
for (let r = 0; r < ROWS; r++) {
for (let c = 0; c < COLS; c++) {
cells[r][c].className = 'cell';
cells[r][c].textContent = cellData[r][c];
}
}
// 渲染蛇头(伪装成光标箭头)
const head = snake[0];
cells[head.y][head.x].className = 'cell cursor-head';
cells[head.y][head.x].innerHTML = '<svg>...</svg>'; // 光标SVG
// 渲染蛇身(伪装成选中区域)
snake.slice(1).forEach(seg => {
cells[seg.y][seg.x].className = 'cell snake-body';
cells[seg.y][seg.x].textContent = '■';
});
// 渲染食物(伪装成高亮数据)
cells[food.y][food.x].className = 'cell food';
cells[food.y][food.x].textContent = '¥99,999';
// 公式栏显示"公式"(实际是蛇的位置)
document.getElementById('cellRef').textContent = COL_LABELS[head.x] + (head.y + 1);
document.getElementById('formulaText').textContent =
`=SUM(${COL_LABELS[head.x]}1:${COL_LABELS[head.x]}${snake.length})`;
}2048 的核心难点是四个方向的合并逻辑。我用网格旋转统一处理:
javascript
function move(direction) {
// 旋转网格,使移动方向统一变成"向左"
let rotated = rotateGrid(grid, direction);
// 合并每一行(向左合并)
for (let r = 0; r < SIZE; r++) {
const row = rotated[r].filter(v => v !== 0); // 去零
const newRow = [];
let i = 0;
while (i < row.length) {
if (i + 1 < row.length && row[i] === row[i + 1]) {
newRow.push(row[i] * 2); // 合并
i += 2;
} else {
newRow.push(row[i]);
i++;
}
}
while (newRow.length < SIZE) newRow.push(0);
rotated[r] = newRow;
}
// 反旋转回来
grid = unrotateGrid(rotated, direction);
}邮件弹球的核心是球与邮件砖块的碰撞检测:
javascript
for (let i = 0; i < bricks.length; i++) {
if (!bricks[i].alive) continue;
const b = bricks[i];
// AABB 碰撞检测
if (ballX + BALL_R > b.x && ballX - BALL_R < b.x + BRICK_W &&
ballY + BALL_R > b.y && ballY - BALL_R < b.y + BRICK_H) {
bricks[i].alive = false;
brickElements[i].classList.add('destroyed'); // 播放消失动画
score++;
// 判断碰撞方向,决定反弹方向
const overlapLeft = ballX + BALL_R - b.x;
const overlapRight = b.x + BRICK_W - (ballX - BALL_R);
const overlapTop = ballY + BALL_R - b.y;
const overlapBottom = b.y + BRICK_H - (ballY - BALL_R);
if (Math.min(overlapLeft, overlapRight) < Math.min(overlapTop, overlapBottom))
ballDX = -ballDX; // 水平反弹
else
ballDY = -ballDY; // 垂直反弹
break;
}
}与前三个"伪装办公软件"不同,钓鱼游戏伪装成 VS Code 代码编辑器,用的是 HTML5 Canvas 做全屏动画。

月夜星空下的钓鱼场景,Canvas 全屏渲染
老板键切出来的不是空白页面,是一个高度还原的 VS Code 界面:

按 ESC 一秒切换,从钓鱼变成写 TypeScript 代码
javascript
const FAKE_CODE_LINES = [
'<span class="keyword">import</span> { <span class="type">Database</span> } <span class="keyword">from</span> <span class="string">"./database"</span>;',
'<span class="keyword">export class</span> <span class="type">UserService</span> {',
' <span class="keyword">private</span> db: <span class="type">Database</span>;',
' <span class="comment">/** 获取用户信息 */</span>',
' <span class="keyword">async</span> <span class="function">getUser</span>(id: <span class="type">string</span>): <span class="type">Promise</span><<span class="type">User</span>> {',
// ... 42行 TypeScript 代码
];带行号、语法高亮(关键字蓝色/字符串橙色/注释绿色/类型青色)、标签页(main.js/utils.js/package.json)、底部状态栏。从远处看完全在写代码。
整个过程我用 WorkBuddy(AI 工作助手)完成的,核心交互就是描述需求 → AI 生成代码 → 微调。
关键 prompt 示例:
做一个伪装成 Excel 的贪吃蛇游戏,要求:
1. 界面完全模拟 Excel(标题栏、Ribbon、公式栏、状态栏)
2. 蛇头是光标箭头,蛇身是选中单元格,食物是黄色高亮
3. ESC 键切换到假 Excel 报表界面
4. 标签页标题动态变化模拟"已保存"状态
5. 支持5种伪装场景(销售/人事/项目/库存/预算)
6. 支持上传 CSV/XLSX 文件用真实数据渲染坑1:SheetJS CDN 加载问题
Excel 蛇需要解析上传的 XLSX 文件,依赖 SheetJS 库。一开始用的 CDN 在国内不稳定,后来换成官方 CDN:
html
<script src="https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js"></script>坑2:Boss Overlay 的 z-index
老板键覆盖层必须确保在所有游戏元素之上,但不能挡住浏览器原生交互。用 z-index: 9999 + position: fixed 解决。
坑3:标签页标题闪烁
动态修改 document.title 时如果频率太高会闪烁。最终选择 8 秒间隔,模拟用户编辑→保存的自然节奏。
坑4:贪吃蛇速度递增
吃到食物后速度加快,用 Math.max(SPEED_MIN, TICK_BASE - score * 2) 控制下限,避免太快无法操作:
javascript
tickInterval = Math.max(SPEED_MIN, TICK_BASE - score * 2);
clearInterval(timer);
timer = setInterval(gameTick, tickInterval);stealth-hub.html 打开启动器按键 | 功能 |
|---|---|
Enter | 开始 / 重新开始 |
ESC | 老板键(切换工作界面) |
↑↓←→ / WASD | 游戏方向控制 |
Space | 暂停 |
R | 重置 |
1-5 | 切换伪装场景(仅 Excel 蛇) |
0 | 切换到上传数据(仅 Excel 蛇) |
鼠标移动 | 控制挡板(仅邮件弹球) |
点击水面 | 下钩(仅摸鱼钓鱼) |
Excel 蛇支持上传 CSV/XLSX 文件:
stealth-snake.html这套游戏的核心创意不是游戏本身——贪吃蛇、2048、打砖块都是几十年前的老游戏了。创意在于"伪装":把游戏界面做成长得跟工作软件一模一样,让旁人无法分辨。
用 WorkBuddy 做这些游戏的过程也很顺畅——描述清楚需求,AI 帮你生成完整的 HTML/CSS/JS 代码,微调几次就能用。不需要装任何开发环境,不需要 Node.js / npm / Webpack,双击 HTML 文件就能玩。
如果你也想试试 WorkBuddy 做点什么,直接跟它说"帮我做一个 XXX"就行——小游戏、工具、网页都可以。
⚠️ 声明:本游戏仅供娱乐,请勿在工作时间使用。因使用本游戏导致的任何后果,作者概不负责。
标签:#WorkBuddy# #前端# #HTML5# #小游戏# #摸鱼#
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。