插件化架构模块
07/032 浏览综合
本项目建议采用插件化设计,把规则、主题、美术、问题卡、多人同步拆开。这样可以先做最小可玩版本,再逐步启用八卦、黑白视觉和多人扩展。
模块分层
text复制
textGameCore ├─ RuleSetModule │ ├─ RuleSet2P │ ├─ RuleSet3P │ └─ RuleSet4P ├─ TileModule ├─ QuestionCardModule ├─ BaguaThemeModule ├─ VisualThemeModule ├─ TileFacePlugin ├─ MultiplayerModule ├─ PersistenceModule └─ AIModule
GameCore
负责游戏主循环和状态流转。
职责:
- 初始化游戏。
- 管理当前模式。
- 调用规则模块。
- 调用问题卡模块。
- 管理阶段:准备、发牌、提问、推测、结算。
不负责:
- 具体 UI 样式。
- 具体八卦文案。
- 网络传输细节。
RuleSetModule
按人数拆分规则。
RuleSet2P
- 每人 5 张。
- 无中央目标。
- 推测对象是对手手牌。
- 普通问题只由对手回答。
- 共享问题双方都回答。
RuleSet3P
- 每人 5 张。
- 中央 5 张。
- 推测对象是中央牌。
- 所有问题都由全体玩家回答。
- 推测失败者退出竞争。
RuleSet4P
- 每人 4 张。
- 中央 4 张。
- 禁用四人不适用问题卡。
- 所有问题都由全体玩家回答。
- 推测失败者退出竞争。
TileModule
负责数字板块。
职责:
- 创建 20 张板块。
- 洗牌。
- 排序。
- 比较序列是否一致。
- 计算位置、颜色、奇偶、求和等基础信息。
建议数据:
lua复制
luaTile = { id = "W6", number = 6, color = "white", polarity = "yang" }
QuestionCardModule
负责问题卡。
职责:
- 加载 21 张问题卡表。
- 根据模式过滤卡牌。
- 维护问题牌堆、公开区、弃牌堆。
- 根据卡牌类型计算回答。
关键接口建议:
lua复制
luaQuestionCardModule.GetAvailableCards(mode) QuestionCardModule.DrawOpenCards(count) QuestionCardModule.ResolveAnswer(card, hand, selectedParam) QuestionCardModule.IsDisabledInMode(card, mode)
BaguaThemeModule
负责八卦身份。
职责:
- 根据数字返回卦名、符号、五行、方位。
- 给问题卡生成八卦化标题。
- 给数字板块生成显示名称。
它不参与胜负判定。
VisualThemeModule
负责视觉主题。
可拆成多个主题:
text复制
textClassicColorTheme 红蓝实体桌游风 YinYangCartoonTheme 黑白阴阳卡通风 InkMinimalTheme 极简水墨风
当前推荐:YinYangCartoonTheme。
TileFacePlugin
负责单张数字板块的牌面布局。
当前推荐插件:NoTextBlackWhiteTileFace。
职责:
- 让牌面只显示大数字、卦象、卦名。
- 通过白底黑字 / 黑底白字区分白牌和黑牌。
- 禁止在牌面直接写“阳面 / 阴面 / 阳爻 / 阴爻”。
- 保证同数字的白牌与黑牌卦象一致,只改变底色、线条和纹样。
建议配置:
lua复制
luaTileFacePlugin = { name = "NoTextBlackWhiteTileFace", showPolarityText = false, showNumber = true, showTrigram = true, showTrigramName = true, showElement = false, showDirection = false, }
详见:07-无文字黑白牌面插件模块.md。
MultiplayerModule
负责多人通信。
职责:
- 创建房间。
- 加入房间。
- 玩家准备。
- 发送动作命令。
- 接收完整快照。
- 接收增量事件。
- 重连恢复。
原则:客户端只提交动作,不提交最终状态。
PersistenceModule
负责持久化。
职责:
- 保存玩家资料。
- 保存房间临时状态。
- 保存排行榜整数分数。
- 处理断线 flush。
- 防止初始化覆盖云端数据。
AIModule
后续可选模块。
职责:
- 单人练习。
- AI 对手。
- 推理提示。
- 自动记录可能性。
建议最后实现,不要在第一版加入。
插件启用配置建议
lua复制
luaGameConfig = { rules = "standard", theme = "bagua", visual = "yinyang_cartoon", tileFace = "no_text_black_white", multiplayer = true, persistence = true, advancedBaguaQuestions = false, }
最小可玩组合
第一版推荐启用:
text复制
textGameCore RuleSet2P TileModule QuestionCardModule BaguaThemeModule YinYangCartoonTheme NoTextBlackWhiteTileFace
暂缓:
text复制
textRuleSet3P / RuleSet4P MultiplayerModule PersistenceModule AIModule AdvancedBaguaQuestions
设计收益
插件化之后可以做到:
- 保留经典红蓝版本。
- 一键切换黑白阴阳版本。
- 二人规则和三四人规则互不干扰。
- 八卦主题不污染核心数学逻辑。
- 多人同步可单独测试。
- 问题卡可独立扩展。


