ios - 实现MVC设计的难度(iOS游戏)

标签 ios oop model-view-controller

我开始开发一个简单的卡片游戏iphone应用程序,但我已经完全陷入了几天的困境。这是我第一个在cs类之外制作的程序,不用说它比我做过的任何事情都大20倍。我对基本的oo实践和更简单的模式有很好的了解,但是我正在努力创建一个好的模型视图控制器。我可以开发一些程序化的、紧密耦合的应用程序,但我希望使用良好的oo实践。我想避免使用单例模式。
我理解全局,但当我试图把自己的脑袋放在它的实际实现上时,我会感到困惑。
到目前为止(没有使用像uiview这样的atm的api):
一个带有实例变量player*player、player*dealer和deck*gamedeck的gamemodel类。方法有-(void)dealcardtoplayer、(player*)getplayer(这样视图/控制器可以使用引用轻松获取分数)等。玩家类有手和分数等信息。这实际上是一个协议的实现,因此如果需要,我可以使用状态模式。
游戏控制器类。包含对GameModel和GameView的引用。我就知道这些了。如果有人在gameview中点击了一个点击按钮,那么该按钮的方法是否只是在控制器中调用一个点击按钮的方法,然后在控制器中调用gamemodel方法-(void)dealcardtoplayer:(card*)topcard?控制器是否经常轮询模型以确定播放器是否丢失,或者模型是否将控制器注册为观察者并更新它?
游戏视图类。包含对gamemodel和gamecontroller的引用(因为它向控制器发送输入)。这是否简单地调用了60次/秒模型中的getplayerhand,直到它发现一张卡被添加到手上,然后渲染它?如何处理动画?视图是否有自己的已渲染卡元素数组,并在检测到玩家手中的新卡然后渲染新卡时对其进行转换(为新卡腾出空间)?我觉得我也应该做一个状态模式。我想我在某个地方也读到了动画数据存储在模型中,但我不确定如何存储。
其他随机问题:
人工智能是否使用与播放器相同的精确控制器参考,并将其模拟输入发送到控制器?稍后我还想实现多人游戏。
我还想知道主菜单和暂停菜单是如何实现的。我会使用控制两个mvc的主控制器还是只在同一个gamecontroller中切换视图?我的第一个猜测是控制器将有一个menubuttonpressed方法,该方法将分配一个不同的视图引用(重写现有视图,并在游戏恢复时被清除和取消分配,以便您看到上一个视图)。如果我想使用同一个引擎来制作下一个侧滚动条,两个控制器将如何协同工作(我知道碰撞检测通常有自己的控制器)?
我总是通过例子学到最好的东西:我搜索过谷歌,但要么我遗漏了一些隐藏的宝石,要么我找不到我需要的信息。
主要问题:有没有什么关于实际实现oo/mvc游戏设计的必须阅读的深入教程或好书?
我为那些冗长的问题道歉,但我真的觉得我不能把我的头绕在复杂的MVC上。我觉得这个应用程序需要几个月的时间来运行一些基本的东西(一旦课程重新开始)。

最佳答案

欢迎来到现实世界!mvc是一个不错的理论,但它很少适合实践,特别是在objective-c/ios中,ui是摇尾巴的狗。
把精力花在好的结构上要重要得多,否则——不要把不相关的函数塞进同一个类中,不要把函数的一部分分散到十几个类中,等等。
你可能吃得太多了。但有时这是学习的好方法。

关于ios - 实现MVC设计的难度(iOS游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7072107/

相关文章:

ios - 来自 Three.js 的示例,但如何使用 SceneKit 实现?

ios - 如何检索healthkit数据并显示?

javascript - MVC JavaScript 获取 API 数据并发送到 Controller

c++ - 工厂应该负责重建序列化对象吗?

c# - 使用 XML 或 OOP 技术处理数据的相对处理速度是多少? (即 XProc 或 XSL 与 C# 或 Java)

java - MVC Spring Java - 显示作为类中字段存储的图片

swift - 将变量值传递给不同的类 - Swift

multithreading - 在后台线程上将 UIVIew 渲染为图像的安全方法?

ios - sd_setImageWithUrl 第一次没有显示图像

javascript - 访问对象内部的 "this"