在iOS上创建生活游戏

没有对现实的模型独立测试。 因此,一个结构良好的模型可以创建自己的现实。 一个可以帮助我们思考现实和创造问题的例子是生命游戏,它是由剑桥的一位年轻数学家约翰·康威(John Conway)于1970年发明的。

— The Grand Design ,作者: 斯蒂芬·霍金Stephen Hawking)

生命游戏是自动机理论的流行实现。 并不是一个玩家可以与计算机对战或者两个或两个以上玩家可以对战的游戏。 生命游戏是一种自动化,可以自己发挥作用,并且可以代代相传。 类似于我们的宇宙!

运动场分为行和列,理想情况下无限大。

棋盘看起来类似于国际象棋棋盘。 每个方块都是一个单元,可以占据两个状态之一,一个是活着的,就是死亡。 我们需要在野外放置最初的活细胞。

每个方块可以处于以下两种状态之一:存活(以黑色显示)或死亡(以白色显示)。 每个正方形(单元)都有八个邻居:上,下,左,右和对角邻居。

规则

创建游戏世界有三个简单的规则。

  1. 如果一个已经存在的广场有两个或三个邻居,则可以继续居住到下一代
  2. 当前尚不活跃且具有三个活着邻居的正方形在下一代中将变得活跃
  3. 一个正方形如果有零个或只有一个邻居而死(由于寂寞而死),并且如果有三个以上的邻居(因人口过剩而死)也会死。

这些简单的规则会在游戏过程中根据某些初始模式创建各种复杂的结构。 有些保持不变,有些以相同的方式运行,有些增长或完全消失。

创建我们的游戏架构

我们要创建完全独立查看的游戏逻辑。 我们将创建一个对象GameState,该对象负责迭代到下一代,确定单元是死亡还是存活,并管理游戏状态。

让我们首先创建我们的单元。 这将是一个表示我们游戏中正方形状态的单元模型(不要将其与iOS中的UITableViewCell或UICollectionViewCell混淆)。

我们的细胞了解其生命状态,并有两种工厂方法可以创建存活或死亡的细胞。

仅凭三个简单规则即可创建一个自己的小宇宙。 如果您想获得完整的项目,可以在这里找到。

研究创建的模式

如果我们继续观察生命游戏,我们将开始看到其中的许多模式。

有类似的对象可以静态创建和生活,而无需代代相传。 有些振荡对象会根据特定的方案定期更改,经过固定的世代之后,它们会返回其原始状态。

也有称为滑翔机的模式。 它们随着时间的发展而发展,并沿着阵列爬行。 它们转变为不同的形状,直到它们恢复到初始形状,但斜向向下倾斜一个平方。

有趣的是,在物理上,我们只有小范围的活着和死去的正方形。 但是从更大的角度来看,我们有闪光信号灯,振荡器,宇宙飞船和不同的救生圈。

在最初的规则中,我们没有关于在对象之间移动或碰撞的规则。 但是,我们可以看到在游戏中存在规律,可以观察到运动和碰撞。

如果我们将生物定义为可以自我复制的系统。 这些对象可以复制,但不稳定。

但是,如果我们可以想象出一套更复杂的法律,该法律将允许拥有生命所有属性的复杂系统?
这样的物体会自我意识吗,会自我意识吗?

结论

在本文中,我们已在iOS中使用Swift实现了“人生游戏”。 我们使用测试驱动的开发实施了游戏规则,并说明了TTD如何使我们的开发过程更好。

我们还观察了模式并讨论了该游戏背后的一些哲学。

康威想知道,具有像生命游戏一样简单的基本规则的宇宙是否可以包含足够复杂的物体以进行复制。 不仅证明这是可行的,而且该游戏甚至表明从某种意义上说,这样的物体是聪明的!

如果您喜欢本文,请确保鼓掌以表示支持。

跟随我查看更多文章,这些文章可以使您的iOS开发人员技能更上一层楼。 如果您有任何疑问或意见,请随时在此处留言或发送电子邮件至arlindaliu.dev@gmail.com。

参考文献

  1. Robert Martin清洁代码:重构,模式,测试和清洁代码技术
  2. 斯蒂芬·霍金(Stephen Hawking)大设计