距离我们在海外正式推出公测已有两周,在这两周中,我们看到不少的用户开始跃跃欲试,用Moonbit做各种项目的尝试。其中就有这样一位用户,他是来自知名公司GreenLabs的工程师Woonki,他在Twitter上分享了自己最新的尝试:使用Moonbit重新构建经典的生命游戏,同时在构建生命游戏中,Moonbit卓越的编译速度也让他大开眼界。
生命游戏,这个名字对大多数人来说并不陌生,它是由数学家约翰·康威(John Conway)于1970年创造,是一种零玩家游戏,它通过简单的规则模拟了细胞的演化过程。Moonbit与生命游戏的结合,为我们展示了一个新的视角。
今天,我们将探讨如何使用Moonbit来重新编写生命游戏,不管你是一个编程新手或者是经验丰富的开发者,跟着我们的步伐,你都可以游刃有余地开启这个探索之旅。
但首先,让我们来了解一下这个特别的游戏——为何生命游戏没有玩家,但在学术圈火了半个世纪?
什么是生命游戏
当你的计算机屏幕上出现自我复制的现象时,你会最先想到什么?也许是病毒?然而,除了电脑病毒,还存在另一种具有自我复制能力的存在。这种数字化生物栖息在一个二维方格世界里,被称作“生命游戏”。
严格来说,生命游戏并非游戏,因其内无玩家参与。康威将其描述为一种“无玩家参与且永无终结”的“游戏”,因为这些数字化的细胞也有生老病死的过程。
物理学家斯蒂芬·霍金(Stephen Hawking)就这样写道:“我们完全可以想象,像生命游戏这样的东西,只有少数几个基本定律,就可以产生高度复杂的特征,甚至可能产生智能。”
在这个虚拟世界中,每个黑色格子代表一个细胞,而白色格子则相当于什么都没有。假设细胞存在着生老病死,并且每个细胞的存活取决于它周围细胞的个数,这里就跟远古时期的“部落”概念一致,人太多或者太少都不利于生命的繁衍,所以我们需要制定一些规则。游戏规则如下:
- 如果一个细胞周围只有1个或0个其他细胞,它将会孤独而死
- 如果一个细胞要想存活下来或繁衍,周围细胞的数量必须保持在2到3个之间
- 如果细胞周围有4个或更多细胞相邻,它将因过度拥挤而死
- 如果细胞周围有3个邻居,它将在空白处产生一个新细胞,游戏将继续繁衍
The source of picture:https://qualityswdev.com/2011/07/31/conways-game-of-life-in-scala/
这些简单的规则创造出一个充满生命和变化的虚拟世界,令人着迷。正是这种复杂性吸引了众多数学、物理和计算机科学的学生和爱好者,他们将其视为一种宝贵的娱乐方式。
如何用 Moonbit + JS 编写生命游戏
为了编写康威生命游戏,我们可以充分利用 Moonbit 这个面向 WebAssembly 的语言。首先,我们可以使用Moonbit编写生命游戏的逻辑,然后将其编译成 WebAssembly (wasm) 格式。接下来,我们可以使用 JavaScript 代码加载 wasm 代码,并通过 canvas 来渲染生命游戏的逻辑。