You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何架构类万智牌(MtG)的卡牌游戏?含核心机制实现疑问

卡牌游戏机制设计与架构优化问题

核心需求与卡牌效果实现疑问

我希望开发一款类似万智牌(MtG)或《情书》的卡牌游戏,包含大量不同效果的卡牌,以下是简化版示例及对应实现疑问:

  • Guard卡牌:打出后可指定一名其他玩家并将其淘汰,这是最易实现的卡牌;
  • Assasin卡牌:若持有者被Guard锁定为目标,可弃置此牌并淘汰发起攻击的玩家,是否只能通过监听目标选择动作来实现?
  • Handmaiden与Sycophant卡牌:前者使持有者直到下一回合前无法被锁定为目标;后者强制其他玩家必须锁定持有者为目标。目前我设想为玩家添加targetingPriority属性,-1代表不可被锁定,+1代表必须被锁定,但考虑到万智牌中存在flying、reach、trample、protection等大量交织的目标机制,是否有更优方案?
  • Countess卡牌:若持有者同时持有Prince卡牌,则必须打出此牌。该卡牌会限制持有者在特定条件下无法打出其他牌,我最初设想将逻辑放入Prince卡牌,但效果定义属于Countess,为何要让Prince知晓?也考虑过使用playingPriority属性,但需在每次抽牌时更新,是否有更优方案?

当前架构思路的困境

我当前有两种思路,但都存在明显问题:

  • 让卡牌对象监听所有游戏动作/状态变化,为对应玩家生成效果并作为玩家的属性修饰器,但这要求每张卡牌知晓几乎整个游戏逻辑,过于复杂;
  • 将所有代码放入Game对象,因其知晓所有玩家、卡牌与效果,但会导致Game成为包含数千行代码的“上帝对象”,维护难度更高。

诉求

希望找到处理类似卡牌游戏机制的优雅源码示例,更希望能获取解释相关设计思路与优势的文章。

内容的提问来源于stack exchange,提问作者Dmytro

火山引擎 最新活动