“生命”游戏
(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+n145 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)=1200 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