68 lines
1.6 KiB
Text
68 lines
1.6 KiB
Text
#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"
|