![]() ![]() | ![]() |
1.1 pazsan 1: \ sokoban - a maze game in FORTH
2:
1.6 ! anton 3: \ Copyright (C) 1995,1997,1998,2003 Free Software Foundation, Inc.
1.5 anton 4:
5: \ This file is part of Gforth.
6:
7: \ Gforth is free software; you can redistribute it and/or
8: \ modify it under the terms of the GNU General Public License
9: \ as published by the Free Software Foundation; either version 2
10: \ of the License, or (at your option) any later version.
11:
12: \ This program is distributed in the hope that it will be useful,
13: \ but WITHOUT ANY WARRANTY; without even the implied warranty of
14: \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: \ GNU General Public License for more details.
16:
17: \ You should have received a copy of the GNU General Public License
18: \ along with this program; if not, write to the Free Software
19: \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
20:
1.1 pazsan 21: \ Contest from Rick VanNorman in comp.lang.forth
22:
23: \ SOKOBAN
24:
25: \ Sokoban is a visual game of pushing. You (Soko) are represented by the
26: \ at-sign "@" You may move freely through the maze on unoccupied spaces.
27: \ The dollar-signs "$" are the rocks you have to push. You can only push
28: \ one rock at a time, and cannot push a rock through a wall "#" or over
29: \ another rock. The object is to push the rocks to their goals which are
30: \ indicated by the periods ".". There are 50 levels, the first of which
31: \ is shown below.
32:
33: \ program is ANS FORTH with environmental dependency of case-insensitiv
1.2 pazsan 34: \ source. Tested with gforth, bigFORTH and pfe
1.1 pazsan 35:
1.2 pazsan 36: \ bell (7) is replaced with "Wuff!" ;-)
1.1 pazsan 37: \ (this is a german joke)
38: \ I don't like the keyboard interpreting CASE-statement either, but
39: \ was to lazy to use a table.
40: \ I could have used blocks as level tables, but as I don't have a good
41: \ block editor for gforth now, I let it be.
42:
43: 40 Constant /maze \ maximal maze line
44:
45: Create maze 1 cells allot /maze 25 * allot \ current maze
46: Variable mazes 0 mazes ! \ root pointer
47: Variable soko 0 soko ! \ player position
48: Variable >maze 0 >maze ! \ current compiled maze
49:
50: \ score information
51:
52: Variable rocks 0 rocks ! \ number of rocks left
53: Variable level# 0 level# ! \ Current level
54: Variable moves 0 moves ! \ number of moves
55: Variable score 0 score ! \ total number of scores
56:
57: : new-maze ( n -- addr ) \ add a new level
58: here mazes rot 1 ?DO @ LOOP !
59: 0 , 0 , here >maze ! 0 , ;
60: : count-$ ( addr u -- n ) 0 rot rot
1.2 pazsan 61: over + swap ?DO I c@ [char] $ = - LOOP ;
1.1 pazsan 62: : m: ( "string" -- ) \ add a level line (top first!)
63: -1 parse tuck 2dup count-$ >maze @ 1 cells - +!
64: here swap move dup allot
65: /maze swap - here over bl fill allot
66: >maze @ here over cell+ - swap ! ;
67:
68: : maze-field ( -- addr n )
69: maze dup cell+ swap @ chars ;
70:
71: : .score ( -- )
72: ." Level: " level# @ 2 .r ." Score: " score @ 4 .r
73: ." Moves: " moves @ 6 .r ." Rocks: " rocks @ 2 .r ;
74:
75: : .maze ( -- ) \ display maze
76: 0 0 at-xy .score
1.2 pazsan 77: cr maze-field over + swap
1.1 pazsan 78: DO I /maze type cr /maze chars +LOOP ;
79:
80: : find-soko ( -- n )
81: maze-field 0
82: DO dup I chars + c@ [char] @ =
83: IF drop I UNLOOP EXIT THEN
84: LOOP true abort" No player in field!" ;
85:
86: : level ( n -- flag ) \ finds level n
87: dup level# !
88: mazes swap 0
89: ?DO @ dup 0= IF drop false UNLOOP EXIT THEN LOOP
90: cell+ dup @ rocks !
91: cell+ dup @ cell+ maze swap chars move
92: find-soko soko ! true ;
93:
94: \ now the playing rules as replacement strings
95:
96: : 'soko ( -- addr ) \ gives player's address
97: maze cell+ soko @ chars + ;
98:
99: : apply-rule? ( addr u offset -- flag )
100: 'soko 2swap
101: \ offset soko-addr addr u
102: 0 DO
103: over c@ over c@ <>
104: IF drop 2drop false UNLOOP EXIT THEN
105: >r over chars + r> char+
106: LOOP 2drop drop true ;
107:
108: : apply-rule! ( addr u offset -- )
109: 'soko
110: 2swap
111: \ offset soko-addr addr u
112: 0 DO
113: count rot tuck c! rot tuck chars + rot
114: LOOP 2drop drop ;
115:
116: : play-rule ( addr1 u1 addr2 u2 offset -- flag )
117: >r 2swap r@ apply-rule?
1.2 pazsan 118: IF r> apply-rule! true ELSE r> drop 2drop false THEN ;
1.1 pazsan 119:
120: \ player may move up, down, left and right
121:
122: : move: ( offset -- )
123: Create ,
124: DOES> @ >r 1 moves +!
125: S" @ " S" @" r@ play-rule IF r> soko +! EXIT THEN
126: S" @." S" &" r@ play-rule IF r> soko +! EXIT THEN
127: S" @$ " S" @$" r@ play-rule IF r> soko +! EXIT THEN
128: S" @*." S" &*" r@ play-rule IF r> soko +! EXIT THEN
129: S" @* " S" &$" r@ play-rule
130: IF r> soko +! 1 rocks +! -1 score +! EXIT THEN
131: S" @$." S" @*" r@ play-rule
132: IF r> soko +! -1 rocks +! 1 score +! EXIT THEN
133: S" &*." S" .&*" r@ play-rule IF r> soko +! EXIT THEN
134: S" &$ " S" .@$" r@ play-rule IF r> soko +! EXIT THEN
135: S" & " S" .@" r@ play-rule IF r> soko +! EXIT THEN
136: S" &." S" .&" r@ play-rule IF r> soko +! EXIT THEN
137: S" &* " S" .&$" r@ play-rule
138: IF r> soko +! 1 rocks +! -1 score +! EXIT THEN
1.4 pazsan 139: S" &$." S" .@*" r@ play-rule
140: IF r> soko +! 1 rocks +! -1 score +! EXIT THEN
1.2 pazsan 141: -1 moves +! r> drop ;
1.1 pazsan 142:
143: 1 move: soko-right
144: -1 move: soko-left
145: /maze move: soko-down
146: /maze negate move: soko-up
147:
148: : print-help
149: ." Move soko '@' with h, j, k or l key (like vi)" cr
150: ." or with vt100 cursor keys." cr ;
151:
152: : play-loop ( -- )
153: BEGIN
154: rocks @ 0=
155: IF
156: level# @ 1+ level 0= IF EXIT THEN
157: THEN
158: .maze
159: key
160: CASE
161: [char] ? OF print-help false ENDOF
162:
163: [char] h OF soko-left false ENDOF
164: [char] j OF soko-down false ENDOF
165: [char] k OF soko-up false ENDOF
166: [char] l OF soko-right false ENDOF
167:
168: \ vt100 cursor keys should work too
169: 27 OF key [char] [ <> ENDOF
170: [char] D OF soko-left false ENDOF
171: [char] B OF soko-down false ENDOF
172: [char] A OF soko-up false ENDOF
173: [char] C OF soko-right false ENDOF
174:
175: [char] q OF true ENDOF
1.2 pazsan 176: false swap ENDCASE
1.1 pazsan 177: UNTIL ;
178:
179: \ start game with "sokoban"
180:
181: : sokoban ( -- )
1.2 pazsan 182: page 1 level IF play-loop ." Game finished!" THEN ;
1.1 pazsan 183:
184: 001 new-maze
185: m: #####
186: m: # #
187: m: #$ #
188: m: ### $##
189: m: # $ $ #
190: m: ### # ## # ######
191: m: # # ## ##### ..#
192: m: # $ $ ..#
193: m: ##### ### #@## ..#
194: m: # #########
195: m: #######
196: 002 new-maze
197: m: ############
198: m: #.. # ###
199: m: #.. # $ $ #
200: m: #.. #$#### #
201: m: #.. @ ## #
202: m: #.. # # $ ##
203: m: ###### ##$ $ #
204: m: # $ $ $ $ #
205: m: # # #
206: m: ############
207: 003 new-maze
208: m: ########
209: m: # @#
210: m: # $#$ ##
211: m: # $ $#
212: m: ##$ $ #
213: m: ######### $ # ###
214: m: #.... ## $ $ #
215: m: ##... $ $ #
216: m: #.... ##########
217: m: ########
218: 004 new-maze
219: m: ########
220: m: # ....#
221: m: ############ ....#
222: m: # # $ $ ....#
223: m: # $$$#$ $ # ....#
224: m: # $ $ # ....#
225: m: # $$ #$ $ $########
226: m: # $ # #
227: m: ## #########
228: m: # # ##
229: m: # $ ##
230: m: # $$#$$ @#
231: m: # # ##
232: m: ###########
233: 005 new-maze
234: m: #####
235: m: # #####
236: m: # #$## #
237: m: # $ #
238: m: ######### ### #
239: m: #.... ## $ $###
240: m: #.... $ $$ ##
241: m: #.... ##$ $ @#
242: m: ######### $ ##
243: m: # $ $ #
244: m: ### ## #
245: m: # #
246: m: ######
247: 006 new-maze
248: m: ###### ###
249: m: #.. # ##@##
250: m: #.. ### #
251: m: #.. $$ #
252: m: #.. # # $ #
253: m: #..### # $ #
254: m: #### $ #$ #
255: m: # $# $ #
256: m: # $ $ #
257: m: # ## #
258: m: #########
259: 007 new-maze
260: m: #####
261: m: ####### ##
262: m: ## # @## $$ #
263: m: # $ #
264: m: # $ ### #
265: m: ### #####$###
266: m: # $ ### ..#
267: m: # $ $ $ ...#
268: m: # ###...#
269: m: # $$ # #...#
270: m: # ### #####
271: m: ####
272: 008 new-maze
273: m: ####
274: m: # ###########
275: m: # $ $ $ #
276: m: # $# $ # $ #
277: m: # $ $ # #
278: m: ### $# # #### #
279: m: #@#$ $ $ ## #
280: m: # $ #$# # #
281: m: # $ $ $ $ #
282: m: ##### #########
283: m: # #
284: m: # #
285: m: #......#
286: m: #......#
287: m: #......#
288: m: ########
289: 009 new-maze
290: m: #######
291: m: # ...#
292: m: ##### ...#
293: m: # . .#
294: m: # ## ...#
295: m: ## ## ...#
296: m: ### ########
297: m: # $$$ ##
298: m: ##### $ $ #####
299: m: ## #$ $ # #
300: m: #@ $ $ $ $ #
301: m: ###### $$ $ #####
302: m: # #
303: m: ########
304: 010 new-maze
305: m: ### #############
306: m: ##@#### # #
307: m: # $$ $$ $ $ ...#
308: m: # $$$# $ #...#
309: m: # $ # $$ $$ #...#
310: m: ### # $ #...#
311: m: # # $ $ $ #...#
312: m: # ###### ###...#
313: m: ## # # $ $ #...#
314: m: # ## # $$ $ $##..#
315: m: # ..# # $ #.#
316: m: # ..# # $$$ $$$ #.#
317: m: ##### # # #.#
318: m: # ######### #.#
319: m: # #.#
320: m: ###############
321: 011 new-maze
322: m: ####
323: m: #### # #
324: m: ### @###$ #
325: m: ## $ #
326: m: ## $ $$## ##
327: m: # #$## #
328: m: # # $ $$ # ###
329: m: # $ # # $ #####
330: m: #### # $$ # #
331: m: #### ## $ #
332: m: #. ### ########
333: m: #.. ..# ####
334: m: #...#.#
335: m: #.....#
336: m: #######
337: 012 new-maze
338: m: ################
339: m: # #
340: m: # # ###### #
341: m: # # $ $ $ $# #
342: m: # # $@$ ## ##
343: m: # # $ $ $###...#
344: m: # # $ $ ##...#
345: m: # ###$$$ $ ##...#
346: m: # # ## ##...#
347: m: ##### ## ##...#
348: m: ##### ###
349: m: # #
350: m: #######
351: 013 new-maze
352: m: ##### ####
353: m: #...# # ####
354: m: #...### $ #
355: m: #....## $ $###
356: m: ##....## $ #
357: m: ###... ## $ $ #
358: m: # ## # $ #
359: m: # ## # ### ####
360: m: # $ # #$ $ #
361: m: # $ @ $ $ #
362: m: # # $ $$ $ ###
363: m: # ###### ###
364: m: # ## ####
365: m: ###
366: 014 new-maze
367: m: #########
368: m: ## ## ######
369: m: ### # # ###
370: m: # $ #$ # # ... #
371: m: # # $#@$## # #.#. #
372: m: # # #$ # . . #
373: m: # $ $ # # #.#. #
374: m: # ## ##$ $ . . #
375: m: # $ # # #$#.#. #
376: m: ## $ $ $ $... #
377: m: #$ ###### ## #
378: m: # # ##########
379: m: ####
380: 015 new-maze
381: m: #######
382: m: ####### #
383: m: # # $@$ #
384: m: #$$ # #########
385: m: # ###......## #
386: m: # $......## # #
387: m: # ###...... #
388: m: ## #### ### #$##
389: m: # #$ # $ # #
390: m: # $ $$$ # $## #
391: m: # $ $ ###$$ # #
392: m: ##### $ # #
393: m: ### ### # #
394: m: # # #
395: m: ######## #
396: m: ####
397: 016 new-maze
398: m: ########
399: m: # # #
400: m: # $ #
401: m: ### #$ ####
402: m: # $ ##$ #
403: m: # # @ $ # $#
404: m: # # $ ####
405: m: ## ####$## #
406: m: # $#.....# # #
407: m: # $..**. $# ###
408: m: ## #.....# #
409: m: # ### #######
410: m: # $$ # #
411: m: # # #
412: m: ###### #
413: m: #####
414: 017 new-maze
415: m: #####
416: m: # ##
417: m: # # ####
418: m: # $ #### #
419: m: # $$ $ $#
420: m: ###@ #$ ##
421: m: # ## $ $ ##
422: m: # $ ## ## .#
423: m: # #$##$ #.#
424: m: ### $..##.#
425: m: # #.*...#
426: m: # $$ #.....#
427: m: # #########
428: m: # #
429: m: ####
430: 018 new-maze
431: m: ##########
432: m: #.. # #
433: m: #.. #
434: m: #.. # ####
435: m: ####### # ##
436: m: # #
437: m: # # ## # #
438: m: #### ## #### ##
439: m: # $ ##### # #
440: m: # # $ $ # $ #
441: m: # @$ $ # ##
442: m: #### ## #######
443: m: # #
444: m: ######
445: 019 new-maze
446: m: ###########
447: m: # . # #
448: m: # #. @ #
449: m: ##### ##..# ####
450: m: ## # ..### ###
451: m: # $ #... $ # $ #
452: m: # .. ## ## ## #
453: m: ####$##$# $ # # #
454: m: ## # #$ $$ # #
455: m: # $ # # # $## #
456: m: # #
457: m: # ########### #
458: m: #### ####
459: 020 new-maze
460: m: ######
461: m: # @####
462: m: ##### $ #
463: m: # ## ####
464: m: # $ # ## #
465: m: # $ # ##### #
466: m: ## $ $ # #
467: m: ## $ $ ### # #
468: m: ## # $ # # #
469: m: ## # #$# # #
470: m: ## ### # # ######
471: m: # $ #### # #....#
472: m: # $ $ ..#.#
473: m: ####$ $# $ ....#
474: m: # # ## ....#
475: m: ###################
476: 021 new-maze
477: m: ##########
478: m: ##### ####
479: m: # # $ #@ #
480: m: # #######$#### ###
481: m: # # ## # #$ ..#
482: m: # # $ # # #.#
483: m: # # $ # #$ ..#
484: m: # # ### ## #.#
485: m: # ### # # #$ ..#
486: m: # # # #### #.#
487: m: # #$ $ $ #$ ..#
488: m: # $ # $ $ # #.#
489: m: #### $### #$ ..#
490: m: # $$ ###....#
491: m: # ## ######
492: m: ########
493: 022 new-maze
494: m: #########
495: m: # #
496: m: # ####
497: m: ## #### # #
498: m: ## #@## #
499: m: # $$$ $ $$#
500: m: # # ## $ #
501: m: # # ## $ ####
502: m: #### $$$ $# #
503: m: # ## ....#
504: m: # # # #.. .#
505: m: # # # ##...#
506: m: ##### $ #...#
507: m: ## #####
508: m: #####
509: 023 new-maze
510: m: ###### ####
511: m: # ####### #####
512: m: # $# # $ # #
513: m: # $ $ $ # $ $ #
514: m: ##$ $ # @# $ #
515: m: # $ ########### ##
516: m: # # #.......# $#
517: m: # ## # ......# #
518: m: # # $........$ #
519: m: # # $ #.... ..# #
520: m: # $ $####$#### $#
521: m: # $ ### $ $ ##
522: m: # $ $ $ $ #
523: m: ## ###### $ ##### #
524: m: # # #
525: m: ###################
526: 024 new-maze
527: m: #######
528: m: # # ####
529: m: ##### $#$ # ##
530: m: #.. # # # #
531: m: #.. # $#$ # $####
532: m: #. # #$ # #
533: m: #.. $# # $ #
534: m: #..@# #$ #$ # #
535: m: #.. # $# $# #
536: m: #.. # #$$#$ # ##
537: m: #.. # $# # $#$ #
538: m: #.. # # # # #
539: m: ##. #### ##### #
540: m: #### #### #####
541: 025 new-maze
542: m: ###############
543: m: #.......... .####
544: m: #..........$$.# #
545: m: ###########$ # ##
546: m: # $ $ $ #
547: m: ## #### # $ # #
548: m: # # ## # ##
549: m: # $# # ## ### ##
550: m: # $ #$### ### ##
551: m: ### $ # # ### ##
552: m: ### $ ## # # ##
553: m: # $ # $ $ $ #
554: m: # $ $#$$$ # #
555: m: # # $ #####
556: m: # @## # # #
557: m: ##############
558: 026 new-maze
559: m: ####
560: m: # ##############
561: m: # # ..#......#
562: m: # # # ##### ...#
563: m: ##$# ........#
564: m: # ##$###### ####
565: m: # $ # ######@ #
566: m: ##$ # $ ###### #
567: m: # $ #$$$## #
568: m: # # #$#$###
569: m: # #### #$$$$$ #
570: m: # # $ # #
571: m: # # ## ###
572: m: # ######$###### $ #
573: m: # # # #
574: m: ########## #####
575: 027 new-maze
576: m: #######
577: m: # # #####
578: m: ## # #...###
579: m: # $# #... #
580: m: # $ #$$ ... #
581: m: # $# #... .#
582: m: # # $########
583: m: ##$ $ $ #
584: m: ## # $$ # #
585: m: ###### ##$$@#
586: m: # ##
587: m: ########
588: 028 new-maze
589: m: #################
590: m: #... # # ##
591: m: ##..... $## # #$ #
592: m: #......# $ # #
593: m: #......# # # # #
594: m: ######### $ $ $ #
595: m: # #$##$ ##$##
596: m: ## $ # $ #
597: m: # ## ### # ##$ #
598: m: # $ $$ $ $ #
599: m: # $ $##$ ######
600: m: ####### @ ##
601: m: ######
602: 029 new-maze
603: m: #####
604: m: ##### #
605: m: ## $ $ ####
606: m: ##### $ $ $ ##.#
607: m: # $$ ##..#
608: m: # ###### ###.. #
609: m: ## # # #... #
610: m: # $ # #... #
611: m: #@ #$ ## ####...#
612: m: #### $ $$ ##..#
613: m: ## $ $ $...#
614: m: # $$ $ # .#
615: m: # $ $ ####
616: m: ###### #
617: m: #####
618: 030 new-maze
619: m: #####
620: m: # ##
621: m: # $ #########
622: m: ## # # ######
623: m: ## # $#$#@ # #
624: m: # # $ # $ #
625: m: # ### ######### ##
626: m: # ## ..*..... # ##
627: m: ## ## *.*..*.* # ##
628: m: # $########## ##$ #
629: m: # $ $ $ $ #
630: m: # # # # # #
631: m: ###################
632: 031 new-maze
633: m: ###########
634: m: # # #
635: m: ##### # $ $ #
636: m: # ##### $## # ##
637: m: # $ ## # ## $ #
638: m: # $ @$$ # ##$$$ #
639: m: ## ### # ## #
640: m: ## # ### #####$#
641: m: ## # $ #....#
642: m: # ### ## $ #....##
643: m: # $ $ # #..$. #
644: m: # ## $ # ##.... #
645: m: ##### ######...##
646: m: ##### #####
647: 032 new-maze
648: m: ####
649: m: # #########
650: m: ## ## # #
651: m: # $# $@$ ####
652: m: #$ $ # $ $# ##
653: m: ## $## #$ $ #
654: m: # # # # $$$ #
655: m: # $ $ $## ####
656: m: # $ $ #$# # #
657: m: ## ### ###$ #
658: m: # #.... #
659: m: ####......####
660: m: #....####
661: m: #...##
662: m: #...#
663: m: #####
664: 033 new-maze
665: m: ####
666: m: ##### #
667: m: ## $#
668: m: ## $ ## ###
669: m: #@$ $ # $ #
670: m: #### ## $#
671: m: #....#$ $ #
672: m: #....# $#
673: m: #.... $$ ##
674: m: #... # $ #
675: m: ######$ $ #
676: m: # ###
677: m: #$ ###
678: m: # #
679: m: ####
680: 034 new-maze
681: m: ############
682: m: ## ## #
683: m: ## $ $ #
684: m: #### ## $$ #
685: m: # $ # #
686: m: # $$$ # ####
687: m: # # # $ ##
688: m: # # # $ #
689: m: # $# $# #
690: m: # ..# ####
691: m: ####.. $ #@#
692: m: #.....# $# #
693: m: ##....# $ #
694: m: ###..## #
695: m: ############
696: 035 new-maze
697: m: #########
698: m: #.... ##
699: m: #.#.# $ ##
700: m: ##....# # @##
701: m: # ....# # ##
702: m: # #$ ##$ #
703: m: ## ### $ #
704: m: #$ $ $ $# #
705: m: # # $ $ ## #
706: m: # ### ## #
707: m: # ## ## ##
708: m: # $ # $ #
709: m: ###$ $ ###
710: m: # #####
711: m: ####
712: 036 new-maze
713: m: ############ ######
714: m: # # # ###....#
715: m: # $$# @ .....#
716: m: # # ### # ....#
717: m: ## ## ### # ....#
718: m: # $ $ # # ####
719: m: # $ $## # #
720: m: #### # #### # ## #
721: m: # # #$ ## # #
722: m: # $ $ # ## # ##
723: m: # # $ $ # # #
724: m: # $ ## ## # #####
725: m: # $$ $$ #
726: m: ## ## ### $ #
727: m: # # # #
728: m: ###### ######
729: 037 new-maze
730: m: #####
731: m: ##### ###### #
732: m: # #### $ $ $ #
733: m: # $ ## ## ## ##
734: m: # $ $ $ $ #
735: m: ### $ ## ## ##
736: m: # ##### #####$$ #
737: m: ##$##### @## #
738: m: # $ ###$### $ ##
739: m: # $ # ### ###
740: m: # $$ $ # $$ #
741: m: # # ## #
742: m: #######.. .###
743: m: #.........#
744: m: #.........#
745: m: ###########
746: 038 new-maze
747: m: ###########
748: m: #...... #########
749: m: #...... # ## #
750: m: #..### $ $ #
751: m: #... $ $ # ## #
752: m: #...#$##### # #
753: m: ### # #$ #$ #
754: m: # $$ $ $ $## #
755: m: # $ #$#$ ##$ #
756: m: ### ## # ## #
757: m: # $ $ ## ######
758: m: # $ $ #
759: m: ## # # #
760: m: #####@#####
761: m: ###
762: 039 new-maze
763: m: ####
764: m: ####### @#
765: m: # $ #
766: m: # $## $#
767: m: ##$#...# #
768: m: # $... #
769: m: # #. .# ##
770: m: # # #$ #
771: m: #$ $ #
772: m: # #######
773: m: ####
774: 040 new-maze
775: m: ######
776: m: #############....#
777: m: ## ## ##....#
778: m: # $$## $ @##....#
779: m: # $$ $# ....#
780: m: # $ ## $$ # # ...#
781: m: # $ ## $ # ....#
782: m: ## ##### ### ##.###
783: m: ## $ $ ## . #
784: m: # $### # ##### ###
785: m: # $ # #
786: m: # $ #$ $ $### #
787: m: # $$$# $ # ####
788: m: # # $$ #
789: m: ###### ###
790: m: #####
791: 041 new-maze
792: m: ############
793: m: # ##
794: m: # # #$$ $ #
795: m: #$ #$# ## @#
796: m: ## ## # $ # ##
797: m: # $ #$ # #
798: m: # # $ # #
799: m: ## $ $ ## #
800: m: # # ## $ #
801: m: # ## $$# #
802: m: ######$$ # #
803: m: #....# ########
804: m: #.#... ##
805: m: #.... #
806: m: #.... #
807: m: #########
808: 042 new-maze
809: m: #####
810: m: ## ##
811: m: ## #
812: m: ## $$ #
813: m: ## $$ $ #
814: m: # $ $ #
815: m: #### # $$ #####
816: m: # ######## ## #
817: m: #. $$$@#
818: m: #.# ####### ## ##
819: m: #.# #######. #$ $##
820: m: #........... # #
821: m: ############## $ #
822: m: ## ##
823: m: ####
824: 043 new-maze
825: m: ########
826: m: #### ######
827: m: # ## $ $ @#
828: m: # ## ##$#$ $ $##
829: m: ### ......# $$ ##
830: m: # ......# # #
831: m: # # ......#$ $ #
832: m: # #$...... $$# $ #
833: m: # ### ###$ $ ##
834: m: ### $ $ $ $ #
835: m: # $ $ $ $ #
836: m: ###### ######
837: m: #####
838: 044 new-maze
839: m: #######
840: m: ##### # ####
841: m: # # $ #
842: m: #### #$$ ## ## #
843: m: ## # # ## ###
844: m: # ### $#$ $ $ #
845: m: #... # ## # #
846: m: #...# @ # ### ##
847: m: #...# ### $ $ #
848: m: ######## ## # #
849: m: #########
850: 045 new-maze
851: m: #####
852: m: # #
853: m: # # #######
854: m: # $@######
855: m: # $ ##$ ### #
856: m: # #### $ $ #
857: m: # ##### # #$ ####
858: m: ## #### ##$ #
859: m: # $# $ # ## ## #
860: m: # # #...# #
861: m: ###### ### ... #
862: m: #### # #...# #
863: m: # ### # #
864: m: # #
865: m: #########
866: 046 new-maze
867: m: ##########
868: m: # ####
869: m: # ###### # ##
870: m: # # $ $ $ $ #
871: m: # #$ #
872: m: ###$ $$# ###
873: m: # ## # $##
874: m: ##$# $ @#
875: m: # $ $ ###
876: m: # # $ #
877: m: # ## # #
878: m: ## ##### #
879: m: # #
880: m: #.......###
881: m: #.......#
882: m: #########
883: 047 new-maze
884: m: ####
885: m: ######### ##
886: m: ## $ $ #####
887: m: # ## ## ##...#
888: m: # #$$ $ $$#$##...#
889: m: # # @ # ...#
890: m: # $# ###$$ ...#
891: m: # $ $$ $ ##....#
892: m: ###$ #######
893: m: # #######
894: m: ####
895: 048 new-maze
896: m: #########
897: m: #*.*#*.*#
898: m: #.*.*.*.#
899: m: #*.*.*.*#
900: m: #.*.*.*.#
901: m: #*.*.*.*#
902: m: ### ###
903: m: # #
904: m: ###### ######
905: m: # #
906: m: # $ $ $ $ $ #
907: m: ## $ $ $ $ ##
908: m: #$ $ $ $ $#
909: m: # $@$ #
910: m: # ##### #
911: m: #### ####
912: 049 new-maze
913: m: ####
914: m: # ##
915: m: # ##
916: m: # $$ ##
917: m: ###$ $ ##
918: m: #### $ #
919: m: ### # ##### #
920: m: # # #....$ #
921: m: # # $ ....# #
922: m: # $ # #.*..# #
923: m: ### #### ### #
924: m: #### @$ ##$##
925: m: ### $ #
926: m: # ## #
927: m: #########
928: 050 new-maze
929: m: ############
930: m: ##.. # #
931: m: ##..* $ $ #
932: m: ##..*.# # # $##
933: m: #..*.# # # $ #
934: m: ####...# # # #
935: m: # ## # #
936: m: # @$ $ ### # ##
937: m: # $ $ # # #
938: m: ###$$ # # # # #
939: m: # $ # # #####
940: m: # $# ##### #
941: m: #$ # # # #
942: m: # ### ## #
943: m: # # # ##
944: m: #### ######
945: 051 new-maze
946: m: #########
947: m: # #
948: m: # $ $#
949: m: #### #
950: m: # $ ##
951: m: #### $ #
952: m: #.. $ ## ####
953: m: #.. $## #
954: m: #.. $ #
955: m: #.###$### #@#
956: m: #.# # ###
957: m: ### #######
958: 052 new-maze
959: m: ####################
960: m: # ########## @#
961: m: # $# # ######
962: m: # #### # ###
963: m: ##### # ###
964: m: # $ # ###
965: m: # $#### # # #
966: m: # # # #..#$### # #
967: m: # # #$ #..# $ $$ #
968: m: # #..# # # #
969: m: # # #..# # # #
970: m: ####################
971: 053 new-maze
972: m: ####################
973: m: # ###
974: m: # $# $ ## $ ##
975: m: # $### # $$ ##
976: m: #.### $ $ ## ##
977: m: #...# # # #$ #
978: m: #..##$$#### $ # #
979: m: #...# $ ## ###
980: m: #...$ ### # # #
981: m: ##.. $# ## ##@ #
982: m: ###.# #
983: m: ####################
984: 054 new-maze
985: m: ####################
986: m: # # # # #@#
987: m: # $ $ $ # #
988: m: ## ###..## ### #
989: m: # #....#$# $### #
990: m: # $ #....# $ $ $ #
991: m: # #....# # # $ $ #
992: m: # ##..## #$# #
993: m: ##$## ## # #$##
994: m: # $ $ # # #
995: m: # # # # #
996: m: ####################
997: 055 new-maze
998: m: ####################
999: m: # @## # ##
1000: m: # ## $ $ ##
1001: m: # ###....# # # ###
1002: m: # #....# # # $ #
1003: m: ### #...# # #
1004: m: ## ##.# $ $ #
1005: m: ## $ $ ### # # ###
1006: m: ## $ # # $ #
1007: m: #### $ $# # # # $ #
1008: m: #### # # ##
1009: m: ####################
1010: 056 new-maze
1011: m: ####################
1012: m: # # ## # @###
1013: m: ## $ # $### #
1014: m: ##$# $ ##$# $ $ #
1015: m: # $# $ ###
1016: m: # ## $ ### #....#
1017: m: # # $# # # # #....##
1018: m: # $ $ # #....###
1019: m: ##$ ### $ #....####
1020: m: # # $ ######
1021: m: # # # ######
1022: m: ####################
1023: 057 new-maze
1024: m: ####################
1025: m: #@ ### # # #
1026: m: # # # # $ $ #
1027: m: ##### # $ $#$# #
1028: m: #.#..# ##$ $ #
1029: m: #..... $ # ##
1030: m: #..... ###$##$###
1031: m: #.#..# $ # #
1032: m: ##### # #$ $ #
1033: m: ##### # $ $ $ #
1034: m: ##### # # # # #
1035: m: ####################
1036: 058 new-maze
1037: m: ####################
1038: m: ##... ## # # #
1039: m: #.... $ ## #
1040: m: #....# # #$###$ #
1041: m: #...# # # #
1042: m: ##.# #$ # $## #
1043: m: # # # $ $ ### $ #
1044: m: # $ $ # # ## #
1045: m: ## # ## #$$# $# # #
1046: m: # # $ $ # ##
1047: m: # # # # @#
1048: m: ####################
1049: 059 new-maze
1050: m: ####################
1051: m: # # #@# ## #####
1052: m: # # # $ $ #####
1053: m: # # ###### $ ###
1054: m: # # #....# $$ #
1055: m: ##$##$##....# #
1056: m: # #....##$##$##
1057: m: # $$ #....# #
1058: m: # $ $ # # ### #
1059: m: ##### $ $ $ #
1060: m: ##### # # # ##
1061: m: ####################
1062: 060 new-maze
1063: m: ####################
1064: m: # ###..### #
1065: m: # $$ ###..### $@ #
1066: m: # # ##......# $ #
1067: m: # #......# $ #
1068: m: #### ###..######$ #
1069: m: # $$$ #..# # #
1070: m: # $# $ $ $$ #$ #
1071: m: # # ## $ ## # #
1072: m: # $ $ ## $ $ #
1073: m: # # ## ## # #
1074: m: ####################
1075: 061 new-maze
1076: m: ####################
1077: m: # # # # # # #
1078: m: # @# # ## $ $ ##
1079: m: #### # # # $ #
1080: m: # # ## #$ ## ## #
1081: m: # $ $ $ #
1082: m: #..###$$## $##$ ## #
1083: m: #..#.# # $ $ # #
1084: m: #....# $$ ##$ ####
1085: m: #....# ##### #
1086: m: #...### ## #
1087: m: ####################
1088: 062 new-maze
1089: m: ####################
1090: m: #....# # # #
1091: m: #....# # $ $ #
1092: m: #.... ## $# # $#$ #
1093: m: #...# $ $# $ #
1094: m: #..#### # $ $$ #
1095: m: # #### #### ###
1096: m: # # # #
1097: m: # ## # $ # $ $ #
1098: m: # ## $ ## $ $ #
1099: m: # @# # # #
1100: m: ####################
1101: 063 new-maze
1102: m: ####################
1103: m: #....### #
1104: m: #....##### # #$# ##
1105: m: #....### #$ $ #
1106: m: #....### $ #$$##
1107: m: ## #### $# #$ $ #
1108: m: ## #### $ $ # #
1109: m: #@ ####$###$## $ #
1110: m: ## # # $ #
1111: m: ## ### # $ ####
1112: m: ######## # # #
1113: m: ####################
1114: 064 new-maze
1115: m: ####################
1116: m: # # @#...###
1117: m: # # ##...##
1118: m: # # # ##$## ## ....#
1119: m: # $ # $$$ ....#
1120: m: ###$### $$ ### ##.#
1121: m: # $ # # ####
1122: m: # $ # ### # # #
1123: m: ## #$## $ $$ #
1124: m: # $ ## # # # #
1125: m: # # # # #
1126: m: ####################
1127: 065 new-maze
1128: m: ####################
1129: m: # # #...#@ #
1130: m: # # ....# #
1131: m: # $ # #....# #
1132: m: # ##$#### ##....# #
1133: m: # $ $ # #...# #
1134: m: # $$ # # # $$ #
1135: m: ### $$$# $$ $ #
1136: m: # $ # # # $# #
1137: m: # $# # $ #
1138: m: # # # # # #
1139: m: ####################
1140: 066 new-maze
1141: m: ####################
1142: m: #####@###.##...## #
1143: m: #####$ ..#...# #
1144: m: #### ......# $ #
1145: m: ### $ #.....## # ##
1146: m: ## $$# ##### $ $ #
1147: m: ## $# $ ## $$ #
1148: m: ## # # # $ $ #
1149: m: ## $$ ### #$## #
1150: m: ## $# $ $ $ ##
1151: m: ### # # ###
1152: m: ####################
1153: 067 new-maze
1154: m: ####################
1155: m: #@ # # #
1156: m: ## ### ## #### # ##
1157: m: # # # $$ #
1158: m: # # # # $ # $ ## ##
1159: m: # $ # #$$ # #
1160: m: # ### # ## ##
1161: m: #..#.# $ # $ # #
1162: m: #..#.# $ # ## $$ #
1163: m: #....## $$ $ # #
1164: m: #.....## # #
1165: m: ####################
1166: 068 new-maze
1167: m: ####################
1168: m: # # # # ##
1169: m: # $# $ $ ##...$ $ #
1170: m: # $ # ##....# $ #
1171: m: # ## $ ##....# $ #
1172: m: # $ #....## $ #
1173: m: # $## #...# #
1174: m: # $$$##$## ### ##
1175: m: # # # # # # #
1176: m: # $ # $ ## #
1177: m: # # #@ #
1178: m: ####################
1179: 069 new-maze
1180: m: ####################
1181: m: # # # # # # #
1182: m: # $ $ $ #
1183: m: ## # #$###$## ## #
1184: m: # $ $ # $ #
1185: m: # ###$##$# # $ #
1186: m: # # $ $ ###### $#
1187: m: # $ $$ $ #@#.#...#
1188: m: # # # # #.#...#
1189: m: # ########## #.....#
1190: m: # #.....#
1191: m: ####################
1192: 070 new-maze
1193: m: ####################
1194: m: # # # ## ##
1195: m: # $# $ # ## #
1196: m: # $ $ #..# $ #
1197: m: # $ $ #....# # ##
1198: m: # $# #......### $ #
1199: m: # # #....# #$ #
1200: m: # $ ####..# # #
1201: m: ## $ ## # # $ $##
1202: m: ### $ $#@$ $# #
1203: m: #### # # #
1204: m: ####################
1205: 071 new-maze
1206: m: ####################
1207: m: # ....# ####
1208: m: # .... #
1209: m: # # ########## #
1210: m: # #$ # ###..#
1211: m: # $ #$$### #..#
1212: m: # $ ### $ $ #..#
1213: m: # $ # $ $ # ##..#
1214: m: # # $$ # $ ## ##
1215: m: #@## $# $ $ ##
1216: m: ## ## # ###
1217: m: ####################
1218: 072 new-maze
1219: m: ####################
1220: m: # # #@ # #
1221: m: # $$ #$$# # # ## #
1222: m: # # $ $ #$$ # #
1223: m: ## # # # # # # #
1224: m: # ## # #
1225: m: # # $ # # # #
1226: m: # $ #$ # # $ #..#
1227: m: ##$ # #### #...#
1228: m: # $ #....#
1229: m: # # # #.....#
1230: m: ####################
1231: 073 new-maze
1232: m: ####################
1233: m: # # ##### #
1234: m: ## $ # #### $ #
1235: m: #### $$ #..# # #
1236: m: # $ $ ##..#### ##
1237: m: # $ ###.... $$ #
1238: m: # #$# ....# # $ #
1239: m: # # # $ ..###$# #
1240: m: # # $ #..# ## #
1241: m: # $# #### # $##
1242: m: # # # @# ##
1243: m: ####################
1244: 074 new-maze
1245: m: ####################
1246: m: # # # # #@#
1247: m: # $ $ # $ # #
1248: m: ##$# $### # $$# #
1249: m: # # #.### #$ $ #
1250: m: # #$#....# # ### #
1251: m: # $ #.....## # #
1252: m: ##$ #.#....#$$ $ #
1253: m: # ######..## # # #
1254: m: # $ $ ### #
1255: m: # # # # #
1256: m: ####################
1257: 075 new-maze
1258: m: ####################
1259: m: # # # # #@## # #
1260: m: # $ #
1261: m: # ##$# ##### $ # ##
1262: m: ## ##.....# # #
1263: m: ##$##$#.....###$#$ #
1264: m: # # ##.....# # ##
1265: m: # $ ##..## # #
1266: m: # $ # $ $ $$$ #
1267: m: ## $ $# # # $ #
1268: m: # ## # # #
1269: m: ####################
1270: 076 new-maze
1271: m: ###### #####
1272: m: # # # #
1273: m: # $ #### $ #
1274: m: # $ $ #
1275: m: # ###@###$ #
1276: m: ########## ###
1277: m: #.. ## #
1278: m: #.. ##$ #
1279: m: #.. ## $ #
1280: m: #.. ## $ #
1281: m: #.. $ $ #
1282: m: ### #########
1283: m: ####
1284: 077 new-maze
1285: m: ###########
1286: m: # #
1287: m: # $ $ #
1288: m: ###### # $ ##### #
1289: m: # ##### $ ##$#
1290: m: # $ $ #
1291: m: # ## ## #
1292: m: # ##@##### ## #
1293: m: # #### # ## ##
1294: m: #....# # $ #
1295: m: #....# # #
1296: m: ###### #######
1297: 078 new-maze
1298: m: #############
1299: m: # #
1300: m: # ### $$ #
1301: m: # # $ $ #
1302: m: # $####$######
1303: m: # $ ## #####
1304: m: # $$ $ ...#
1305: m: ### ## $$# ...#
1306: m: # ## # ...#
1307: m: # # ...#
1308: m: ###@#############
1309: m: ###
1310: 079 new-maze
1311: m: #################
1312: m: ###@## ...#
1313: m: # # ...#
1314: m: # $ # ...#
1315: m: # $$ # ...#
1316: m: ## $ ###$##########
1317: m: # ### $ #
1318: m: ## $ $ #
1319: m: # $ # $ #
1320: m: # $ # #
1321: m: # $ # #
1322: m: # # #
1323: m: ###########
1324: 080 new-maze
1325: m: #####
1326: m: ########## #
1327: m: # # #
1328: m: # $ $ $$ #
1329: m: # ##### ## $ #
1330: m: #$$ #$## $ #
1331: m: # ### # ##$ #
1332: m: ###### ### $ $ #
1333: m: #.... ## #
1334: m: #.... ######
1335: m: #.... #
1336: m: ###########@##
1337: m: ###
1338: 081 new-maze
1339: m: ######
1340: m: #### #
1341: m: # ## #
1342: m: # $ #
1343: m: ### #### ########
1344: m: # $ $ ## ...#
1345: m: # $$ $$ ...#
1346: m: # $ $## ...#
1347: m: ##@## ## ## ...#
1348: m: ### $ ########
1349: m: # $$ #
1350: m: # # #
1351: m: #########
1352: 082 new-maze
1353: m: ####### #########
1354: m: # # # ## #
1355: m: # ### # # $ #
1356: m: # # $ ### $ #
1357: m: # $$ ##$ #
1358: m: # #### ## #
1359: m: #@############ ##
1360: m: ###.. #####$ #
1361: m: #.. #### #
1362: m: #.. $$ #
1363: m: #.. #### $ #
1364: m: #.. # # #
1365: m: ######## #####
1366: 083 new-maze
1367: m: #######
1368: m: # ##########
1369: m: # # # ##
1370: m: # $ # $ $ #
1371: m: # $ # $ ## #
1372: m: # $$ ##$ $ #
1373: m: ## # ## #######
1374: m: ## # ## ...#
1375: m: # #$ ...#
1376: m: # $$ ...#
1377: m: # ##@# ...#
1378: m: ################
1379: 084 new-maze
1380: m: ############
1381: m: # # ##
1382: m: # $ $ # ######
1383: m: #### ##### #
1384: m: #.. # #### #
1385: m: #.#### #### #
1386: m: #.... # $ ####
1387: m: # ...# # $$$# ##
1388: m: ###.#### ## $@$ #
1389: m: # ##### $ # #
1390: m: # #.# $ $###$ #
1391: m: # #.######## # $ #
1392: m: # #.. ## $ #
1393: m: # # ####### $ # # #
1394: m: # # # ##
1395: m: ##### ##########
1396: 085 new-maze
1397: m: ####################
1398: m: # # # #
1399: m: # $ ## ### ##
1400: m: ##### ## $ $ #
1401: m: ##..## # # $ # # #
1402: m: #.... $ ##$# ##
1403: m: #.... $##### #$##
1404: m: ##..# # # # $ #
1405: m: ###.# # $ $ # @#
1406: m: ## $ $ # # ####
1407: m: ## ###########
1408: m: ####################