🌌 康威生命游戏:数字宇宙的演化奇迹
康威生命游戏(Conway's Game of Life)是英国数学家约翰·康威在1970年创造的经典细胞自动机模型。这个零玩家游戏以其简单的规则却能产生令人惊叹的复杂模式,完美诠释了"简单孕育复杂"的哲学思想。
🎮 游戏规则:生命的律动
生命游戏在一个无限延伸的二维网格世界上演,每个格子代表一个细胞,拥有两种基本状态:
- 存活 🟢(绿色)
- 死亡 ⚫(黑色)
游戏通过四条优雅的规则驱动演化:
- 生存法则:当存活细胞拥有2-3个存活邻居时,继续绽放生命
- 孤独致死:存活细胞邻居少于2个时,因孤独而消亡
- 拥挤致死:存活细胞邻居超过3个时,因过度拥挤而逝去
- 新生法则:死亡细胞恰有3个存活邻居时,神奇地获得新生
💻 代码解析:数字生命的诞生
🏗️ 初始化:创造生命的世界
from random import choice
from turtle import *
from freegames import square
cells = {} # 生命的容器
我们使用Python的turtle模块绘制这个微观宇宙,cells字典记录每个细胞的生死状态。
🌱 播种生命
def initialize():
"""随机初始化生命种子"""
# 清空世界
for x in range(-200, 200, 10):
for y in range(-200, 200, 10):
cells[x, y] = False
# 在中心区域随机播种生命
for x in range(-50, 50, 10):
for y in range(-50, 50, 10):
cells[x, y] = choice([True, False])
这段代码首先创造一个纯净的世界,然后在中心区域(-50到50)随机撒下生命的种子。
⏳ 生命演化:一代又一代
def step():
"""计算生命的下一个世代"""
neighbors = {} # 邻居计数器
# 统计每个细胞的邻居数量
for x in range(-190, 190, 10):
for y in range(-190, 190, 10):
count = -cells[x, y] # 排除自身
for h in [-10, 0, 10]:
for v in [-10, 0, 10]:
count += cells[x + h, y + v]
neighbors[x, y] = count
# 应用生命规则
for cell, count in neighbors.items():
if cells[cell]: # 存活细胞
if count < 2 or count > 3:
cells[cell] = False # 死亡
elif count == 3: # 死亡细胞
cells[cell] = True # 新生
这段核心代码精确模拟了生命的兴衰更替,展现了简单规则如何创造复杂模式。
🎨 绘制生命图景
def draw():
"""绘制生命宇宙"""
step() # 计算下一代
clear() # 清空画布
# 绘制每个细胞
for (x, y), alive in cells.items():
color = 'green' if alive else 'black'
square(x, y, 10, color)
update() # 更新画面
ontimer(draw, 100) # 100毫秒后重绘
这段动画代码让生命在屏幕上跃动,每100毫秒演化一代。
🔍 探索无限可能
🌌 经典模式发现
- 静态生命(Still Lifes):如方块、蜂巢
- 振荡器(Oscillators):如眨眼灯(周期2)
- 太空船(Spaceships):如滑翔机(每4代移动一格)
⚡ 性能优化思路
- 使用numpy数组替代字典存储
- 实现更高效的邻居计数算法
- 考虑多线程计算
🧪 实验方向
- 尝试不同的初始图案(如R-pentomino)
- 修改生存/诞生规则(如HighLife规则)
- 添加颜色表示细胞年龄
- 实现交互式编辑功能
🚀 启动生命宇宙
执行代码后,你将看到一个400×400像素的窗口,见证简单规则如何创造出令人着迷的复杂生命图景。每100毫秒,生命就演化一代,展现出无限的可能性。
生命游戏不仅是编程练习,更是理解复杂系统、涌现现象和计算理论的完美窗口。通过调整参数和规则,你可以探索这个数字宇宙中隐藏的无限奥秘!