1 ! Copyright (C) 2006, 2007, 2008 Alex Chapman
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel arrays namespaces sequences math math.order
4 math.vectors colors random ;
7 TUPLE: layout states color ;
14 [ ! walls on each level
17 { 2 0 } { 3 0 } { 4 0 } { 5 0 } { 6 0 }
18 { 0 1 } { 1 1 } { 2 1 } { 6 1 }
20 { 0 3 } { 1 3 } { 2 3 } { 6 3 }
21 { 0 4 } { 2 4 } { 3 4 } { 6 4 }
22 { 0 5 } { 2 5 } { 6 5 } { 7 5 }
25 { 0 8 } { 1 8 } { 2 8 } { 3 8 } { 4 8 } { 5 8 } { 6 8 } { 7 8 }
27 { ! new level (access it by rotating the level piece)
28 { 4 0 } { 5 0 } { 6 0 } { 7 0 } { 8 0 }
31 { 2 3 } { 3 3 } { 4 3 } { 8 3 } { 9 3 } { 10 3 }
33 { 0 5 } { 1 5 } { 2 5 } { 4 5 } { 6 5 } { 7 5 } { 8 5 } { 10 5 } { 16 5 } { 17 5 } { 18 5 } { 19 5 } { 20 5 } { 21 5 }
34 { 0 6 } { 4 6 } { 6 6 } { 7 6 } { 8 6 } { 10 6 } { 11 6 } { 12 6 } { 13 6 } { 14 6 } { 15 6 } { 16 6 } { 21 6 }
36 { 0 8 } { 1 8 } { 2 8 } { 3 8 } { 4 8 } { 6 8 } { 7 8 } { 8 8 } { 10 8 } { 12 8 } { 13 8 } { 14 8 } { 15 8 } { 16 8 } { 21 8 }
37 { 4 9 } { 10 9 } { 11 9 } { 12 9 } { 16 9 } { 17 9 } { 18 9 } { 19 9 } { 20 9 } { 21 9 }
38 { 4 10 } { 5 10 } { 6 10 } { 7 10 } { 8 10 } { 9 10 } { 10 10 }
43 [ ! player position on each level
56 { 1 2 } { 5 3 } { 1 4 } { 4 5 } { 3 6 } { 6 6 } { 4 7 }
65 } [ first2 <layout> ] map component set-global
69 { ! first box on each level
81 { ! second box on each level
93 { ! third box on each level
104 { ! fourth box on each level
115 { ! fifth box on each level
126 { ! sixth box on each level
137 { ! seventh box on each level
146 } [ first2 <layout> ] map boxes set-global
151 ! number of boxes -1 of each level
154 } num-boxes set-global
156 : get-board ( -- layout )
157 component get first ;
159 : get-player ( -- layout )
160 component get second ;
162 : get-box ( n -- layout )
164 ! TODO add an n argument and get (n + 1)th
166 : get-goal ( -- layout )
167 component get third ;
169 : get-num-boxes ( n -- m )
170 ! outputs how many boxes are on each level, allows for different numbers of boxes per level