2012-03-06 36 views
1

思卡游戏...关于MVC责任的另一篇帖子,谁应该知道什么?

计算机用卡片攻击人类。作为回应,玩家在视图上移动卡片以击败它。

在这种情况下,请确认:

(1)这是确定的查看才知道,这里在屏幕上“着陆区是”不问它的控制器

(2)它是OK的查看到知道屏幕上的“卫士”牌是不问它的控制器

如果视图是知道谁既攻击者和防御者是,(3)是它确定为视角的determin e攻击者是否可以击败防守者?

如果这样不行,(4)可以查看类别,然后它是这个信息的控制器(想想Utils类),还是应该始终是控制器?

(5)将代理方法发送给控制器指示“攻击者卡落在防卫者卡”并期望布尔值攻击是否成功,会更好吗?

回答

2

视图是被动输入/输出设备。它不应该知道游戏规则的任何内容,比如攻击者是否可以击败防守者。即使控制器不应该知道游戏规则,模型总是决定这一点。

视图应该能够表示和处理所有可能的输入和输出状态,并将输入传递给控制器​​。控制器将传递输入信息以根据新模型状态对视图进行建模和更新。在你的情况下,视图检测到卡A落在卡B上并将信息传递给控制器​​。控制器将信息传递给模型,模型转换为新的游戏状态,控制器将视图更新为新的状态。有时视图可以通过直接观察模型来自动更新,这取决于情况。

想一想MVC分离规则的一个好方法是想象将游戏移植到不同的界面(GUI/CLI)或不同的皮肤。如果您发现必须重做大部分代码才能支持不同的界面,那么除了特定于界面的内容外,您还需要触摸某些内容,这意味着设计不是最佳选择。

设计直觉的另一个很好的来源是测试&模拟。如果想运行一些自动测试或者游戏模拟,你不得不将游戏代码与模型中的输入和输出分开。当逻辑遍布整个MVC时,测试和模拟游戏会受到伤害,并提醒您有什么不对。

相关问题