使用Swift使用AI构建井字游戏

另一个可以使用的框架是GameplayKit。 GameplayKit在去年的WWDC上推出,并提供了有用的API,用于实现您在游戏中发现的一些常见元素,例如创建随机数,为对手提供人工智能或在障碍物附近寻路。 它们是非常有用的工具,可以使您的工作负担很重,并使游戏开发人员可以专注于使游戏变得有趣的方面。 我强烈建议您阅读《 GameplayKit编程指南》,以了解有关如何利用此框架构建游戏的更多信息。 对于我们的简单游戏,我们仅将框架的一小部分包含在内,以使计算机对手获得一些“智能”。

启动Xcode

启动Xcode并从iOS模板创建Game项目。 将游戏命名为TicTacToe,并确保将语言设置为Swift。 在创建项目的过程中,Xcode会创建一个SKScene文件(代表您的游戏初始视图)以及一个视图控制器文件,该文件会初始化游戏场景并在启动应用程序时处理屏幕上显示的内容。 如果立即运行该应用程序,您将看到显示的Hello World标签,以通知您一切正常可用。 此外,如果单击视图,则太空船将添加到单击的位置。 我们不再需要标签或太空飞船的行为,因此让我们删除该代码。 切换到GameScene.swift文件,删除didMoveToView中的代码并触摸touchesBegan函数。

让我们花一点时间,重点介绍“场景编辑器”的某些功能。 视图的中心是场景显示,井字游戏板周围的黄色轮廓表示我们的游戏可见端口。 我们可以更改视口的大小,甚至可以添加摄像头,使我们可以实时查看游戏中更多可见部分。 在“平台”中,我们可能会创建一个大型背景图像,其中敌人节点分散在整个场景中。 我们将使用摄影机节点在整个场景中前进,以显示随着时间的推移背景的新部分。 但是,在这个游戏中,我们的观点将是一成不变的。

场景的底部是我们的节点编辑器。 我们可以使用此编辑器将动作添加到节点或在场景中更轻松地选择它们。 出于我们的目的,我们添加了一个节点来代表板的每个单元的板,标签和占位符节点。 最后,请注意,场景中的每个节点都有一个名称,我们将使用该名称在代码中进行引用。

我已经在Github上提供了整个游戏,以便您可以继续并研究本文中为方便我讨论的领域。

返回代码

让我们切换回GameViewController.swift,看看我们如何设置场景并开始游戏。 在viewDidLoad方法中,我们配置并加载场景。 我们还添加了调试语句,以便我们可以跟踪节点和每秒帧数。 在动作游戏中,我们将有兴趣一次监视屏幕上有多少个节点,以及是否保持理想的60fps帧频。

StartGameState是我们开始游戏的方式。 在这种状态下,我们重置游戏板,然后过渡到ActiveGameState。 我们重写isValidNextState函数,使唯一有效的下一个状态为ActiveGameState。 因此,当我们处于StartGameState时,我们只能进入此处,并且无法进入任何其他状态。 状态机还具有didEnterWithPreviousState函数,该函数在实现状态变为活动状态时被调用。 它还为您提供了您所来自的状态。 在本例中,我们调用resetGame函数来设置游戏。

包起来

因此,我们创建了一个快速游戏,并在此过程中了解了有关SpriteKit和GameplayKit的一些知识。 我鼓励您对游戏进行更改,并尝试进行一些操作以使游戏更舒适。 如果您需要一些建议,则可以从实施一种方法来交替选择哪个玩家先开始。 另一个想法是为玩家提供一种在游戏屏幕上调整AI水平或完全关闭AI水平的方法。

简要地说,我还写了一篇文章,说明为什么创建本地应用程序可能是大多数移动开发工作中最好的方法。 阅读并参与讨论!

您的混合应用程序将杀死您
如果您的公司仅开发混合应用程序,那么最终您将蒙受损失。 这只是时间问题。 混合手机…medium.com

希望您对此帖子感兴趣。 如果您喜欢它,推荐并喜欢它!

就在! 现在,您可以看到我的一些中文帖子。 感谢antonia0912。

第1部分:https://gold.xitu.io/entry/578c647a6be3ff006ce49e91

第2部分:https://gold.xitu.io/entry/578dc9db79bc44005ff580d4