【发布时间】:2014-11-06 17:10:36
【问题描述】:
我的一门课程有问题。它有许多布尔值,并且所述类中的函数必须根据这些值处理许多不同的路径。所有这些路径都使代码非常臃肿且难以阅读。我想知道是否有一种设计模式或一些原则规则我可以遵循以使代码运行相同但更易于理解和阅读。
更具体地说,该类称为 Actor。这是我正在帮助的视频游戏。 Actor 类管理游戏中人形机器人的手。双手在某些动作中协同工作,而在其他动作中独立操作。所以有大量的布尔变量来检查他们每个人在做什么。这一切都在更新循环中(某处),我认为应该以某种方式移动或简化此功能。我认为大约有 20 种不同的布尔值,未来还会有更多。
另外,我知道我的帖子与游戏开发相关,但我觉得这个问题很笼统。
那么有什么方法可以解决/帮助这个问题吗?
编辑:
我会解释更多。假设您有 4 个布尔值:isAttacking、isDefending、isCasting、isDrugged。
因此,您必须检查每只手是否忙碌并处理以下路径: 玩家尝试用双手武器攻击 ->
如果不是 isDefending 并且不是 isCasting 则 isAttacking = true,如果 isDrugged 则使用值 1 进行攻击,否则为 5。
它很快就会变得复杂,当你考虑更多的布尔值时,它会变得非常复杂。 所以我的意思是:我很懒,有没有更好的方法来做到这一点?
【问题讨论】:
-
为什么没有
std::array或std::tuple? -
这将有助于标题中的声明,但不会解决多代码路径问题。
-
也许你可以利用策略模式 (oodesign.com/strategy-pattern.html)。
-
看看采用数据驱动方法 (stackoverflow.com/questions/1065584/…) 还是有限状态机(每个布尔值控制状态转换)?
-
用浮点值替换布尔值,它会淡入淡出,然后推断所有可能的加权动作:P