生命游戏二号

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

这是一个名叫"生命游戏"的小实验,每个方格就是个小细胞,如果细胞周围的伙伴有一个或没有,他们会因为过于孤独而死,如果周围的细胞大于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()
相关推荐
BingLin-Liu15 小时前
蓝桥杯备考---》贪心算法之矩阵消除游戏
算法·游戏·贪心算法
苹果企业签名分发1 天前
游戏搭建云服务器配置推荐
运维·服务器·游戏
二狗哈1 天前
go游戏后端开发20:房间消息推送处理
开发语言·游戏·golang
fatiaozhang95272 天前
晶晨S905L3A(B)-安卓9.0-开启ADB和ROOT-支持IPTV6-支持外置游戏系统-支持多种无线芯片-支持救砖-完美通刷线刷固件包
android·游戏·adb·华为·电视盒子·机顶盒rom·魔百盒固件
腾讯安全应急响应中心2 天前
命悬生死线:当游戏遭遇DDoS围剿,如何用AI破局?
网络·人工智能·游戏·ddos
徐礼昭|商派软件市场负责人3 天前
2025年消费观念转变与行为趋势全景洞察:”抽象、符号、游戏、共益、AI”重构新世代消费价值的新范式|徐礼昭
大数据·人工智能·游戏·重构·零售·中产阶级·消费洞察
CodeCaptain3 天前
[推荐了解]各类游戏引擎入门选择说明
经验分享·游戏
zzj_2626104 天前
Java课程设计(双人对战游戏)持续更新......
java·游戏·课程设计
米芝鱼4 天前
LearnOpenGL(九)自定义转换类
开发语言·c++·算法·游戏·图形渲染·shader·opengl
Footprint_Analytics5 天前
3.17-3.23 Web3 游戏周报:Pixudi 双榜领跑,The Forgotten Runiverse 登陆三大主机平台
游戏·web3