#define NCELLS 400 #define border 16 dim as ubyte rule = 110 sub evolve( row as uinteger, rule as ubyte, pattern() as ubyte ) dim as ubyte newp(NCELLS) dim as uinteger i dim as ubyte lookup for i = 0 to NCELLS-1 pset (i + border, row + border ), pattern(i)*15 lookup = 4*pattern((i-1) mod NCELLS) + 2*pattern(i) + pattern( (i+1) mod NCELLS ) newp(i)=0 if ( 2^lookup and rule )<>0 then newp(i) = 1 next i for i = 0 to NCELLS-1 pattern(i) = newp(i) next i end sub sub perform_simulation( rule as ubyte, pattern() as ubyte ) dim as integer i for i = 1 to NCELLS evolve(i, rule, pattern()) next i end sub sub reseed( pattern() as ubyte ) dim as integer i for i = 0 to NCELLS-1 pattern(i) = int(rnd+0.5) next i end sub sub display_text( rule as ubyte ) locate 4,58 : print using "Rule ###";rule locate 6,53 : print " R: reshuffle seed " locate 8,53 : print " <,>: change rule " locate 10,53 : print " Q: quit " end sub screen 12 randomize timer dim as boolean pattern(0 to NCELLS-1) dim as string key="R" do if key = "R" then cls reseed(pattern()) perform_simulation(rule,pattern()) display_text(rule) end if if key="<" then cls rule = (rule-1) mod 256 reseed(pattern()) perform_simulation(rule,pattern()) display_text(rule) end if if key=">" then cls rule = (rule+1) mod 256 reseed(pattern()) perform_simulation(rule,pattern()) display_text(rule) end if key = ucase(inkey) loop until ucase(key) = "Q"