douglarek/dsh-3d-pinball:在 DeepSeek Harness 侧边栏里放一台 3D 弹球台

前言

DSH 的界面是宿主加插件拼出来的:左侧是插件、任务、统计等面板,右侧是会话。这可能是长时间写代码、跑任务时的默认视野。当你需要短暂离开当前会话去想别的事情,或者单纯想在等构建的时候杀两分钟时间,给界面加一个能玩的小游戏是个很自然的念头,但这通常意味着单独开一个窗口或切到一个网页。下面介绍的插件把这个游戏直接放进了 Harness 的侧边栏。

douglarek/dsh-3d-pinball 是一个 Full Tilt! 风格的 3D 弹球台,作为 DeepSeek Harness 侧边栏面板插件运行,由 douglarek 维护。它解决的是「在 Harness 界面内提供一个不需要离开当前上下文的休闲入口」这个问题,不涉及任何外部美术资源,也没有构建步骤。

这是什么

一个弹球桌小游戏。侧边栏新增一个球台图标入口,点开后中间栏变成完整可玩的弹球台,包含发射道、顶部轨道、保险杠、弹射器、掉落靶和双挡板,带记分、倍数和音效。画面全部由 Canvas 2D 现场绘制,没有独立窗口、没有外部素材加载。

这是一个原创实现,玩法与视觉致敬经典桌面弹球;不包含、也不分发任何原版游戏素材,与 Microsoft / Cinematronics / Maxis 无关联。

核心功能

插件同时注册两个入口:侧边栏的球台图标,和中间栏的全局面板(main 面板键 pinball),后者与 Plugins、Tasks、Statistics 同级。

物理和玩法部分支持重力、线段与圆形碰撞、移动挡板的角速度传递、单向闸门、防卡球保护。桌面配置为 3 个弹射器、2 个保险杠、3 个掉落靶(打满一组倍数 +1,最高 ×5),有蓄力发射、掉球判定、3 球一局和最高分记录。音效由 WebAudio 合成,可静音;面板切换后对局成绩保留。

操作支持键盘和指针两种:左右方向键控制左右挡板,空格蓄力发射;也可以点按画布左半边或右半边。准备状态下点按画布可蓄力并发射。语言跟随 Harness 的设置中英双语,容器和控件只使用宿主的 --dsw-alias-* 主题变量。

安装与启用

在 Harness 的 Plugins 页面选择从 GitHub 安装,填入:

github:douglarek/dsh-3d-pinball

或使用随 Harness 分发的 CLI:

dsh plugin --profile <profile> install github:douglarek/dsh-3d-pinball

安装后侧边栏出现球台图标,点击即可开局。卸载在 Plugins 页面移除该 bundle。

操作方式

操作 按键
左挡板 ← / Z
右挡板 → / /
蓄力发射 按住 Space,松开发射
暂停 / 继续 P
静音 M
结束后重开 Enter

典型实现与兼容性

插件的股票很小,源码结构也清楚,适合想读一个完整 DSH 插件样例的人:

  • index.js — Host 半侧,无服务注册,是纯 UI 插件。
  • client.js — 浏览器半侧:物理引擎、Canvas 渲染、React 面板、Slot 注册(main#pinball 与 sidebar.panellist#pinball)。
  • locale/{en,zh}.json — 插件显示元数据;面板文案在 client.js 内通过 ctx.locale.register 注册。
  • icon.svg — 插件列表图标。

面板与侧边栏图标通过 ctx.slots.inject 和 ctx.slots.register 注册,样式随组件卸载移除,键盘监听在 useEffect 清理时移除。

兼容性上,插件依赖 Harness 的槽位契约 main 与 sidebar.panellist,以及 layout 发布的窗口 chrome 变量。在较早版本上如果这两个槽位不存在,插件不会渲染,也不会报错影响其他面板。

macOS 上还有一层窗口按钮避让处理:面板标题与工具栏在同一个 header 中,按 Harness 的窗口 chrome 契约留白,仅在 html[data-platform='darwin'] 下生效。padding-top 叠加 --dsh-frame-top-clearance(48px,窗口顶部条带),padding-left 叠加 --dsh-frame-leading-clearance(侧栏收起时 160px,原生全屏 84px),并标记 data-window-drag 使空白区域可拖动窗口。浏览器中打开时这两个变量不存在,留白为 0,布局不受影响。

适用场景与注意

适合想在 Harness 界面里加一个小玩意儿的开发者,也适合作为读 DSH 插件结构的一个样例:它同时演示了宿主侧注入、浏览器侧渲染、槽位注册、主题变量、locale 注册和窗口 chrome 契约。

需要注意的是,插件以当前 DSH 进程的权限运行,安装前应检查仓库源码与许可证。它被归在趣味换装分类,不影响你其他插件的运行,但也不要指望有任何生产级保障。许可证为 MIT。

小结

这个插件做的事很单纯:在侧边栏放一个能用的弹球台,点开即玩。对 DSH 生态来说,它展示的是插件机制之外的一个方向——宿主的界面也可以承载一点不严肃的功能。

插件目录页:https://www.skillhub.cn/plugins/douglarek/dsh-3d-pinball

GitHub:https://github.com/douglarek/dsh-3d-pinball

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜