【发布时间】:2019-04-30 03:33:32
【问题描述】:
假设我们正在制作一个两人纸牌游戏,我们有名为 Game、Player 和 Card 的类。游戏包含指向两个玩家的指针并为玩家提供接口。玩家包括玩家的健康和他们的魔法以及他们的手牌向量。 Card 是一个抽象类。每张牌都需要消耗魔法才能打出,并且可以打出。
问题在于,每张牌在使用时都可以通过多种方式改变游戏状态。例如,我们可以有一张使玩家生命值翻倍的卡片,一张使敌方玩家中毒两回合的卡片,一张摧毁板上所有随从的卡片,一张为已经在棋盘上的每个随从创建副本的卡片,等等. 可能性真的是无穷无尽的。我能看到的唯一解决方案是在每张卡片中都有一个指向游戏的指针,但这似乎相当不雅。
还有其他解决方案吗?
【问题讨论】:
-
为什么每张卡都需要知道游戏状态才能影响它?每张卡片都有属性\方法,游戏对象可以用来改变其状态。
-
如果游戏拥有玩家,玩家拥有卡片,在我看来,卡片可以直接修改游戏变量,也许通过游戏方法。我可能会误解一些东西
-
修改游戏状态不是卡片的责任。在处理女巫卡的情况下,修改自己的状态是游戏的责任。获得它的简单途径是模式策略
-
@auburg: 如果你让
Game通过它的属性应用Card的行为你最终会得到很多意大利面条代码,你必须让每个Card(或者更确切地说是Effect)照顾好自己。
标签: c++ class oop circular-dependency