从哪里开始使用 GKMinmaxStrategist?

tsb*_*tsb 5 swift swift2 gameplay-kit gkminmaxstrategist

我想知道这里是否有人使用 GKMinmaxStrategist 有任何运气。这个类/特性在 WWDC 上展示过,但大部分示例代码是在 Objective-C 中的,这令人失望。

GameplayKit 的 WWDC 视频展示了另一款游戏 Stone Flipper(黑白棋/黑白棋),但他们还没有发布代码(还没有?)。

有没有人有这方面的运气?我希望通过一个简单的井字棋游戏来试试这个,但我完全不知道如何开始。

Two*_*aws 5

我同意这是一个很难学习的框架——我刚刚完成了一篇关于 GameplayKit 和 GKMinmaxStrategist教程,这绝非易事。如果您按照教程进行操作,它将从头开始构建一个完整的游戏,并解释它们如何组合在一起。至少,您可能会发现它作为起点很有用。

我希望 Apple 在 iOS 9 最终版之前改进其文档!

如果你想直接潜入,以下是你至少需要知道的:

  • 确保您的游戏模型(数据)和视图(布局)是分开的。
  • 让您的模型实现该NSCopying协议,因为它会在 AI 运行时被多次复制。
  • 您还应该使其实现GKGameModel协议,该协议要求您能够枚举可用的移动,在棋盘副本上应用移动(实际上,不是真实的),然后判断玩家的分数。
  • 每个“移动”(无论在您的游戏中意味着什么)都需要符合GKGameModelUpdate协议,因此它将是您创建的一个定义特定移动的类。当您选择了最佳移动时,您将收到此信息,因此它会包含诸如“将骑士移动到 E4”之类的内容。
  • 如果您的游戏没有分数(在我的教程中我使用了四连胜,这正是这个问题),那么您需要提出一个启发式方法来粗略估计一个移动的好坏。
  • 在后台线程上运行 AI 以确保您的 UI 保持响应,然后在您准备进行 UI 更改时将结果推送回前台线程。

如果您发现 AI 运行缓慢,请限制它可以进行的移动次数或减少其前瞻深度。

  • 不错的教程。它掩盖了一点:为 `maxLookAheadDepth` 选择 7 个移动不是任意的。顾名思义,四连胜是在 4 步中获胜——假设完美发挥,展望自己的 4 步(因此也是对手的 3 步干预)就足以保证赢或平。当然,如果您的启发式方法不是那么好(Apple 的示例和您的变体都是这种情况),那么向前看并没有真正的帮助。但是,无论您的启发式方法有多好,展望未来也不会——它只会吃 CPU。 (3认同)