首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 WorkBuddy 做了4个"上班摸鱼不被发现"的小游戏,老板站在身后都看不出 #WorkBuddy#

用 WorkBuddy 做了4个"上班摸鱼不被发现"的小游戏,老板站在身后都看不出 #WorkBuddy#

原创
作者头像
用户12622092
发布2026-07-13 15:28:53
发布2026-07-13 15:28:53
1650
举报

你有没有过这种时刻:工作做完了,但还不到下班时间,想偷偷玩会儿游戏,又怕老板突然出现在身后? 我用 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 就是这个启动器,选游戏即玩


二、设计思路:不是"藏"游戏,而是"长"成工作软件

传统摸鱼游戏的思路是把游戏窗口藏起来——缩小、置底、快速切屏。但这些方法有个致命问题:切换动作本身就很可疑。老板看到你手忙脚乱按快捷键,比看到你在打游戏还可疑。

我的思路完全不同:游戏本身就是工作软件的样子

2.1 Excel 蛇——最隐蔽的那个

打开后你看到的是:

谁能看出来这是贪吃蛇?

代码语言:javascript
复制
┌─────────────────────────────────────────┐
│ [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 一键切换到工作界面:

老板看到的:一个正经的销售数据报表,完全看不出游戏的痕迹

2.2 五种伪装场景一键切换

按数字键 1-5 可以随时切换伪装场景,不用退出游戏:

按键

场景

文件名

数据内容

1

销售报表

Q2季度销售报表 - 最终版

区域/客户/销售额/达成率

2

人事信息

2026年度员工信息汇总表

姓名/部门/工资/工龄

3

项目进度

2026年项目进度跟踪表

项目/负责人/进度/风险

4

库存管理

仓库库存盘点明细表

SKU/商品/库存量/状态

5

预算分析

2026年度部门预算执行分析

部门/预算/实际/执行率

每个场景都有对应的表头、数据类型、列格式和老板键界面——切换后整个表格内容全部刷新,天衣无缝。

2.3 终极伪装:上传你自己的表格

这是最狠的功能——你可以上传自己的 CSV/XLSX 文件,游戏网格直接用你的真实数据渲染。

javascript

代码语言: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 文件。上传后,游戏画面显示的是你公司的真实数据,老板键切换后也是你的真实表格——比任何伪装都可信,因为它根本就是真的

2.4 邮件弹球——伪装成 Outlook 收件箱

打砖块的砖块是一封封邮件,球是选择光标,挡板是底部的筛选工具栏。

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

球在邮件列表里弹射,"清理"邮件 = 打砖块

代码语言:javascript
复制
┌──────────────────────────────────────────┐
│ 📨 收件箱 - Outlook        🔍 搜索邮件... │
├──────────────────────────────────────────┤
│ 文件 | 收件箱 | 已发送 | 草稿 | 垃圾邮件  │
├──┬────────┬───────────────────────────────┤
│📨│📥收件箱 │ 张明  Q2报表审批              │
│📅│  (24)  │ 李华  会议安排通知             │
│👤│📤已发送 │ 王强  CRM升级汇报    ← 砖块   │
│⚙️│📝草稿   │ 赵磊  预算变更通知            │
│  │⭐重要   │ HR   年度体检通知             │
│  │🗑垃圾   │ IT部 VPN维护通知              │
│  │        │                              │
│  │        │         ⬆ 光标(球)            │
│  │        │     ▬▬▬▬▬▬▬▬ ← 筛选栏(挡板)   │
│  │        │ 筛选:全部|未读|重要 已清理:0封 │
└──┴────────┴───────────────────────────────┘

鼠标控制挡板移动,光标自动弹射清理邮件。清理完所有邮件 = 通关。


三、核心技术实现

3.1 老板键机制

每个游戏的核心安全功能。按 ESC 触发:

javascript

代码语言: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 的全屏覆盖层,里面渲染了对应工作软件的完整界面。切换时游戏自动暂停,切回来继续玩。

3.2 标签页标题动态伪装

让浏览器标签栏看起来像真实工作软件:

javascript

代码语言: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。

3.3 Excel UI 1:1 还原

用纯 CSS 复刻 Excel 界面,包括:

  • 标题栏:绿色背景(#217346)+ Excel 图标 + 文件名
  • Ribbon 标签栏:文件/开始/插入/页面布局/数据/审阅/视图
  • 工具栏:剪贴板/字体/对齐/数字/样式分组
  • 公式栏:单元格引用 + fx + 公式输入框
  • 行号列标:数字行号 + A-Z 列字母
  • 状态栏:就绪 + Sheet 标签 + 视图 + 缩放

关键 CSS:

css

代码语言:javascript
复制
.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;
}

3.4 贪吃蛇游戏逻辑

经典的网格碰撞游戏,关键在于把游戏元素伪装成 Excel 操作:

javascript

代码语言: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})`;
}

3.5 2048 的旋转合并算法

2048 的核心难点是四个方向的合并逻辑。我用网格旋转统一处理:

javascript

代码语言: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);
}

3.6 打砖块的碰撞检测

邮件弹球的核心是球与邮件砖块的碰撞检测:

javascript

代码语言: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;
  }
}

四、摸鱼钓鱼——Canvas 动画版

与前三个"伪装办公软件"不同,钓鱼游戏伪装成 VS Code 代码编辑器,用的是 HTML5 Canvas 做全屏动画。

4.1 游戏特色

月夜星空下的钓鱼场景,Canvas 全屏渲染

  • Canvas 渲染:水面波纹、气泡上升、月光倒影、水草摇摆——全用 Canvas API 绘制
  • 钓鱼玩法:点击水面下钩,鱼上钩自动收杆,60 秒计时
  • 连击系统:连续钓鱼触发 x2~x5 倍率
  • 四种鱼:小鱼(10分) / 草鱼(30分) / 锦鲤(50分) / 金鱼(100分带发光效果)
  • 老板键:ESC 切换到 VS Code 界面,带语法高亮的假代码

4.2 假代码编辑器

老板键切出来的不是空白页面,是一个高度还原的 VS Code 界面:

按 ESC 一秒切换,从钓鱼变成写 TypeScript 代码

javascript

代码语言: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>&lt;<span class="type">User</span>&gt; {',
  // ... 42行 TypeScript 代码
];

带行号、语法高亮(关键字蓝色/字符串橙色/注释绿色/类型青色)、标签页(main.js/utils.js/package.json)、底部状态栏。从远处看完全在写代码。


五、制作过程:WorkBuddy 如何帮我做这些

5.1 从想法到成品

整个过程我用 WorkBuddy(AI 工作助手)完成的,核心交互就是描述需求 → AI 生成代码 → 微调

关键 prompt 示例:

代码语言:javascript
复制
做一个伪装成 Excel 的贪吃蛇游戏,要求:
1. 界面完全模拟 Excel(标题栏、Ribbon、公式栏、状态栏)
2. 蛇头是光标箭头,蛇身是选中单元格,食物是黄色高亮
3. ESC 键切换到假 Excel 报表界面
4. 标签页标题动态变化模拟"已保存"状态
5. 支持5种伪装场景(销售/人事/项目/库存/预算)
6. 支持上传 CSV/XLSX 文件用真实数据渲染

5.2 踩坑经验

坑1:SheetJS CDN 加载问题

Excel 蛇需要解析上传的 XLSX 文件,依赖 SheetJS 库。一开始用的 CDN 在国内不稳定,后来换成官方 CDN:

html

代码语言:javascript
复制
<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

代码语言:javascript
复制
tickInterval = Math.max(SPEED_MIN, TICK_BASE - score * 2);
clearInterval(timer);
timer = setInterval(gameTick, tickInterval);

六、使用方法

6.1 直接使用

  1. 把 4 个 HTML 文件下载到同一个文件夹
  2. 双击 stealth-hub.html 打开启动器
  3. 选择想玩的游戏,新标签页打开
  4. 按 Enter 开始,ESC 切换工作界面

6.2 快捷键速查

按键

功能

Enter

开始 / 重新开始

ESC

老板键(切换工作界面)

↑↓←→ / WASD

游戏方向控制

Space

暂停

R

重置

1-5

切换伪装场景(仅 Excel 蛇)

0

切换到上传数据(仅 Excel 蛇)

鼠标移动

控制挡板(仅邮件弹球)

点击水面

下钩(仅摸鱼钓鱼)

6.3 进阶:上传自己的表格

Excel 蛇支持上传 CSV/XLSX 文件:

  1. 打开 stealth-snake.html
  2. 点击工具栏的"📂 打开"按钮,或拖拽文件到窗口
  3. 游戏网格立即用你的真实数据渲染
  4. 按数字键 0 可随时切回上传的数据

七、技术栈

  • HTML5 + CSS3 + 原生 JavaScript:零依赖(除 SheetJS CDN)
  • Canvas API:钓鱼游戏的动画渲染
  • SheetJS (xlsx.js):Excel 文件解析
  • CSS Grid / Flexbox:Excel 界面布局
  • requestAnimationFrame:游戏循环
  • AABB 碰撞检测:打砖块物理引擎
  • 网格旋转算法:2048 四方向合并

八、总结

这套游戏的核心创意不是游戏本身——贪吃蛇、2048、打砖块都是几十年前的老游戏了。创意在于"伪装":把游戏界面做成长得跟工作软件一模一样,让旁人无法分辨。

用 WorkBuddy 做这些游戏的过程也很顺畅——描述清楚需求,AI 帮你生成完整的 HTML/CSS/JS 代码,微调几次就能用。不需要装任何开发环境,不需要 Node.js / npm / Webpack,双击 HTML 文件就能玩。

如果你也想试试 WorkBuddy 做点什么,直接跟它说"帮我做一个 XXX"就行——小游戏、工具、网页都可以。


⚠️ 声明:本游戏仅供娱乐,请勿在工作时间使用。因使用本游戏导致的任何后果,作者概不负责。

标签:#WorkBuddy# #前端# #HTML5# #小游戏# #摸鱼#

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、效果总览
  • 二、设计思路:不是"藏"游戏,而是"长"成工作软件
    • 2.1 Excel 蛇——最隐蔽的那个
    • 2.2 五种伪装场景一键切换
    • 2.3 终极伪装:上传你自己的表格
    • 2.4 邮件弹球——伪装成 Outlook 收件箱
  • 三、核心技术实现
    • 3.1 老板键机制
    • 3.2 标签页标题动态伪装
    • 3.3 Excel UI 1:1 还原
    • 3.4 贪吃蛇游戏逻辑
    • 3.5 2048 的旋转合并算法
    • 3.6 打砖块的碰撞检测
  • 四、摸鱼钓鱼——Canvas 动画版
    • 4.1 游戏特色
    • 4.2 假代码编辑器
  • 五、制作过程:WorkBuddy 如何帮我做这些
    • 5.1 从想法到成品
    • 5.2 踩坑经验
  • 六、使用方法
    • 6.1 直接使用
    • 6.2 快捷键速查
    • 6.3 进阶:上传自己的表格
  • 七、技术栈
  • 八、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档