![]() ![]() | ![]() |
1.1 pazsan 1: \ sokoban - a maze game in FORTH
2:
1.9 ! anton 3: \ Copyright (C) 1995,1997,1998,2003,2007 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
1.8 anton 9: \ as published by the Free Software Foundation, either version 3
1.5 anton 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
1.8 anton 18: \ along with this program. If not, see http://www.gnu.org/licenses/.
1.5 anton 19:
1.1 pazsan 20: \ Contest from Rick VanNorman in comp.lang.forth
21:
22: \ SOKOBAN
23:
24: \ Sokoban is a visual game of pushing. You (Soko) are represented by the
25: \ at-sign "@" You may move freely through the maze on unoccupied spaces.
26: \ The dollar-signs "$" are the rocks you have to push. You can only push
27: \ one rock at a time, and cannot push a rock through a wall "#" or over
28: \ another rock. The object is to push the rocks to their goals which are
29: \ indicated by the periods ".". There are 50 levels, the first of which
30: \ is shown below.
31:
32: \ program is ANS FORTH with environmental dependency of case-insensitiv
1.2 pazsan 33: \ source. Tested with gforth, bigFORTH and pfe
1.1 pazsan 34:
1.2 pazsan 35: \ bell (7) is replaced with "Wuff!" ;-)
1.1 pazsan 36: \ (this is a german joke)
37: \ I don't like the keyboard interpreting CASE-statement either, but
38: \ was to lazy to use a table.
39: \ I could have used blocks as level tables, but as I don't have a good
40: \ block editor for gforth now, I let it be.
41:
42: 40 Constant /maze \ maximal maze line
43:
44: Create maze 1 cells allot /maze 25 * allot \ current maze
45: Variable mazes 0 mazes ! \ root pointer
46: Variable soko 0 soko ! \ player position
47: Variable >maze 0 >maze ! \ current compiled maze
48:
49: \ score information
50:
51: Variable rocks 0 rocks ! \ number of rocks left
52: Variable level# 0 level# ! \ Current level
53: Variable moves 0 moves ! \ number of moves
54: Variable score 0 score ! \ total number of scores
55:
56: : new-maze ( n -- addr ) \ add a new level
57: here mazes rot 1 ?DO @ LOOP !
58: 0 , 0 , here >maze ! 0 , ;
59: : count-$ ( addr u -- n ) 0 rot rot
1.2 pazsan 60: over + swap ?DO I c@ [char] $ = - LOOP ;
1.1 pazsan 61: : m: ( "string" -- ) \ add a level line (top first!)
62: -1 parse tuck 2dup count-$ >maze @ 1 cells - +!
63: here swap move dup allot
64: /maze swap - here over bl fill allot
65: >maze @ here over cell+ - swap ! ;
66:
67: : maze-field ( -- addr n )
68: maze dup cell+ swap @ chars ;
69:
70: : .score ( -- )
71: ." Level: " level# @ 2 .r ." Score: " score @ 4 .r
72: ." Moves: " moves @ 6 .r ." Rocks: " rocks @ 2 .r ;
73:
74: : .maze ( -- ) \ display maze
75: 0 0 at-xy .score
1.2 pazsan 76: cr maze-field over + swap
1.1 pazsan 77: DO I /maze type cr /maze chars +LOOP ;
78:
79: : find-soko ( -- n )
80: maze-field 0
81: DO dup I chars + c@ [char] @ =
82: IF drop I UNLOOP EXIT THEN
83: LOOP true abort" No player in field!" ;
84:
85: : level ( n -- flag ) \ finds level n
86: dup level# !
87: mazes swap 0
88: ?DO @ dup 0= IF drop false UNLOOP EXIT THEN LOOP
89: cell+ dup @ rocks !
90: cell+ dup @ cell+ maze swap chars move
91: find-soko soko ! true ;
92:
93: \ now the playing rules as replacement strings
94:
95: : 'soko ( -- addr ) \ gives player's address
96: maze cell+ soko @ chars + ;
97:
98: : apply-rule? ( addr u offset -- flag )
99: 'soko 2swap
100: \ offset soko-addr addr u
101: 0 DO
102: over c@ over c@ <>
103: IF drop 2drop false UNLOOP EXIT THEN
104: >r over chars + r> char+
105: LOOP 2drop drop true ;
106:
107: : apply-rule! ( addr u offset -- )
108: 'soko
109: 2swap
110: \ offset soko-addr addr u
111: 0 DO
112: count rot tuck c! rot tuck chars + rot
113: LOOP 2drop drop ;
114:
115: : play-rule ( addr1 u1 addr2 u2 offset -- flag )
116: >r 2swap r@ apply-rule?
1.2 pazsan 117: IF r> apply-rule! true ELSE r> drop 2drop false THEN ;
1.1 pazsan 118:
119: \ player may move up, down, left and right
120:
121: : move: ( offset -- )
122: Create ,
123: DOES> @ >r 1 moves +!
124: S" @ " S" @" r@ play-rule IF r> soko +! EXIT THEN
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
129: IF r> soko +! 1 rocks +! -1 score +! EXIT THEN
130: S" @$." S" @*" r@ play-rule
131: IF r> soko +! -1 rocks +! 1 score +! EXIT THEN
132: S" &*." S" .&*" r@ play-rule IF r> soko +! 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
137: IF r> soko +! 1 rocks +! -1 score +! EXIT THEN
1.4 pazsan 138: S" &$." S" .@*" r@ play-rule
1.7 pazsan 139: IF r> soko +! -1 rocks +! 1 score +! EXIT THEN
1.2 pazsan 140: -1 moves +! r> drop ;
1.1 pazsan 141:
142: 1 move: soko-right
143: -1 move: soko-left
144: /maze move: soko-down
145: /maze negate move: soko-up
146:
147: : print-help
148: ." Move soko '@' with h, j, k or l key (like vi)" cr
149: ." or with vt100 cursor keys." cr ;
150:
151: : play-loop ( -- )
152: BEGIN
153: rocks @ 0=
154: IF
155: level# @ 1+ level 0= IF EXIT THEN
156: THEN
157: .maze
158: key
159: CASE
160: [char] ? OF print-help false ENDOF
161:
162: [char] h OF soko-left false ENDOF
163: [char] j OF soko-down false ENDOF
164: [char] k OF soko-up false ENDOF
165: [char] l OF soko-right false ENDOF
166:
167: \ vt100 cursor keys should work too
168: 27 OF key [char] [ <> ENDOF
169: [char] D OF soko-left false ENDOF
170: [char] B OF soko-down false ENDOF
171: [char] A OF soko-up false ENDOF
172: [char] C OF soko-right false ENDOF
173:
174: [char] q OF true ENDOF
1.2 pazsan 175: false swap ENDCASE
1.1 pazsan 176: UNTIL ;
177:
178: \ start game with "sokoban"
179:
180: : sokoban ( -- )
1.2 pazsan 181: page 1 level IF play-loop ." Game finished!" THEN ;
1.1 pazsan 182:
183: 001 new-maze
184: m: #####
185: m: # #
186: m: #$ #
187: m: ### $##
188: m: # $ $ #
189: m: ### # ## # ######
190: m: # # ## ##### ..#
191: m: # $ $ ..#
192: m: ##### ### #@## ..#
193: m: # #########
194: m: #######
195: 002 new-maze
196: m: ############
197: m: #.. # ###
198: m: #.. # $ $ #
199: m: #.. #$#### #
200: m: #.. @ ## #
201: m: #.. # # $ ##
202: m: ###### ##$ $ #
203: m: # $ $ $ $ #
204: m: # # #
205: m: ############
206: 003 new-maze
207: m: ########
208: m: # @#
209: m: # $#$ ##
210: m: # $ $#
211: m: ##$ $ #
212: m: ######### $ # ###
213: m: #.... ## $ $ #
214: m: ##... $ $ #
215: m: #.... ##########
216: m: ########
217: 004 new-maze
218: m: ########
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: 005 new-maze
233: m: #####
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: 006 new-maze
247: m: ###### ###
248: m: #.. # ##@##
249: m: #.. ### #
250: m: #.. $$ #
251: m: #.. # # $ #
252: m: #..### # $ #
253: m: #### $ #$ #
254: m: # $# $ #
255: m: # $ $ #
256: m: # ## #
257: m: #########
258: 007 new-maze
259: m: #####
260: m: ####### ##
261: m: ## # @## $$ #
262: m: # $ #
263: m: # $ ### #
264: m: ### #####$###
265: m: # $ ### ..#
266: m: # $ $ $ ...#
267: m: # ###...#
268: m: # $$ # #...#
269: m: # ### #####
270: m: ####
271: 008 new-maze
272: m: ####
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: 009 new-maze
289: m: #######
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: 010 new-maze
304: m: ### #############
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: 011 new-maze
321: m: ####
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: 012 new-maze
337: m: ################
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: 013 new-maze
351: m: ##### ####
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: 014 new-maze
366: m: #########
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: 015 new-maze
380: m: #######
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: 016 new-maze
397: m: ########
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: 017 new-maze
414: m: #####
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: 018 new-maze
430: m: ##########
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: 019 new-maze
445: m: ###########
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: 020 new-maze
459: m: ######
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: 021 new-maze
476: m: ##########
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: 022 new-maze
493: m: #########
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: 023 new-maze
509: m: ###### ####
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: 024 new-maze
526: m: #######
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: 025 new-maze
541: m: ###############
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: 026 new-maze
558: m: ####
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: 027 new-maze
575: m: #######
576: m: # # #####
577: m: ## # #...###
578: m: # $# #... #
579: m: # $ #$$ ... #
580: m: # $# #... .#
581: m: # # $########
582: m: ##$ $ $ #
583: m: ## # $$ # #
584: m: ###### ##$$@#
585: m: # ##
586: m: ########
587: 028 new-maze
588: m: #################
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: 029 new-maze
602: m: #####
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: 030 new-maze
618: m: #####
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: 031 new-maze
632: m: ###########
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: 032 new-maze
647: m: ####
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: 033 new-maze
664: m: ####
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: 034 new-maze
680: m: ############
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: 035 new-maze
696: m: #########
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: 036 new-maze
712: m: ############ ######
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: 037 new-maze
729: m: #####
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: 038 new-maze
746: m: ###########
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: 039 new-maze
762: m: ####
763: m: ####### @#
764: m: # $ #
765: m: # $## $#
766: m: ##$#...# #
767: m: # $... #
768: m: # #. .# ##
769: m: # # #$ #
770: m: #$ $ #
771: m: # #######
772: m: ####
773: 040 new-maze
774: m: ######
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: 041 new-maze
791: m: ############
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: 042 new-maze
808: m: #####
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: 043 new-maze
824: m: ########
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: 044 new-maze
838: m: #######
839: m: ##### # ####
840: m: # # $ #
841: m: #### #$$ ## ## #
842: m: ## # # ## ###
843: m: # ### $#$ $ $ #
844: m: #... # ## # #
845: m: #...# @ # ### ##
846: m: #...# ### $ $ #
847: m: ######## ## # #
848: m: #########
849: 045 new-maze
850: m: #####
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: 046 new-maze
866: m: ##########
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: 047 new-maze
883: m: ####
884: m: ######### ##
885: m: ## $ $ #####
886: m: # ## ## ##...#
887: m: # #$$ $ $$#$##...#
888: m: # # @ # ...#
889: m: # $# ###$$ ...#
890: m: # $ $$ $ ##....#
891: m: ###$ #######
892: m: # #######
893: m: ####
894: 048 new-maze
895: m: #########
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: 049 new-maze
912: m: ####
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: 050 new-maze
928: m: ############
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: 051 new-maze
945: m: #########
946: m: # #
947: m: # $ $#
948: m: #### #
949: m: # $ ##
950: m: #### $ #
951: m: #.. $ ## ####
952: m: #.. $## #
953: m: #.. $ #
954: m: #.###$### #@#
955: m: #.# # ###
956: m: ### #######
957: 052 new-maze
958: m: ####################
959: m: # ########## @#
960: m: # $# # ######
961: m: # #### # ###
962: m: ##### # ###
963: m: # $ # ###
964: m: # $#### # # #
965: m: # # # #..#$### # #
966: m: # # #$ #..# $ $$ #
967: m: # #..# # # #
968: m: # # #..# # # #
969: m: ####################
970: 053 new-maze
971: m: ####################
972: m: # ###
973: m: # $# $ ## $ ##
974: m: # $### # $$ ##
975: m: #.### $ $ ## ##
976: m: #...# # # #$ #
977: m: #..##$$#### $ # #
978: m: #...# $ ## ###
979: m: #...$ ### # # #
980: m: ##.. $# ## ##@ #
981: m: ###.# #
982: m: ####################
983: 054 new-maze
984: m: ####################
985: m: # # # # #@#
986: m: # $ $ $ # #
987: m: ## ###..## ### #
988: m: # #....#$# $### #
989: m: # $ #....# $ $ $ #
990: m: # #....# # # $ $ #
991: m: # ##..## #$# #
992: m: ##$## ## # #$##
993: m: # $ $ # # #
994: m: # # # # #
995: m: ####################
996: 055 new-maze
997: m: ####################
998: m: # @## # ##
999: m: # ## $ $ ##
1000: m: # ###....# # # ###
1001: m: # #....# # # $ #
1002: m: ### #...# # #
1003: m: ## ##.# $ $ #
1004: m: ## $ $ ### # # ###
1005: m: ## $ # # $ #
1006: m: #### $ $# # # # $ #
1007: m: #### # # ##
1008: m: ####################
1009: 056 new-maze
1010: m: ####################
1011: m: # # ## # @###
1012: m: ## $ # $### #
1013: m: ##$# $ ##$# $ $ #
1014: m: # $# $ ###
1015: m: # ## $ ### #....#
1016: m: # # $# # # # #....##
1017: m: # $ $ # #....###
1018: m: ##$ ### $ #....####
1019: m: # # $ ######
1020: m: # # # ######
1021: m: ####################
1022: 057 new-maze
1023: m: ####################
1024: m: #@ ### # # #
1025: m: # # # # $ $ #
1026: m: ##### # $ $#$# #
1027: m: #.#..# ##$ $ #
1028: m: #..... $ # ##
1029: m: #..... ###$##$###
1030: m: #.#..# $ # #
1031: m: ##### # #$ $ #
1032: m: ##### # $ $ $ #
1033: m: ##### # # # # #
1034: m: ####################
1035: 058 new-maze
1036: m: ####################
1037: m: ##... ## # # #
1038: m: #.... $ ## #
1039: m: #....# # #$###$ #
1040: m: #...# # # #
1041: m: ##.# #$ # $## #
1042: m: # # # $ $ ### $ #
1043: m: # $ $ # # ## #
1044: m: ## # ## #$$# $# # #
1045: m: # # $ $ # ##
1046: m: # # # # @#
1047: m: ####################
1048: 059 new-maze
1049: m: ####################
1050: m: # # #@# ## #####
1051: m: # # # $ $ #####
1052: m: # # ###### $ ###
1053: m: # # #....# $$ #
1054: m: ##$##$##....# #
1055: m: # #....##$##$##
1056: m: # $$ #....# #
1057: m: # $ $ # # ### #
1058: m: ##### $ $ $ #
1059: m: ##### # # # ##
1060: m: ####################
1061: 060 new-maze
1062: m: ####################
1063: m: # ###..### #
1064: m: # $$ ###..### $@ #
1065: m: # # ##......# $ #
1066: m: # #......# $ #
1067: m: #### ###..######$ #
1068: m: # $$$ #..# # #
1069: m: # $# $ $ $$ #$ #
1070: m: # # ## $ ## # #
1071: m: # $ $ ## $ $ #
1072: m: # # ## ## # #
1073: m: ####################
1074: 061 new-maze
1075: m: ####################
1076: m: # # # # # # #
1077: m: # @# # ## $ $ ##
1078: m: #### # # # $ #
1079: m: # # ## #$ ## ## #
1080: m: # $ $ $ #
1081: m: #..###$$## $##$ ## #
1082: m: #..#.# # $ $ # #
1083: m: #....# $$ ##$ ####
1084: m: #....# ##### #
1085: m: #...### ## #
1086: m: ####################
1087: 062 new-maze
1088: m: ####################
1089: m: #....# # # #
1090: m: #....# # $ $ #
1091: m: #.... ## $# # $#$ #
1092: m: #...# $ $# $ #
1093: m: #..#### # $ $$ #
1094: m: # #### #### ###
1095: m: # # # #
1096: m: # ## # $ # $ $ #
1097: m: # ## $ ## $ $ #
1098: m: # @# # # #
1099: m: ####################
1100: 063 new-maze
1101: m: ####################
1102: m: #....### #
1103: m: #....##### # #$# ##
1104: m: #....### #$ $ #
1105: m: #....### $ #$$##
1106: m: ## #### $# #$ $ #
1107: m: ## #### $ $ # #
1108: m: #@ ####$###$## $ #
1109: m: ## # # $ #
1110: m: ## ### # $ ####
1111: m: ######## # # #
1112: m: ####################
1113: 064 new-maze
1114: m: ####################
1115: m: # # @#...###
1116: m: # # ##...##
1117: m: # # # ##$## ## ....#
1118: m: # $ # $$$ ....#
1119: m: ###$### $$ ### ##.#
1120: m: # $ # # ####
1121: m: # $ # ### # # #
1122: m: ## #$## $ $$ #
1123: m: # $ ## # # # #
1124: m: # # # # #
1125: m: ####################
1126: 065 new-maze
1127: m: ####################
1128: m: # # #...#@ #
1129: m: # # ....# #
1130: m: # $ # #....# #
1131: m: # ##$#### ##....# #
1132: m: # $ $ # #...# #
1133: m: # $$ # # # $$ #
1134: m: ### $$$# $$ $ #
1135: m: # $ # # # $# #
1136: m: # $# # $ #
1137: m: # # # # # #
1138: m: ####################
1139: 066 new-maze
1140: m: ####################
1141: m: #####@###.##...## #
1142: m: #####$ ..#...# #
1143: m: #### ......# $ #
1144: m: ### $ #.....## # ##
1145: m: ## $$# ##### $ $ #
1146: m: ## $# $ ## $$ #
1147: m: ## # # # $ $ #
1148: m: ## $$ ### #$## #
1149: m: ## $# $ $ $ ##
1150: m: ### # # ###
1151: m: ####################
1152: 067 new-maze
1153: m: ####################
1154: m: #@ # # #
1155: m: ## ### ## #### # ##
1156: m: # # # $$ #
1157: m: # # # # $ # $ ## ##
1158: m: # $ # #$$ # #
1159: m: # ### # ## ##
1160: m: #..#.# $ # $ # #
1161: m: #..#.# $ # ## $$ #
1162: m: #....## $$ $ # #
1163: m: #.....## # #
1164: m: ####################
1165: 068 new-maze
1166: m: ####################
1167: m: # # # # ##
1168: m: # $# $ $ ##...$ $ #
1169: m: # $ # ##....# $ #
1170: m: # ## $ ##....# $ #
1171: m: # $ #....## $ #
1172: m: # $## #...# #
1173: m: # $$$##$## ### ##
1174: m: # # # # # # #
1175: m: # $ # $ ## #
1176: m: # # #@ #
1177: m: ####################
1178: 069 new-maze
1179: m: ####################
1180: m: # # # # # # #
1181: m: # $ $ $ #
1182: m: ## # #$###$## ## #
1183: m: # $ $ # $ #
1184: m: # ###$##$# # $ #
1185: m: # # $ $ ###### $#
1186: m: # $ $$ $ #@#.#...#
1187: m: # # # # #.#...#
1188: m: # ########## #.....#
1189: m: # #.....#
1190: m: ####################
1191: 070 new-maze
1192: m: ####################
1193: m: # # # ## ##
1194: m: # $# $ # ## #
1195: m: # $ $ #..# $ #
1196: m: # $ $ #....# # ##
1197: m: # $# #......### $ #
1198: m: # # #....# #$ #
1199: m: # $ ####..# # #
1200: m: ## $ ## # # $ $##
1201: m: ### $ $#@$ $# #
1202: m: #### # # #
1203: m: ####################
1204: 071 new-maze
1205: m: ####################
1206: m: # ....# ####
1207: m: # .... #
1208: m: # # ########## #
1209: m: # #$ # ###..#
1210: m: # $ #$$### #..#
1211: m: # $ ### $ $ #..#
1212: m: # $ # $ $ # ##..#
1213: m: # # $$ # $ ## ##
1214: m: #@## $# $ $ ##
1215: m: ## ## # ###
1216: m: ####################
1217: 072 new-maze
1218: m: ####################
1219: m: # # #@ # #
1220: m: # $$ #$$# # # ## #
1221: m: # # $ $ #$$ # #
1222: m: ## # # # # # # #
1223: m: # ## # #
1224: m: # # $ # # # #
1225: m: # $ #$ # # $ #..#
1226: m: ##$ # #### #...#
1227: m: # $ #....#
1228: m: # # # #.....#
1229: m: ####################
1230: 073 new-maze
1231: m: ####################
1232: m: # # ##### #
1233: m: ## $ # #### $ #
1234: m: #### $$ #..# # #
1235: m: # $ $ ##..#### ##
1236: m: # $ ###.... $$ #
1237: m: # #$# ....# # $ #
1238: m: # # # $ ..###$# #
1239: m: # # $ #..# ## #
1240: m: # $# #### # $##
1241: m: # # # @# ##
1242: m: ####################
1243: 074 new-maze
1244: m: ####################
1245: m: # # # # #@#
1246: m: # $ $ # $ # #
1247: m: ##$# $### # $$# #
1248: m: # # #.### #$ $ #
1249: m: # #$#....# # ### #
1250: m: # $ #.....## # #
1251: m: ##$ #.#....#$$ $ #
1252: m: # ######..## # # #
1253: m: # $ $ ### #
1254: m: # # # # #
1255: m: ####################
1256: 075 new-maze
1257: m: ####################
1258: m: # # # # #@## # #
1259: m: # $ #
1260: m: # ##$# ##### $ # ##
1261: m: ## ##.....# # #
1262: m: ##$##$#.....###$#$ #
1263: m: # # ##.....# # ##
1264: m: # $ ##..## # #
1265: m: # $ # $ $ $$$ #
1266: m: ## $ $# # # $ #
1267: m: # ## # # #
1268: m: ####################
1269: 076 new-maze
1270: m: ###### #####
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: 077 new-maze
1284: m: ###########
1285: m: # #
1286: m: # $ $ #
1287: m: ###### # $ ##### #
1288: m: # ##### $ ##$#
1289: m: # $ $ #
1290: m: # ## ## #
1291: m: # ##@##### ## #
1292: m: # #### # ## ##
1293: m: #....# # $ #
1294: m: #....# # #
1295: m: ###### #######
1296: 078 new-maze
1297: m: #############
1298: m: # #
1299: m: # ### $$ #
1300: m: # # $ $ #
1301: m: # $####$######
1302: m: # $ ## #####
1303: m: # $$ $ ...#
1304: m: ### ## $$# ...#
1305: m: # ## # ...#
1306: m: # # ...#
1307: m: ###@#############
1308: m: ###
1309: 079 new-maze
1310: m: #################
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: 080 new-maze
1324: m: #####
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: 081 new-maze
1338: m: ######
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: 082 new-maze
1352: m: ####### #########
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: 083 new-maze
1366: m: #######
1367: m: # ##########
1368: m: # # # ##
1369: m: # $ # $ $ #
1370: m: # $ # $ ## #
1371: m: # $$ ##$ $ #
1372: m: ## # ## #######
1373: m: ## # ## ...#
1374: m: # #$ ...#
1375: m: # $$ ...#
1376: m: # ##@# ...#
1377: m: ################
1378: 084 new-maze
1379: m: ############
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: 085 new-maze
1396: m: ####################
1397: m: # # # #
1398: m: # $ ## ### ##
1399: m: ##### ## $ $ #
1400: m: ##..## # # $ # # #
1401: m: #.... $ ##$# ##
1402: m: #.... $##### #$##
1403: m: ##..# # # # $ #
1404: m: ###.# # $ $ # @#
1405: m: ## $ $ # # ####
1406: m: ## ###########
1407: m: ####################