“生命”游戏

Author: 湖北 郑文衡 Date: 1994-04-01

        (1)对于处在‘生'的状态的格,若其八个邻格中有2或3个‘生',则继续存活,否则将因过于弧独或过于拥挤而死之。
        (2)对于处在‘死'状态的空格,若其八个邻格中有3个‘生',则该格转变为‘生'(代表繁殖过程),否则继续空着。
        利用这些规则来运行,棋盘上可以有绝灭、稳定、捺荡、爬行等各种有趣的现象发生。康维问:能否出现自我复制过程?若棋盘无限大,这种过程能否无限持续下去?……康维的生命游戏引起了广泛的兴趣,其后此游戏被玩得花样不断翻新,至今势头不衰。生命游戏开了八十年代元胞自动机(Cellular automata)研究热潮的先声。
        为此谨作如下介绍。并编出一个程序,该程序展示了一个可断产生“爬虫”的二维构形。同时演示产生爬虫的过程。该程序在AST386上通过,软件环境是TB。可用BASIC语言顺利移植到普通的IBM-PC系列机,只是运行速度会慢许多。
        5 rem glicer version 1.0
        10 color 7,1
        15 aim a(78,22),b(78,22)
        20 a(2,6)=1:a(3,6)=1:a(2,7)=1:a(3,7)=1
        25 for i=6 to 8:a(12,i)=1:a(16,i)=1:a(17,i)=1:next i
        30 a(14,4)=1:a(14,10)=1:a(13,9)=1:a(13,5)=1:a(15,5)=1:a(15,9)=1
        35 for i=22 to 25:for j=3 to 7:a(i,j)=1:next j,i
        40 a(22,3)=1:a(22,7)=0:a(23,5)=0:a(24,5)=0
        45 a(26,2)=1:a(26,3)=1:a(26,7)=1;a(26,8)=1
        50 a(35,4)=1:a(35,5)=1:a(36,4)=1:a(36,5)=1
        70 gosub 1000
        75 for c=0 to 160
        80 for i=0 to 78
        90 for j=0 to 22
        100 f=0
        110 for m=-1 to 1 step 1
        120 for n=-1 to 1 step 1
        130 k=i+m
        135 k=k-(k<0)*79+(k>78)*79
        140 l=j+n145 l=l-(l<0)*23+(L>22)23
        150 f=f+a(k,1)
        160 next n
        165 next m
        170 f=f-a(i,j)
        180 if((a(i,j)=1 and f>3) or (a(i,j)=1 and f<2)) then b(i,j)=0
        190 if((a(i,j)=0 and f=3) or (a(imj)=1 and (f=2 or f=3))) then b(i,j)=1200 next j
        201 next i
        210 for i=0 to 78
        211 for j=0 to 22
        212 a(i,j)=b(i,j)
        213 b(i,j)=0
        218 next j
        219 next i
        220 gosub 1000
        230 next c
        240 stop
        250 end
        1000 cls
        1010 for j=0 to 21
        1020 for i=0 to 78
        1030 if a(i,j)=1 then print"*";else print".";
        1040 next i
        1050 print
        1060 next j
        1080 return
        1090 end