康威生命游戏(Conway's Game of Life)是英国数学家约翰·康威在1970年创造的经典细胞自动机模型。这个零玩家游戏以其简单的规则却能产生令人惊叹的复杂模式,完美诠释了"简单孕育复杂"的哲学思想。
生命游戏在一个无限延伸的二维网格世界上演,每个格子代表一个细胞,拥有两种基本状态:
游戏通过四条优雅的规则驱动演化:
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毫秒演化一代。
执行代码后,你将看到一个400×400像素的窗口,见证简单规则如何创造出令人着迷的复杂生命图景。每100毫秒,生命就演化一代,展现出无限的可能性。
生命游戏不仅是编程练习,更是理解复杂系统、涌现现象和计算理论的完美窗口。通过调整参数和规则,你可以探索这个数字宇宙中隐藏的无限奥秘!