【发布时间】:2009-07-04 17:03:04
【问题描述】:
我正在尝试重新实现一个旧的Reversi board game,我用更时髦的 UI 编写。我查看了 Jens Alfke 的 GeekGameBoard 代码以获得灵感,而 CALayers 看起来像是实现 UI 的方法。
然而,在 GeekGameBoard 代码中,模型和视图并没有清晰的分离;模型是视图,这使得例如制作游戏状态的副本以便为 AI 玩家执行游戏树搜索变得困难。但是,我似乎无法想出另一种结构方法,允许模型和视图分离,而不涉及保持两个平行网格的持续战斗(模型打开,视图一个) 同步。当然,这也有其自身的问题。
如何最好地实现 AI 搜索友好的模型结构和显示友好的视图之间的关系?任何建议/经验将不胜感激。我很害怕/有一半期待答案类似于“没有好的答案:尽你所能处理它”,但我准备好感到惊讶!
感谢彼得的回答。但是,我不完全确定我完全理解它。如果你只有一组初始的可以移动甚至移除的部件,我可以看到这是如何工作的,但是当一个人放下一个新部件时会发生什么?它会像这样工作吗:
- 用户在视图中点击。
- 查看点击转换为板位置并通知控制器。
- 控制器创建一个具有后续状态的新董事会(如果合适,即这是一个合法的举动)。
- 视图通过其绑定获取新板,拆除现有视图/层层次结构并将其替换为当前状态。
听起来对吗?
PS:很抱歉未能指定它是用于 iPhone 还是 Mac。我对适用于 iPhone 的东西最感兴趣,但如果我能让它首先在 Mac 上很好地工作,我确信我可以调整解决方案以在 iPhone 上自己工作。 (或发布一个新问题!)
【问题讨论】:
-
不,你不会创建一个新的董事会;您将创建一个新的 Piece 并将其添加到 Board。您必须决定是在 Board 中执行这两个步骤(即,让控制器告诉 Board“在 x,y 处制作并添加一个新 Piece”)还是分别(即让控制器自己创建 Piece,然后将其传递给董事会)。
-
你可能仍然可以在 iPhone 上使用我的建议,但你不会有 Bindings,所以你必须直接使用 KVO。棋盘层观察棋盘的属性,棋子层观察各自棋子的属性。应该不会太痛,但我没试过。
标签: objective-c cocoa cocoa-touch calayer