生命游戏二号

好久没有碰到有意思的计算机题了,昨天鑫哥提了一嘴,就去实现了

这是一个名叫"生命游戏"的小实验,每个方格就是个小细胞,如果细胞周围的伙伴有一个或没有,他们会因为过于孤独而死,如果周围的细胞大于3,则会因为过于拥挤而死亡;此外的情况细胞都能存活,甚至在三个伙伴时还能迎来新生。

不同的初始情况会有不同的迭代过程和结果,但是同样的初始情况一定会有相同的迭代过程和结果

在这样严苛的规则下有无数有意思的图案和方案等待探究

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import time

def initialize_grid(rows, cols, pattern='complex_pattern', position=None):
    """初始化网格,使用预定义的模式填充"""
    grid = np.zeros((rows, cols), dtype=int)

    def place_pattern(pattern, pos):
        patterns = {
            'block': [[1, 1], [1, 1]],
            'blinker': [[1, 1, 1]],
            'toad': [[0, 1, 1, 1], [1, 1, 1, 0]],
            'beacon': [[1, 1, 0, 0], [1, 1, 0, 0], [0, 0, 1, 1], [0, 0, 1, 1]],
            'glider': [[0, 1, 0], [0, 0, 1], [1, 1, 1]],
            'symmetric': [
                [0, 1, 0, 1, 0],
                [1, 0, 1, 0, 1],
                [0, 1, 0, 1, 0],
                [1, 0, 1, 0, 1],
                [0, 1, 0, 1, 0]
            ],
            'complex_pattern': [
                [1, 1, 0, 0, 1, 1],
                [1, 0, 0, 0, 0, 1],
                [0, 0, 1, 1, 0, 0],
                [0, 0, 1, 1, 0, 0],
                [1, 0, 0, 0, 0, 1],
                [1, 1, 0, 0, 1, 1]
            ],
            'pulsar': [
                [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1],
                [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1],
                [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1],
                [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0],
                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0],
                [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1],
                [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1],
                [1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1],
                [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0],
            ]
        }

        if pattern in patterns:
            pat = np.array(patterns[pattern])
            r_offset, c_offset = pos[0] - pat.shape[0] // 2, pos[1] - pat.shape[1] // 2
            grid[r_offset:r_offset + pat.shape[0], c_offset:c_offset + pat.shape[1]] = pat

    if position is None:
        # 如果没有提供位置,则选择一个中心点
        position = (rows // 2, cols // 2)

    place_pattern(pattern, position)

    return grid

def update_grid(grid):
    """更新网格状态"""
    rows, cols = grid.shape
    new_grid = np.zeros((rows, cols), dtype=int)
    for r in range(rows):
        for c in range(cols):
            # 计算当前细胞周围的活细胞数
            neighbors = sum([
                grid[(r-1)%rows, (c-1)%cols], grid[(r-1)%rows, c], grid[(r-1)%rows, (c+1)%cols],
                grid[r, (c-1)%cols],                             grid[r, (c+1)%cols],
                grid[(r+1)%rows, (c-1)%cols], grid[(r+1)%rows, c], grid[(r+1)%rows, (c+1)%cols]
            ])
            # 生命游戏规则
            if grid[r, c] == 1 and (neighbors == 2 or neighbors == 3):
                new_grid[r, c] = 1
            elif grid[r, c] == 0 and neighbors == 3:
                new_grid[r, c] = 1
    return new_grid

def display_grid(grid):
    """显示网格状态"""
    plt.imshow(grid, cmap='binary')
    plt.axis('off')
    plt.show(block=False)
    plt.pause(0.2)
    plt.clf()

def run_game(rows=30, cols=30, generations=500):
    """运行生命游戏"""
    grid = initialize_grid(rows, cols, pattern='pulsar')
    for _ in range(generations):
        display_grid(grid)
        grid = update_grid(grid)

if __name__ == "__main__":
    run_game()
相关推荐
cyr___10 小时前
Unity教程(二十四)技能系统 投剑技能(中)技能变种实现
学习·游戏·unity·游戏引擎
上海云盾第一敬业销售13 小时前
手游遇攻击为何要用游戏盾SDK?
游戏
德迅云安全杨德俊15 小时前
应用加速游戏盾的安全作用
网络·安全·游戏·ddos
大梦谁先行19 小时前
Qt写游戏脚本/辅助(仅供参考)
c++·qt·游戏
棒棒AIT1 天前
mac 苹果电脑 Intel 芯片(Mac X86) 安卓虚拟机 Android模拟器 的救命稻草(下载安装指南)
android·游戏·macos·安卓·mac
Deng9452013142 天前
24点数学游戏(穷举法求解表达式)
游戏·穷举法·递归回溯算法
用户6120414922132 天前
C语言做的井字棋小游戏
c语言·后端·游戏
★YUI★2 天前
学习游戏制作记录(剑投掷技能)7.26
学习·游戏·unity·c#
我要学习别拦我~2 天前
kaggle分析项目:steam付费游戏数据分析
python·游戏·数据分析
Sui_Network3 天前
探索 Sui 上 BTCfi 的各类资产
大数据·人工智能·科技·游戏·区块链