我正在尝试在不使用间谍功能的情况下在 MatLab 中进行生命游戏

问题描述

我想在 Matlab 中构建生命游戏,但我在开始时遇到了一些问题。规则如下:

  • 少于 2 个邻居的细胞死亡
  • 有 2 或 3 个邻居的细胞会延续到下一代
  • 有超过 3 个邻居的细胞死亡
  • 一个有 3 个邻居的空地,一个细胞诞生于下一代 细胞只在模拟世界中出生和死亡,而不是在模拟世界之外

我在创建游戏循环时遇到了一些问题。

这是我当前的代码

clc
clear all
close all

L=10;
fill([1 L+1 L+1 1],[1 1 L+1 L+1],'w')

for k=1:L+1
    plot([1 L+1],[k k],'k')
    plot([k k],[1 L+1],'K')
    axis equal; axis([1 L+1 1 L+1])
    hold on
end

F=zeros(L,L);
c=1;

while 1
    [m,n,d]=ginput(1);
    m=floor(m); n=floor(n);
    if d==1
        F(m,n)=1;
        fill([m m+1 m+1 m],[n n n+1 n+1],'b')
        if m<0 || m>L || n<0 || n>L
            break
        end
    else
        break
    end
    cv(:,c)=[m,n];
    c=c+1;
end
save 'popy.mat'
---------------------------------------------------
clc
clear all
close all
a= load('popy.mat');
F= a.F;
L= a.L;
k= a.k;
c= a.c;
iteracoes=1;

%%

for k=1:L+1
    plot([1 L+1],'k')
    axis equal; axis([1 L+1 1 L+1])
    hold on
end

posicao = find(F);

for i = 1:length(posicao)
    m=mod(posicao(i),L);
    n=(posicao(i)-m)/L +1;
    fill([m m+1 m+1 m],'b')
    
end

for j=1:iteracoes
    for u = 1:length(posicao)
        m=mod(posicao(u),L);
        n=(posicao(u)-m)/L +1;
        if F(m,n)==1
            if n-1>0 && n+1<L && m-1>0 && m+1<L
                soma = F(m-1,n-1)+F(m,n-1)+F(m+1,n)+F(m+1,n+1)+F(m,n+1)+F(m-1,n);
            elseif n-1<=0 && n+1<L && m-1>0 && m+1<L
                soma = F(m-1,n+L-1)+F(m,n+L-1)+F(m+1,n);
            elseif n+1>=L && n-1>0 && m-1>0 && m+1<L
                soma = F(m-1,n-L+1)+F(m,n-L+1)+F(m-1,n);
            elseif n-1>0 && n+1<L && m+1<L && m-1<=0
                soma = F(m+L-1,n+1)+F(m+L-1,n);
            elseif n-1>0 && n+1<L && m-1>0 && m+1>=L
                soma = F(m-1,n-1)+F(m-L+1,n)+F(m-L+1,n);
            elseif n-1<=0 && n+1<L && m-1<=0 && m+1<L
                soma = F(m+L-1,n);
            elseif n-1<=0 && n+1<L && m-1>0 && m+1>=L
                soma = F(m-1,n+L-1)+F(m-L+1,n);
            elseif n-1>0 && n+1>=L && m-1<=0 && m+1<L
                soma = F(m+L-1,n-L+1)+F(m+L-1,n);
            elseif n-1>0 && n+1>=L && m-1>0 && m+1>=L
                soma = F(m-1,n);   
            end 
            if soma < 2 || soma >3
                F(m,n)= 0;
            end
        if F(m,n)== 0
            if n-1>0 && n+1<L && m-1>0 && m+1<L
                soma = F(m-1,n);   
            end 
            if soma == 3
                F(m,n) = 1;
            end
        end
        end
        posicao2 = find(F);

    for q = 1:length(posicao2)
        m=mod(posicao2(q),L);
        n=(posicao2(q)-m)/L +1;
    
        fill([m m+1 m+1 m],'b')  
    end
    end
    
end
    

当我复制带有我单击的方块的图形时出现问题。右栏消失了..

如果有人能帮我怎么做,非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)