前言¶
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