CardGame 是一款基于 Unity 引擎开发的三人斗地主联网卡牌游戏,支持 PC 端局域网/广域网多人实时对战。
【核心玩法】 经典斗地主规则完整实现:叫地主竞标 → 出牌对抗 → 胜利判定。支持单张、对子、三带一、三带二、顺子、连对、飞机、炸弹、王炸等 11 种牌型识别,以及炸弹翻倍、春天等特殊判定。底牌地主专属,出牌权按逆时针流转,连续两家过牌自动清桌并重开出牌权。
【联网对战】 支持三种模式:① Host-Client 模式(一人主机带本地玩家 + 两人远程加入);② Dedicated Server 独立服务端模式(无本地玩家,纯服务器);③ 局域网/广域网直连(支持端口转发与云服务器部署)。命令行参数一键切换角色与地址,一套构建包适配所有场景。
【体验设计】 手牌自动排序、出牌区高亮对比、牌背遮挡对手手牌(防偷看)。自适应卡牌布局。多轮对局无缝衔接,结算后一键返回大厅无需重启。
【架构】 服务端 MVP + 客户端事件驱动混合架构。服务端 ServerPresenter 协调 ServerGameModel 与 IServerRpcSender;客户端 GamePresenter 为单例协调器,NetworkService 通过 C# event 广播 12 种网络事件,View 层直接订阅。Service 层全部接口注入(INetworkService/ISoundService/IDeckService),Logic 层为纯静态函数(CardPatternDetector/CardRuleValidator/PassSequenceCoordinator),与 Unity 生命周期解耦,可独立单元测试。
【网络】 基于 Unity NGO 实现服务端权威架构。所有 ServerRpc 均经 ValidateSender 身份校验(clientId→playerId 映射),防止伪造请求。发牌采用定向分发(TargetClientIds),每个客户端仅收自己手牌,对手以牌背占位,杜绝全量数据泄露。
【牌型算法】 11 种牌型识别,规则参数(顺子长度 5-12、连对最少 3 组、飞机最少 2 组、特殊牌权重阈值等)由 CardGameRuleSO(ScriptableObject)驱动,策划可在 Inspector 中无代码调整,或通过 Excel → Python 脚本 → JSON → SO 的配置流水线批量修改。
【部署】 NetworkTransportRuntimeConfig + 命令行参数覆盖(-role/-port/-server/-listen),支持 Headless 独立服务端。
Github仓库: https://github.com/primer496/CardGame