【问题标题】:iOS & MVC - How to create this app/gameiOS & MVC - 如何创建这个应用程序/游戏
【发布时间】:2012-07-02 13:34:31
【问题描述】:

我真的很困惑我应该如何实现以下应用程序。我有 90% 的代码,但最后 10% 我想不通。我无法弄清楚我应该如何控制事件的流动。我将首先描述应用程序/游戏。

游戏

事件的流程是这样发生的。用户设置团队数量和回合数。然后游戏将显示一个屏幕,上面写着“传递给第 1 队”。然后,第 1 队的玩家按下一个按钮,该按钮会推动另一个视图。

在此视图中,当前玩家尝试向团队中的其他玩家描述屏幕上的单词/名称,但不说出来。每次有人猜对一个单词/名称时,玩家按下一个按钮,该按钮会拉出更多单词,并将该团队的分数加 1。这种情况一直持续到计时器用完为止。

当计时器用完时,这个视图会从导航控制器中弹出,之前的视图会告诉玩家传给第 2 队。

这将循环计算团队数量和回合数。

我的问题

我的问题是我真的不明白我应该如何跟踪所有这些事件。我有一个“GameBrain”类,我在其中保存了一系列分数和团队名称等,但我不知道如何从每个 ViewController 访问它。

我之前问过一个类似的问题,有人建议开设一个 Singleton 课程,但我后来读到这是不好的做法,我不禁觉得我应该能够做到这一点遵循 MVC 设计模式。

所以我的问题是,你们会如何编写这样的游戏?

对于这种含糊的问题,我们深表歉意。任何帮助将不胜感激。

编辑:代表是正确的方式吗?即我是否会从我的“GameBrain”创建我需要的第一个 ViewController,将大脑(在这种情况下为 self)设置为这个实例的委托,并让 ViewController 调用“我完成了这一轮”大脑上的方法会触发下一个 ViewController?

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    您的 GameBrain 应该设计为单例,单例可能有一些不好的方面,但在您的情况下,它们是最好的选择,所以就去吧

    因为这个类必须被你所有的 viewControllers 访问,并且因为不需要有这个类的多个实例,那么这将非常适合单例

    【讨论】:

      【解决方案2】:

      我从评论开始,然后转到答案。

      简而言之,正如@Omar 所说,对于您描述的 Singleton 的快速小事,可能工作正常。

      更长的版本,几年前我设计了一个这样的小东西,我们发布了它,一切都很好。几个月后,我们拥有了几百万用户,并且经历了多个开发阶段,而我们开始使用的单例模式正在摧毁这个项目。我可能会提到,我的老板一开始就坚持这是一个小项目,我们会在两周内发布它并完成 - 哈,有趣的家伙。

      Singleton 不能很好地工作的原因是它限制了模块化。最后,所有“游戏相关”的东西都必须通过这个类返回,而这个类又向另一个类发送了一条消息,该类又向 Singleton 等发送了一个响应。这太可怕了。

      如果您有时间/精力,我建议您为每个游戏创建一个 GameBrain(或其他)类。无论如何,此类通常仅在“游戏屏幕”中使用,那么当您返回菜单或发送电子邮件时,为什么还要保留它呢?如果您需要它持久化,请使其由数据库支持。如果您只需要在一两个额外的地方使用它(您的获胜屏幕可能需要知道谁赢了等),只需通过引用传递它 - 您应该只需要执行一两次。

      祝你好运。

      【讨论】:

      • 那么你是说这是单身人士的固有问题吗?一般来说,使用单例肯定会成为模块化的问题吗?我必须强烈反对——这里还有很多因素需要考虑。我确实理解糟糕的设计会导致您以错误的方式使用单例模式,但我认为您不一定会因为您选择通过单例分离逻辑和数据而创建不健壮、可扩展和模块化的东西。
      • 在这个应用中,为什么需要Singleton呢?你肯定可以玩很多游戏吗?单身在哪里?对我来说,问题已经由此产生——就像你说的那样,它始于一个糟糕的设计。我不明白你关于通过单例登录和数据的观点?
      • 对不起,意思是逻辑 :) 主要的一点是,虽然这对于这个特定问题是有争议的,但说单例不利于模块化是不正确的。
      • 好的,同意。我不知道我在哪里做出这样的概括
      • 感谢您的输入。这对让我充分理解这些东西有很大帮助。我想我需要我的大脑在总共 3 个视图中可见。所以如果我不使用单例,我是否会在 ControllerA 中创建一个大脑,然后将我的大脑实例传递给 ControllerB,然后再传递给 Controller C?
      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多