生命游戏二号

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

这是一个名叫"生命游戏"的小实验,每个方格就是个小细胞,如果细胞周围的伙伴有一个或没有,他们会因为过于孤独而死,如果周围的细胞大于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()
相关推荐
AI小百科32 分钟前
AI 进游戏:游戏里的 NPC 开始有自己的性格
人工智能·游戏·ai
云-缩影11 小时前
文生图技术落地:从广告到游戏,哪些场景真的能用
人工智能·游戏
hkNaruto20 小时前
【AI】游戏大模型智能体OODA过程记忆问题解决方案:AgenticSTS 有界记忆契约:技术分析与流水线改造操作手册
人工智能·游戏·机器学习
tealcwu1 天前
【Unity基础】为什么游戏需要物理按键映射?从 Unity Input Manager 到跨引擎输入设计
java·游戏·unity
沐飞工具箱1 天前
游戏、漫画、视频里的外语怎么实时翻译?从 OCR + AI 原理聊聊 VoriTrans 屏幕翻译
人工智能·游戏·实时互动·音视频·自动翻译
小小数媒成员2 天前
UGUI原理(一)
开发语言·游戏·unity·游戏引擎
揽星河..3 天前
【C语言】扫雷游戏
c语言·算法·游戏
郝学胜-神的一滴3 天前
AI 编程智能体 22:解析器赋能与实战落地全指南
人工智能·程序人生·游戏·unity·游戏引擎
云上工程笔记3 天前
用 AstraWork 复刻并二创一款网页地牢游戏:从链接到上线的完整工程实践
游戏
zrc0070073 天前
steam无法登录 steam错误 登录时出现错误。请稍后再试。解决办法 steam无法登录解决办法 湖南地区steam DNS问题解决办法
windows·经验分享·游戏·缓存·游戏程序·创业创新·玩游戏