\ playspace.fs - Stars game play space \ +JMJ 2013 David Meyer <papa@sdf.org> 5 constant N \ Play space linear extent (NxNxN cube) N dup * constant N^2 \ value NxN N^2 N * constant N^3 \ value NxNxN : in-playspace? ( n -- f ) \ Is position index n within the defined play space? dup 0>= swap N^3 < and ; : x ( n1 -- n2 ) \ Return x coordinate n2 of position index n1. N mod ; : y ( n1 -- n2 ) \ Return y coordinate n2 of position index n1. N^2 mod N / ; : z ( n1 -- n2 ) \ Return z coordinate n2 of position index n1. N^2 / ; : valid-move? ( n1 n2 -- f ) \ Is a move from position index n1 to n2 valid according to game rules? 2dup in-playspace? swap in-playspace? and \ n1 and n2 are in playspace rot rot 2dup x swap x - abs rot rot 2dup y swap y - abs rot rot z swap z - abs + + 1 = \ move is single space in 1 direction and ; : test ( -- ) \ Test driver N^3 0 u+do cr i dup . [char] : emit space N^3 0 u+do dup i valid-move? if i . then loop loop cr ;