EGE 康威生命游戏

康威生命游戏(Conway’s Game of Life)是英国数学家约翰·康威(John Conway)于 1970 年发明的一个经典元胞自动机(Cellular Automaton)。这个零玩家游戏仅由简单的规则驱动,却能产生极其复杂的涌现行为,被广泛用于研究复杂系统、人工生命和混沌理论。本项目使用 EGE 图形库实现了完整的生命游戏可视化,支持交互式绘制、多种经典图案、视图缩放和轨迹效果。

源码在末尾, 可滑到底部获取 ↓

生命游戏规则

生命游戏在一个无限的二维网格上进行,每个格子(细胞)有两种状态:存活死亡。每一代的演化遵循以下四条规则:

  1. 孤独:任何活细胞周围少于 2 个活邻居则死亡
  2. 存活:任何活细胞周围有 2 或 3 个活邻居则继续存活
  3. 拥挤:任何活细胞周围超过 3 个活邻居则死亡
  4. 繁殖:任何死细胞周围恰好有 3 个活邻居则复活

这四条简单规则产生了丰富多彩的图案,包括静止图案、振荡器、飞船、滑翔机枪等。

项目特性

  • 交互式绘制:鼠标左键绘制/擦除细胞,支持拖动连续绘制
  • 9 种预设图案:滑翔机、轻型飞船、脉冲星、高斯帕枪等经典图案
  • 视图控制:鼠标右键平移视图,滚轮缩放(2x-30x)
  • 轨迹效果:显示细胞的历史轨迹,形成渐变尾迹
  • 速度控制:1-60 代/秒可调,支持暂停和单步执行
  • 网格开关:可切换网格线显示
  • 实时统计:显示代数、存活细胞数、速度等信息
  • 视觉反馈:不同颜色表示新生、存活、死亡细胞

核心算法实现

邻居计数

这个函数检查细胞周围 8 个方向的邻居(摩尔邻域),返回存活邻居的数量。

状态更新

算法要点

  • 同时计算所有细胞的下一代状态,避免影响其他细胞的计算
  • 使用双缓冲(m_gridm_nextGrid)避免读写冲突
  • 保存上一代状态用于视觉过渡效果

规则简化表达

生命游戏的规则可以用一行代码表达:

这个表达式等价于四条规则:

  • neighbors == 3:死细胞复活,活细胞存活
  • alive && neighbors == 2:活细胞存活

经典图案

1. 滑翔机(Glider)

最小的飞船,每 4 代向右下移动一格,是生命游戏的标志性图案。

2. 轻型飞船(LWSS)

每 4 代水平移动 2 格的飞船。

3. 脉冲星(Pulsar)

周期为 3 的振荡器,具有完美的对称性。通过镜像生成完整图案:

4. 高斯帕滑翔机枪(Gosper Glider Gun)

第一个被发现的能产生无限滑翔机的图案,证明了生命游戏可以产生无限增长的结构。每 30 代发射一个滑翔机。

5. R-五格体(R-pentomino)

仅由 5 个细胞组成,却要经过 1103 代才稳定下来,最终产生 116 个细胞。展示了简单初始状态可以产生极其复杂的演化。

6. 橡子(Acorn)

仅 7 个细胞,经过 5206 代才稳定,最终产生 633 个细胞。

视觉效果实现

轨迹效果

轨迹效果为每个细胞维护一个强度值(0-255),活细胞设为最亮,死亡后逐渐淡化,形成渐变的历史轨迹。

细胞状态颜色

通过对比当前状态和上一代状态,用不同颜色表示细胞的生命周期。

交互功能实现

鼠标绘制

支持点击切换细胞状态,以及拖动连续绘制。

视图平移

右键拖动实现视图平移,类似地图导航。

缩放功能

缩放算法要点

  • 保持鼠标指向的网格坐标不变
  • 计算鼠标在网格中的相对位置
  • 根据新的 cellSize 重新计算偏移量

数学公式:
$$\text{mouseGridX} = \frac{\text{mouseX} – \text{offsetX}_{\text{old}}}{\text{cellSize}_{\text{old}}}$$
$$\text{offsetX}_{\text{new}} = \text{mouseX} – \text{mouseGridX} \times \text{cellSize}_{\text{new}}$$

性能优化

1. 视锥剔除(Frustum Culling)

只渲染屏幕可见区域的细胞,大幅提升性能。

2. 帧率控制

渲染和逻辑更新分离,确保流畅的视觉体验。

3. 一维数组存储

使用一维数组替代二维数组,提升缓存友好性和访问效率。

EGE 图形库应用

网格绘制

cellSize 足够大时绘制网格线,提升视觉效果。

信息面板

右侧面板显示实时统计和操作说明。

操作指南

  • 空格:暂停/继续
  • R:随机生成细胞
  • C:清空网格
  • G:切换网格线
  • T:切换轨迹效果
  • + / –:调整速度
  • 1-9:加载预设图案
  • 鼠标左键:绘制/擦除细胞
  • 鼠标右键:平移视图
  • 滚轮:缩放
  • ESC:退出

数学与哲学意义

生命游戏不仅是一个有趣的可视化项目,还蕴含深刻的数学和哲学意义:

  1. 涌现性:简单规则产生复杂行为,展示了复杂系统的涌现特性
  2. 图灵完备:生命游戏被证明是图灵完备的,可以模拟任何计算机程序
  3. 自组织:无需外部干预,系统自发形成有序结构
  4. 混沌边缘:介于完全随机和完全有序之间的临界状态
  5. 人工生命:探索生命的本质特征——自我复制、演化、适应

通过这个项目,你不仅能学习元胞自动机和可视化技术,还能深入思考生命、计算和复杂性的本质。

 

完整代码

 

文章分类 范例 标签: , , ,