未馋清欢の小窝
首页项目归档照片墙音乐灵境说说杂谈友链🎮 游戏关于
封面

博客“游戏大厅”搭建与同步

写作时间:2026-09-21 16:38:53
# 游戏
# 博客
# 经历

我的博客“游戏大厅”搭建与同步全记录

我打算在自己的博客里加一个“游戏大厅”,经过一番折腾,最终把整个流程跑通了。我把这整个从无到有的过程,以及中间踩过的坑、救火的经验,完完整整地记下来。

‍

📂 一、 最终确立的项目文件结构

所有游戏相关的文件,都在我的 my-blog-manager 项目里:

my-blog-manager/ 
├── app/
│   └── games/
│       ├── page.tsx         (游戏页面的服务端骨架,定义游戏列表)
│       └── GameHub.tsx      (游戏大厅的客户端组件,处理大厅与全屏逻辑)
├── components/
│   ├── Navbar.tsx           (导航栏,我在这里加了“游戏”按钮)
│   ├── toolbox/
│   │   └── SnakeGame.tsx    (贪吃蛇,原本在这里,后引入游戏大厅)
│   └── games/               (新建的专门存放游戏的文件夹)
│       └── Minesweeper.tsx  (全新编写的扫雷游戏)

‍

🛠️ 二、 详细操作步骤

‍

第一步:修改导航栏,增加游戏入口
在本地
my-blog-manager/components/Navbar.tsx 里,找到 navLinks 数组,在“友链”和“关于”之间加入了

{ name: '🎮 游戏', href: '/games' }

因为我这里的手机端有旋转圆盘,它会自动识别并加入这个按钮。

‍

第二步:搭建游戏大厅框架
我新建了 my-blog-manager/app/games/page.tsx**(服务端组件,负责定义** gameList**)和** my-blog-manager/app/games/GameHub.tsx**(客户端组件)**

在 GameHub 里,我设置了当点击卡片时,锁死页面滚动,隐藏大厅标题,留出一个居中盒子展示游戏,并提供一个“返回大厅”的按钮。

‍

第三步:引入贪吃蛇到游戏大厅
我的贪吃蛇(components/toolbox/SnakeGame.tsx)最初是在悬浮工具箱里写的,适应窄小的
w-64 尺寸。为了能在游戏大厅用,我把最外层样式改成了 w-full aspect-square**,并给它增加了** isFullscreen 属性。

在 isFullscreen={true} 时

我加入了手机端触摸滑动,并在底部添加了虚拟十字方向键。最后在 GameHub.tsx 里用

 case 'snake': return <SnakeGame isFullscreen={true} />;

把它引入进来。

‍

第四步:编写扫雷游戏
我新建了 my-blog-manager/components/games/Minesweeper.tsx。为了防止“首次点击秒通关”,我用同步函数生成雷区,避开 React 异步状态陷阱;为了避免中高级在大屏上溢出和手机端缩得太小,我决定只保留初级(9x9,10颗雷)。电脑端我用左键挖、右键插旗;手机端则加了一个“挖雷 / 插旗”的模式切换按钮。UI 则复刻了经典 Win7 的灰色 3D 边框。

‍

第五步:控制台代码手动落地到本地 XHBlogs(极其关键)
因为我的控制台(my-blog-manager)和本地仓库(XHBlogs)有同步白名单限制,我坚决不能盲目点“同步本地”,必须手动搬运:

  1. 可以直接粘贴的文件:游戏本身对应的新建文件、文件夹,比如 components/games 目录、app/games/GameHub.tsx 和 Minesweeper.tsx 等。我在本地 XHBlogs 建好对应文件夹,全选复制粘贴进去。
  2. 绝对不能直接粘贴的系统文件:比如 Navbar.tsx,因为控制台版包含了窗口控制和后台同步逻辑,而本地版是网页展示逻辑,直接覆盖会让本地崩溃。我必须打开两个文件对比,在本地 XHBlogs 的 Navbar.tsx 里,只手动敲入那行新增的
 { name: '🎮 游戏', href: '/games' } 代码。

第六步:本地构建与推送
在本地 XHBlogs 对齐完代码后,我在终端跑 npm run build,看到 ✓ Compiled successfully 且无红字后,执行 git add .、git commit、git push,等待 Vercel 变绿。

‍

🚑 三、 终极救火指南(如果 Vercel 报错且本地没有备份)

有时候如果我大意了,直接把控制台不兼容的代码粘贴到本地,直接 push 后 Vercel 报错,而本地正确的代码又被覆盖丢了,这时只能靠 Git 救场(前提是之前的代码已经提交过):

‍

方案一:单文件精准恢复(我最推荐)
如果我搞砸了 Navbar.tsx 文件,我在终端输入 git log --oneline,找到最近一次正常的提交哈希值(比如 a1b2c3d),然后执行 git checkout a1b2c3d -- components/Navbar.tsx。此时本地文件瞬间回到那个版本,我再手工把“游戏”那行代码一行一行敲进去。

‍

方案二:全项目时光机
如果我搞砸了多个文件,直接用 git log --oneline 找到正常的那次提交,执行 git reset --hard f4e3d2c。本地项目整体就回到了完美的历史时刻。注意这操作会丢弃所有未提交的修改,用的时候要谨慎。

‍

方案三:GitHub 网页端恢复(最适合新手)
我去 GitHub 仓库网页,找到被弄坏的文件,点右上角的 History。找到上一条正常记录,把代码复制出来,回本地全删粘贴,再把“游戏”那行手动敲进去,重新打包推送。

‍

⚠️ 四、 我总结的铁律

  1. 新增文件必须在本地 XHBlogs 手动建好,绝不能指望控制台的“同步本地”能自动识别。
  2. “同步本地”按钮只适用于修改白名单里已有的文件,每次点击前务必确认本地没有新代码。
  3. 本地 Navbar.tsx 的代码是前端网页,控制台 Navbar.tsx 是后台系统,这两个文件永远只互相复制代码片段,绝不整体覆盖。
  4. 只要管好本地 XHBlogs 这个源头,代码文件及时 commit,Vercel 就全绿!

‍

avatar

未馋清欢

不善言辞 开心就好 Calm Huan

RECOMMENDED

个人编程探索

2026-03-24 07:00:01

嵌入视频

2026-09-19 22:05:14

博客系统的架构与数据流转

2026-09-20 19:17:56

Table of Contents