生命游戏的游戏代码

生命游戏的游戏代码,第1张

以下是生命游戏的Mathematica代码。 在圆环面地图上共有100×100个格子。每个格子的生死遵循下面的原则:

1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。

2. 如果首漏一个细胞周围有2个细胞为生,则该旦芹尺细胞的生死状模高态保持不变;

3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)。

Checkboard = RandomInteger[1, {100, 100}]

update[1, 2] := 1

update[_, 3] := 1

update[_, _] := 0

SetAttributes[update, Listable]

Dynamic[ArrayPlot[

Checkboard =

update[Checkboard,

Plus @@ Map[

RotateRight[Checkboard, #] &, {{-1, -1}, {-1, 0}, {-1,

1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}]]]]

一种比较初级的生命游戏matlab代码

function ca

m=30n=30p=.7h=100

for x=1:m

for y=1:n

r=rand(1)

if r>p

a(x,y)=1

else a(x,y)=0

end

end

end

for x=1:m

for y=1:n

if a(x,y)==1

fx=[x-1,x-1,x,x]fy=[y-1,y,y,y-1]fill(fx,fy,'g'),hold on

else

end

end

end

for k=1:h

fx=[0,m,m,0]fy=[0,0,n,n]fill(fx,fy,'k'),hold on

for x=2:m-1

for y=2:n-1

b(x,y)=a(x-1,y-1)+a(x-1,y)+a(x-1,y+1)+a(x,y-1)+a(x,y+1)+a(x+1,y-1)+a(x+1,y)+a(x+1,y+1)

if b(x,y)==2,c(x,y)=a(x,y)

elseif b(x,y)==3,c(x,y)=1

else c(x,y)=0

end

end

end

c(1:m,1)=a(1:m,1)c(1:m,n)=a(1:m,n)

for x=1:m

for y=1:n

if c(x,y)==1

fx=[x-1,x-1,x,x]fy=[y-1,y,y,y-1]fill(fx,fy,'g'),hold on

else

end

end

end

pause(.05)

a=c

end

clc

clear all

close all

m=30n=30p=.7h=100

%%

%生成30*30矩阵a,a的值根据随机数是否大于阈值0.7决定为1或0。

for x=1:m

    for y=1:n

        樱仿r=rand(1)%rand产生的是0到1(不包括1)的随机数。

        if r>p

            a(x,y)=1

        else a(x,y)=0

        end

    end

end

%%

for x=1:m

    for y=1:n

        if a(x,y)==1

     慎颂羡       fx=[x-1,x-1,x,x]

            fy=[y-1,y,y,y-1]

            fill(fx,fy,'g')

            %fill将点[x1,y1],[x2,y2],[x3,y3],[x4,y4]按序连线,后形成的图像进行填充,参数‘g’表示绿色。

            %[x1,y1],[x2,y2],[x3,y3],[x4,y4]对应写成[x1 x2 x3 x4][y1 y2 y3 y4],hold on表示画在一幅图上。

            hold on

        else

        end

    end

end

%即如果a(1,1)值为1,就在图像上在(1,1)点左下方画一个单位为宽拍1绿色的正方形。

%这一块可以不要,因为画图后被黑底覆盖。

%%

for k=1:h %运行100次

    fx=[0,m,m,0]fy=[0,0,n,n]fill(fx,fy,'k'),hold on%画一个30*30黑底

    for x=2:m-1

        for y=2:n-1

            b(x,y)=a(x-1,y-1)+a(x-1,y)+a(x-1,y+1)+a(x,y-1)+a(x,y+1)+a(x+1,y-1)+a(x+1,y)+a(x+1,y+1)

            %根据生命游戏规,取矩阵a元素(x,y)周围八个元素值的和,因为最外边一圈元素周围没有八个相邻元素,

            %所以不考虑,x、y范围2:m-1、2:n-1。

            if b(x,y)==2,c(x,y)=a(x,y)

                %如果(x,y)周围存在2个1,即游戏意义2个活细胞,则这个细胞下一刻生死与原来生死有关。

            elseif b(x,y)==3,c(x,y)=1

                %如果(x,y)周围存在3个1,即游戏意义2个活细胞,则这个细胞下一刻必存活(这里我假设1是存活)。

            else c(x,y)=0

                %如果(x,y)周围存在活细胞不是这两个值,即太多或太少,则这个细胞下一刻必死亡(这里我假设0是死亡)。

            end

        end

    end

%%

    c(1:m,1)=a(1:m,1)

    c(1:m,n)=a(1:m,n)%加上两侧的两列

    c(1,1:n)=a(1,1:n)%此处我感觉还应该加上最上最下两行,原程序没有。否则缺少的部分值为零,显示一直为黑。

    c(m,1:n)=a(m,1:n)%注意矩阵表示与画图等于进行了矩阵的转置,缺少矩阵上下两行则左右两侧显示为黑。

    for x=1:m

        for y=1:n

            if c(x,y)==1

                fx=[x-1,x-1,x,x]fy=[y-1,y,y,y-1]fill(fx,fy,'g'),hold on

            else

            end

        end

    end

    %画出c,同上画a

    pause(.05)%暂停0.05秒,观察变化过程

    a=c%将c赋值给a,即将此时的c当作前一时刻a,继续循环画图

end

%这个过程就是先生成一个随机30*30矩阵a,对a矩阵中间29*29部分根据生命游戏规则进行运算并显示,循环100次。

%可以发现最外边一圈图形是不变的。

你的sum和cells都是矩阵,但是维度不同。

如果是这样,你在这段程序的前面给sum预分配个空间sum=zeros(size(cells,1),size(cells,2))。

然后注意遍历稿备x,y的时候,不要到边界键岩毁上,否则x+1,y+1之类的就越界了。枣纤


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12518034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存