READMESource: main@04978325
dsh-card-lan
局域网牌桌(21 点 / 斗地主),DeepSeek Harness 插件。联机模型与 dsh-pet-lan(桌宠联机)一致:UDP 广播自动发现同房间的电脑,房主权威发牌,其他机器入座,浏览器里直接开牌桌。
功能
- 房间发现:UDP 41235 广播,房间名一致才能互相看见(同 dsh-pet-lan)。
- 入座/房主制:任一台机器「创建牌桌」成为房主,其余人从发现列表点「加入」;跨网段时可用 IP:端口手动加入。
- 房间密码:房主可开启,玩家加入和观战都要输密码;密码只留在房主本机,不走网络。
- 邀请复制/粘贴:大厅一键复制「房间名+端口」邀请码(
DSH-CARD-LAN|房间名|端口),朋友粘贴后点「应用」直接保存房间配置,不用手抄、也不用再去设置页点保存。 - 观战:房主可开关,最多 6 人观战,不参与出牌;观战者看到和玩家同样的牌局状态。
- 21 点对局:1–4 人,庄家 17 点停牌,支持要牌/停牌/爆牌/黑杰克/赢输平,局间保留战绩。
- 斗地主对局:3 人、54 张;叫地主、出牌/不要、牌型判断与比较(单/对/三带/顺子/连对/飞机/炸弹/王炸)、地主/农民结算;创建牌桌时选玩法。
- 跑得快对局:3 人、48 张(去 2 和王);持黑桃 3 先出,牌型含三带二/顺子/连对/飞机/炸弹,能管必须管;先出完者胜。
- 掼蛋对局:4 人 2v2、两副牌 108 张;级牌 + 红桃级牌「逢人配」万能牌,牌型含三带二/顺子/连对/钢板/炸弹/同花顺/四大天王;头游→末游按双上/头游三游/头游末游升 3/2/1 级,打 A 过 A 获胜。
- 人机补位:房主可勾选「自动补齐」(人数不足时自动补满 3 人,此时数量下拉禁用),或手动选「机器人数量」不补 / 1 个 / 2 个;机器人会自动叫地主、领出、跟牌/不要;后加入的真人会顶掉机器人,真人优先。
- 炸弹金花对局:2–6 人、每人 3 张、起始筹码 1000/底注 10;闷牌/看牌、跟注/加注/弃牌/比牌,3 轮强制摊牌;牌型 豹子>顺金>金花>顺子>对子>单张,赢家收底池。
- 德州扑克对局:2–6 人、每人 2 张底牌 + 5 张公共牌;按钮轮转、小盲 10/大盲 20、翻前/翻牌/转牌/河牌四轮下注(弃牌/过牌/跟注/加注,短码自动全下)、边池摊牌 7 选 5 比大小,赢家分池。
- 后续计划:日麻(立直麻雀)作为独立大版本开发,待确认赤宝牌/食断/东风战或半庄/机器人陪练等参数。
- 浮层显示设置:透明度(25%–100%)、大小三档、拖动标题栏移动并记住位置、自动变淡(鼠标离开时更不显眼)、
Ctrl+Shift+H一键隐藏/显示。 - 断线容错:动作带重传与去重,房主 1 秒心跳,客人 4 秒没收到状态提示「房主失联」;房主 12 秒没见到某台机器的发现广播就清掉该座位。
- 掉线重连:客人 5 秒收不到房主状态会自动重连回座(记住房主和密码,不写盘);重连失败可点「重新连接」再试;房主关桌会主动通知所有客人回大厅。
- 回合超时:默认 45 秒没人操作自动替他「停牌」(0 可关闭),防止挂机卡局;浮层上有剩余秒数提示。
- 界面:设置页里的「牌桌联机」大厅(分「房间 / 设置」两个页签:创建/加入牌桌和邀请在「房间」,房间名/端口/密码/机器人/浮层显示在「设置」)+ 右下角可最小化的牌桌浮层。
安装
在 DSH 的插件管理里点「添加插件」,填仓库地址:
https://github.com/Fatelikeshit/dsh-card-lan
命令行等价写法:dsh plugin install https://github.com/Fatelikeshit/dsh-card-lan。安装是热加载的:装完刷新一下 DSH 页面,设置里就会出现「牌桌联机」(没出现再重启 DSH)。
本机开发也可以直接填本地目录路径。两端插件版本要一致(当前 0.9.0),局域网里房间名和端口保持一致。
装好后:
- 设置 →「牌桌联机」,房间名两端保持一致(默认
dsh-card),确认 UDP 显示已监听。 - 一台机器点「创建牌桌」(先选玩法:21 点 / 斗地主 / 跑得快),另一台在发现列表里点「加入」(跨网段就填房主的 IP 和端口);想单人玩斗地主/跑得快就在大厅勾上「人机补位」。
- 房主点「开始本局」:21 点轮到你要牌/停牌;斗地主先叫地主再出牌/不要;跑得快持黑桃 3 者先出,能管必须管。
Windows 首次监听会弹防火墙提示,需要允许「专用网络」的 UDP 入站。公司/访客 WiFi 若开了客户端隔离(AP isolation),设备之间互相不可见,需走有线或换网络。
结构
lib/index.js 宿主半边:UDP 发现/入座/动作/状态、房主权威牌局、/api/card-lan 路由
lib/engine.js 21 点规则引擎:牌堆、点数、轮次、庄家、结算(无 IO)
lib/games/doudizhu.js 斗地主规则引擎:牌型/比较、叫地主、出牌、结算、隐私快照(无 IO)
lib/games/paodekuai.js 跑得快规则引擎:48 张、黑桃3先出、能管必须管、结算(无 IO)
client.js 浏览器半边:大厅设置页 + 牌桌浮层(classic script,无需构建)
cordis.patch.yml 插件行
PROTOCOL.md 网络与 HTTP 契约(改协议先改它)
test/ engine 单测 + 双实例集成测试
测试
cd dsh-card-lan
node --test test/
engine.test.mjs:牌堆、A 计点、黑杰克、庄家补牌、赢输平。integration.mjs:两个createCardLan实例在回环 UDP 上跑通 发现 → 入座 → 开局 → 出牌 → 结算 → 离座,并验证 HTTP 路由与回环守卫。
规则说明(MVP)
- 一副牌,不补牌;庄家 17 点(含软 17)停牌。
- 无下注与筹码,只记每局 win/lose/push。
- 黑杰克(两张 21)大于普通 21;双方黑杰克为平局。
- 同一房间只该有一张牌桌(房主制);房间名/端口一改即视为换网络,牌桌与发现列表清空。
协议摘要
- UDP
hello(广播,1.5s)→ 发现;join/action/leave(单播到房主);state(房主单播,变化即发 + 1s 心跳)。 - HTTP(仅回环):
GET /api/card-lan取 view;POST /api/card-lan/config改配置;POST /api/card-lan/action执行open/close/join/leave/start/hit/stand。 - 完整字段与校验规则见 PROTOCOL.md。
No comments yet. Be the first to write one.