gpt4 book ai didi

ios - 另一篇关于 MVC 责任的帖子,谁应该知道什么?

转载 作者:行者123 更新时间:2023-11-29 11:15:40 25 4
gpt4 key购买 nike

思考纸牌游戏......

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

在这种情况下,请确认:

(1) View 无需询问它的 Controller 就可以知道屏幕上“着陆区”的位置

(2) View 无需询问它的 Controller 就可以知道屏幕上的“防御者”卡在哪里

如果 View 知道攻击者和防御者是谁,(3) View 是否可以确定攻击者是否可以击败防御者?

如果这不行,(4) View 是否可以对其他类进行分类,那么它是此信息的 Controller (想想 Utils 类),还是应该始终是 Controller ?

(5) 向 Controller 发送一个指示“攻击者卡落在防御者卡上”的委托(delegate)方法并期望攻击是否成功的 bool 值会更好吗?

最佳答案

View 是一个被动的输入/输出设备。它不应该对游戏规则一无所知,比如攻击者是否可以击败防御者。即使 Controller 不应该知道游戏规则,模型也总是决定这一点。

View 应该能够表示和处理所有可能的输入和输出状态,并将输入中继到 Controller 。 Controller 会将输入信息传递给模型,并根据新的模型状态更新 View 。在您的情况下, View 检测到卡片 A 落在卡片 B 上并将信息传递给 Controller ​​。 Controller 将信息传递给模型,模型转换到新的游戏状态, Controller 将 View 更新到新状态。有时 View 可以通过直接观察模型自动更新,这取决于情况。

考虑 MVC 分离规则的一个好方法是想象将游戏移植到不同的界面 (GUI/CLI) 或不同的皮肤。如果您发现必须重做大部分代码才能支持不同的界面,那么您将不得不触及除特定于界面的内容之外的其他内容,这意味着设计不是最优的。

另一个很好的设计直觉来源是测试和模拟。如果要运行一些自动测试或游戏模拟,您必须将游戏代码与模型内部的输入和输出分开。当逻辑散布在整个 MVC 上时,测试和模拟游戏会造成伤害并提醒您出了点问题。

关于ios - 另一篇关于 MVC 责任的帖子,谁应该知道什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com