{block 960} ( app conway's game of life) empt 962 load : cell 32 /mod adj adj over over at 16 u+ 16 + box ; : nocell drop ; : draw dup old @ 1 and jump nocell cell : cells [ 1023 ] for i draw -next ; : gen [ 1023 ] for i tick swap new ! -next [ 1023 ] for i new @ i old ! -next ; : loc [ row ] @ 32 * [ col ] @ + ; : cur loc dup old @ $ff * $ff0000 + color cell ; : back black screen $303010 color 40 40 at 583 dup box ; : g show back green cells gen keyboard ; : s gen show back blue cells cur keyboard ; : clear 1500 8 erase 16 [ row ] ! 16 [ col ] ! s ; : t loc old dup @ 1 or ( xor) swap ! ; : l -1 [ col ] +! [ col ] @ 31 and [ col ] ! ; : u -1 [ row ] +! [ row ] @ 31 and [ row ] ! ; : d 1 [ row ] +! [ row ] @ 31 and [ row ] ! ; : r 1 [ col ] +! [ col ] @ 31 and [ col ] ! ; : h pad nul nul accept nul nul nul nul nul l u d r nul nul nul nul glide glid2 glid3 glid4 clear s g t nul nul nul nul [ $250000 , 0 , $110160c , 0 , $1c1b1a19 , $20d0815 , 0 , clear glide g h ] {block 961} : s ( stop) : g ( go) : t ( toggle the square) : ludr ( left up down right) : . ( press s to stop then draw a shape using ludr and t to toggle) : . ( then press g to go or s to single step) : 1234 ( create gliders which move to the four corners counting clockwise from the top left) {block 962} ( conway's game of life) :var row [0x10] :var col [0x10] : old [ 1500 block ] + ; : new [ 1504 block ] + ; : nul ; : pos swap 32 /mod swap ; : val 32 * + swap over old @ 1 and + ; : up pos swap 31 + 31 and val ; : dn pos swap 1 + 31 and val ; : lt pos 31 + 31 and swap val ; : rt pos 1 + 31 and swap val ; : n [ 0 ] ; : s dup old @ 1 and ; : y [ 1 ] ; : tick dup 0 up lt dn dn rt rt up up nip jump n n s y n n n n n : adj swap 17 * 40 + ; : st ( rc-) [ col ] @ + swap [ row ] @ + 32 * + old 1 swap ! ; : glide 0 2 st 0 1 st 0 0 st 1 0 st 2 1 st ; : glid2 0 0 st 0 1 st 0 2 st 1 2 st 2 1 st ; : glid3 0 2 st 1 2 st 2 2 st 2 1 st 1 0 st ; : glid4 0 0 st 1 0 st 2 0 st 2 1 st 1 2 st ;